Giter Site home page Giter Site logo

hotcss's Introduction

hotcss

让移动端布局开发更加容易

点击这里一键加群(130977811),沟通更便捷

介绍

  • hotcss不是一个库,也不是一个框架。它是一个移动端布局开发解决方案。使用hotcss可以让移动端布局开发更容易。

  • 使用动态的HTML根字体大小和动态的viewport scale。

  • 遵循视觉一致性原则。在不同大小的屏幕和不同的设备像素密度下,让你的页面看起来是一样的。

  • 不仅便捷了你的布局,同时它使用起来异常简单。可能你会说 talk is cheap,show me the code,那我现在列下hotcss整个项目的目录结构。

├── example	//所有的示例都在这个目录下
   ├── duang
   ├── normal
   └── wolf

└── src	//主要文件在这里
    ├── hotcss.js
    ├── px2rem.less
    ├── px2rem.scss
    └── px2rem.styl
示例名称 演示地址 贡献者
普通的演示 http://imochen.github.io/hotcss/example/normal/ 墨尘
duang游戏 http://imochen.github.io/hotcss/example/duang/ 阳阳
灰太狼 http://imochen.github.io/hotcss/example/wolf/ 阳阳

谁在用hotcss

优势

  • 保证不同设备下的统一视觉体验。
  • 不需要你再手动设置viewport,根据当前环境计算出最适合的viewport
  • 支持任意尺寸的设计图,不局限于特定尺寸的设计图。
  • 支持单一项目,多种设计图尺寸,专为解决大型,长周期项目。
  • 提供px2rem转换方法,CSS布局,零成本转换,原始值不丢失。
  • 有效解决移动端真实1像素问题。

用法

引入hotcss.js

<script src="/path/to/hotcss.js"></script>

根据页面渲染机制,hotcss.js必须在其他JS加载前加载,万不可异步加载。

如果可以,你应将hotcss.js的内容以内嵌的方式写到<head>标签里面进行加载,并且保证在其他js文件之前。

为了避免不必要的bug,请将CSS放到该JS之前加载。

css要怎么写

你可能已经注意到在src/目录下有px2rem.scss/px2rem.less/px2rem.styl三个文件。没错,这就是hotcss提供的将px转为rem的方法,可根据您的需要选择使用。

推荐使用scss来编写css,在scss文件的头部使用importpx2rem导入

@import '/path/to/px2rem.scss';

如果你的项目是单一尺寸设计图,那么你需要去px2rem.scss中定义全局的designWidth

@function px2rem( $px ){
	@return $px*320/$designWidth/20 + rem;
}
$designWidth : 750; //如设计图是750

如果你的项目是多尺寸设计图,那么就不能定义全局的designWidth了。需要在你的业务scss中单独定义。如以下是style.scss

@import '/path/to/px2rem.scss';
$designWidth : 750; //如设计图是750

$designWidth必须要在使用px2rem前定义。否则scss编译会出错。

注意:如果使用less,则需要引入less-plugin-functions,普通的less编译工具无法正常编译。

想用px怎么办?

直接写px肯定是不能适配的,那hotcss.js会在html上注册data-dpr属性,这个属性用来标识当前环境dpr值。那么要使用px可以这么写。

//scss写法
#container{
	font-size: 12px ;
	[data-dpr="2"] &{
		font-size: 24px;
	}
	[data-dpr="3"] &{
		font-size: 36px;
	}
}

接口说明

initial-dpr

可以通过强制设置dpr。来关闭响应的viewport scale。使得viewport scale始终为固定值。

<meta name="hotcss" content="initial-dpr=1">
<script src="/path/to/hotcss.js"></script>
<!--
如iphone微信强设dpr=1,则可以长按识别二维码。
注意,强制设置dpr=1后,css中的1px在2x,3x屏上则不再是真实的1px。
-->

max-width

通过设置该值来优化平板/PC访问体验,注意该值默认值为540。设置为0则该功能关闭。 为了配合使用该设置,请给body增加样式width:16rem;margin:0 auto;

<meta name="hotcss" content="max-width=640">
<script src="/path/to/hotcss.js"></script>
<!--
默认为540,可根据具体需求自己定义
-->
<style>
body{
	width: 16rem;
	margin: 0 auto;
}
</style>

design-width

通过对design-width的设置可以在本页运行的JS中直接使用hotcss.px2rem/hotcss.rem2px方法,无需再传递第二个值。

<meta name="hotcss" content="design-width=750">
<script src="/path/to/hotcss.js"></script>

hotcss.mresize

用于重新计算布局,一般不需要你手动调用。

hotcss.mresize();

hotcss.callback

触发mresize的时候会执行该方法。

hotcss.callback = function(){
  //your code here
}

单位转换hotcss.px2rem/hotcss.rem2px

hotcss.px2remhotcss.rem2px你可以预先设定hotcss.designWidth可以在meta中设置design-width,则之后使用这两个方法不需要再传递第二个参数。

迭代后仍然支持在js中设置hotcss.designWidth,推荐使用meta去设置。

