vue项目全局引入scss文件,全局共享函数,mixin ,变量等

在使用scss这种css预处理语言的时候,@import的语法还是经常要使用的,我们把通用的样式,比如颜色变量,还有函数之类的单独用一个文件里,在其他页面的scss里面引入。在vue项目里面会写很多的组件,如果每个组件的地方我们都写一个@import,还挺麻烦的,而且如果我们以后要改这个scss文件的位置或者文件名,就要一个个组件改过去。

举个例子,我在项目中使用了vm+rem的方式实现自适应,

设计稿的图大小是1920*1080,我们把html根节点字体大小设置为1vw,vw就是视窗大小的百分之一,所以在1080p显示器的场景下,1rem=1vw=19.2px。vw这个单位可以随着视窗的大小改变而改变,同时根节点字体大小和rem也跟着改变,所以就实现了自适应。还有考虑到chrome支持的最小字体显示是12px,我们用媒体查询把1200px宽度以下的视窗,设置成12px。因为我的项目主要应用在一些大屏,分辨率基本上会高于720p,所以这样就可以满足需求了。

html {
    // vw+rem方式实现自适应缩放,vw应用到html根节点的字体大小,这样就不用写js来实现根据屏幕宽度动态设置根节点的字体大小了。性能也会更强
    // 相比只使用vw进行设置的方法,如果以后需要更多兼容性,改成纯rem布局也很方便。vw是和视窗宽度绑定的数值无法自由设置,rem依赖的根节点宽度是可以自由设置的,所以自由度更高
    font-size:1vw;
    // 媒体查询,当设备宽度小于1200px的时候,最小的字体大小为12px,因为chrome字体最小为12px,这样可以保证不同设备字体大小一致
    @media screen and (max-width: 1200px) {
    font-size:12px;
}
}

运用rem来设置元素大小,我们需要把设计稿中的像素大小换算成rem,因为我们也引用了scss,所以就不用麻烦自己算了,用scss的函数功能就比较方便了。

我们设计下面的函数就能满足需求,只需要在用到大小的地方把调用这个函数,把原来px单位的数据传入即可

//functions.scss
// 转换px为rem单位,这个函数用到的rem是使用vw实现的,原型图的宽度是1920,所以1rem单位设置为1vw也就是19.2px。
@function px2rem($px) {
    @return $px/19.2 + rem;
}

项目用到了@vue/cli,vue版本2.x,vue-cli的文档里面自动引用css预处理文件推荐的是一个 style-resources-loader,但是这个项目它给的示例是个stylus的示例,没有给你scss相关的例子。。。。

我把它的例子改了一下,似乎也可以用了(第一次碰到的时候不知道是出了什么bug,样式没有正常显示),

const path = require('path')

module.exports = {
  chainWebpack: config => {
    const types = ['vue-modules', 'vue', 'normal-modules', 'normal']
    types.forEach(type => addStyleResource(config.module.rule('scss').oneOf(type)))
  },
}

function addStyleResource (rule) {
  rule.use('style-resource')
    .loader('style-resources-loader')
    .options({
      patterns: [
        path.resolve(__dirname, './src/styles/functions.scss'),
      ],
    })
}

还有就是sass官方搞的loader, sass-resources-loader,官方搞的应该还是能保证稳定性的,它的github页面也给了好几个示例,其中就有vuecli用的,直接复制过来就行

// vue.config.js
module.exports = {
  chainWebpack: config => {
    const oneOfsMap = config.module.rule('scss').oneOfs.store
    oneOfsMap.forEach(item => {
      item
        .use('sass-resources-loader')
        .loader('sass-resources-loader')
        .options({
          // Provide path to the file with resources
          resources: './path/to/resources.scss',

          // Or array of paths
          resources: ['./path/to/vars.scss', './path/to/mixins.scss', './path/to/functions.scss']
        })
        .end()
    })
  }
}

关于css预处理器的选择:

sass是最早的css预处理器,经过很长时间的检验应该是稳定性最高的了,less据说特性会比sass少一些,stylus是比较新的12年出的css预处理器,写法可以比较随意,分号,花括号都可以不要,用缩进来表示层级。

而scss是sass最新的版本,语法兼容了普通css的写法,也就是说,和普通css的切换就没有成本了,个人来说不喜欢在css里面搞很多胡里花哨的东西,js就够你玩得很胡里花哨了,所以和标准css写法一样这一点,就很好,括号和分号写起来也麻烦不到哪里去,加上稳定性高这一点,所以我最后选择使用scss,而且常用的bootstrap和elementUI也是用的scss。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容