scss转css 以及hotcss使用

hotcss官网:http://imochen.github.io/hotcss/

用法

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

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

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

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

css写法

在src/目录下有px2rem.scss/px2rem.less两个文件。没错,这就是hotcss提供的将px转为rem的方法。

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

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

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

@function px2rem( $px ){
    @return $px*320/$designWidth/20 + rem;    /*这是在px2rem.scss中定义的,所有引用此文件的scss文件转换都会以此为标准*/
}
$designWidth : 750; //如设计图是750

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

@import '/path/to/px2rem.scss';
$designWidth : 750; //如设计图是750      /*在另一个scss文件  如要适配1150的可以设置此值为1150 前提是你的px2rem中没有设置此值*/

$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.px2rem 和 hotcss.rem2px。你可以在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);

scss转为css方法(gulp)

npm和gulp的安装就不讲了

1.在项目文件夹下运行一下命令进行初始化

npm init -y

2.运行gulp

npm install -D gulp

3.安装依赖库 gulp-sass

npm install -D gulp-sass

4.创建Gulp脚本文件gulpfile.js

// 加载gulp
const gulp = require('gulp');
// 读取用于编译Sass的插件
const sass = require('gulp-sass');

// 定义gulp任务
gulp.task('default', function (done) {    //参数1:任务名称,后面执行gulp时对应名称   参数2:回调   传入done表明执行结束
  gulp.src('css/style.scss')
    .pipe(sass())
    .pipe(gulp.dest('css'));
    done();
});

5.运行脚本

npx gulp

6.监听
通常情况下,Sass文件的修改频率并不低,如果每一次修改都要手动指定任务,并运行我们的gulp脚本,是在是太麻烦了。

下面我们就尝试利用gulp的watch功能,实现每当Sass文件的内容发生改变,就会自动执行对应的命令,重新进行编译。

其实它的用法相当简单,

gulp.watch("要监视的文件", 要进行的响应处理)

利用这个函数,我们将原来的Gulp脚本文件gulpfile.js修改如下

// 加载gulp
const gulp = require('gulp');
// 加载处理Sass文件的gulp插件
const sass = require('gulp-sass');

// 定义默认任务
gulp.task('default', function (done) {
  // ★ 监视style.scss文件的变化
  gulp.watch('css/style.scss', function () {
    // 一旦style.scss的内容发生变化,则进行下面的处理

    // 读取style.scss文件的内容
    gulp.src('css/style.scss')
    // 进行Sass文件的编译
      .pipe(sass({
        outputStyle: 'expanded'
      })
      // 定义Sass文件编译过程中发生错误的响应处理(如果没有它,一旦发生错误则直接退出脚本)
        .on('error', sass.logError))
      // 编译后的css文件保存在css目录下
      .pipe(gulp.dest('css')); 
  });
  done();
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值