/**
* [px2rem px值转换为rem值]
* @param  {[number]} px          [需要转换的值]
* @param  {[number]} designWidth [设计图的宽度尺寸]
* @return {[number]}             [返回转换后的结果]
*/
hotcss.px2rem( px , designWidth );

/**
* 同上。
* 注意:因为rem可能为小数,转换后的px值有可能不是整数,需要自己手动处理。
*/
hotcss.rem2px( rem , designWidth );


//你可以在meta中定义design-width,此后使用px2rem/rem2px,就不需要传递designWidth值了。同时也支持旧的设置方式,直接在JS中设置hotcss.designWidth
hotcss.px2rem(200);
hotcss.rem2px(350);

辅助开发资源

hotcss's People

Contributors

imochen avatar keraun avatar lijason1121 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hotcss's Issues

px2rem

想问一下,*320 和 /20
320 是ideal viewport
那 /20 代表什么呢?

不设置高度字体内容会变大

不设置高度字体内容会变大
有的情况下,需要让内容自动将元素的高度撑开,但是不给这个元素设定高度,元素的内容超过一行的时候 整个页面,的字体 会变大

hotcss.js 算是不是有点问题

我用 postcss-px2rem remunit 设置为 37.5 即是一倍图, 在iphone6模式下, 我设置40px字体大小, 显示出来不是40px大小呀, 用flexible.js的话就是40px的

希望添加2个参数配置

现在发现源码里面有20和320的字样;
应该是在320px宽度的设备上1rem=20px吧
现在设备发展很快啊,我们都是具有iPhone X的375px宽度上开发的,还有我们的希望配置的1rem=50px;
配合 postcss-pxtorem插件的rootValue:
如下postcss.config.js 配置

const pxtorem = require('postcss-pxtorem')

module.exports = {
  plugins: [
    flexbugsFixes(),
    autoprefixer({
      flexbox: 'no-2009'
      // overrideBrowserslist: ['> 1% in CN', 'android >= 4.4.4', 'ios >= 9', 'not IE 11'] // target = 'desktop'
    }),
    process.env.REM_ENV && pxtorem({
      rootValue: pkgJSon.remUnit, // 配置自动转换的50
      propList: ['*'],
      mediaQuery: true
    })
  ].filter(Boolean)
}

然后使用

<meta name="hotcss" rem-unit="50" device-width="375">

是否可以呢?

如果你这边改了我以后推广就推广你这个github,不然我自己fork改一下

才发现这个项目fork这么多,魔改的很多啊

安卓的dpr靠谱么?

对比了一下hotcss和淘宝的flexible,看起来最大的不同就是你们考虑了安卓的dpr(不知道对不对)。
这个在实际中没遇到什么问题么?

Sublime新建代码片段,让hotcss更顺手

hotcss Sulime text 代码片段

在使用hotcss的过程中会经常输入px2remdata-dpr,你感觉麻烦吗?不要紧,sublime代码片段可以帮助你。

如何使用

Sass开发环境下

在使用此代码片段前,请保证您的sublime已安装scss插件,插件安装方法这里就不做解释了。还不会的童鞋请点击这里

  1. 先现在这两段代码片段

    px2rem 点击下载

    data-dpr 点击下载

  2. 打开sublime text,菜单栏找到preferences->Browse packages->user

  3. 把下载好的文件直接放进去就行了

  4. 尽情的撸码了!

Less开发环境下

同sass一样,请安装Less插件

  1. 同样下载这两段代码

    px2rem 点击下载

    data-dpr 点击下载

  2. 打开sublime text,菜单栏找到preferences->Browse packages->user

  3. 把下载好的文件直接放进去就行了

  4. 用sublime打开这两个文件

    <scope>source.scss</scope>
    //把上面这段话更改为
    <scope>source.less</scope>
    

拓展阅读

Sass篇

Sass官网

Sass教程

Less篇

Less官网

Less教程

font-size问题?

font-size 也用 rem 的话,宽屏、窄屏上字号相差太大。
可能要根据 device-pixel-ratio 设置 body 的font-size,内容的font-size都使用 em。

微信下的一个兼容问题

在mresize方法中,获取window.innerWidth存在兼容问题,在微信下,横向转屏,然后再转成竖向之后,获取到的值有问题。
改为如下写法没问题了:
var innerWidth = document.documentElement.clientWidth || document.body.clientWidth;

请问怎么配合postcss-plugin-px2rem使用

我现在的项目使用的vux组件框架,webpack和vue-loader,我看hotcss的px2rem的转换公式是$px*320/$designWidth/20 + rem,和那些postcss的px2rem的插件公式都不一样。

在安卓app中viewport无效

我们公司的安卓app内置的webview当中viewport好像并没有生效,1px的线还是那么粗!尝试做了 settings.getUserAgentString();
//增加下面两行代码:
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
但还是没有效果,请问是需要其他的什么配置吗?

在ios下长按图片的时候有所偏移

有没有遇到一个问题,就是用hotcss,在ios下长按图片的时候有所偏移,他会跑到

<body class="body-style">
<div style="height: 200px;"></div>
<div>
    <img style="width: 400px;height: 300px;" src="http://jzimg.oss-cn-shenzhen.aliyuncs.com/user-dir/Tbzd8mN8dt.JPG">
</div>
</body>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.