百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

CSS预处理,总有一款适合你

myzbx 2025-01-16 20:14 64 浏览

相信前端开发人员对于CSS(Cascading Style Sheet-级联样式表)这种“面向命名语言”,一定非常熟悉。你可能在某个舍友熟睡的深夜,还在电脑面前被 css 繁重、冗杂的样式,折磨的死去活来。

我们曾经面对 css 很多令人发指的不友好特性,也因为 css 的低复用性而刀耕火种。

为了摆脱这样的苦恼,CSS预处理器因此而诞生。

概念

CSS 预处理器用一种专门的编程语言,进行 Web 页面样式设计,然后再编译成正常的 CSS 文件,以供项目使用。CSS 预处理器为 CSS 增加一些编程的特性,无需考虑浏览器的兼容性问题。

理由

  1. CSS语法不够强大,比如无法嵌套书写导致模块化开发中需要书写很多重复的选择器;
  2. 没有变量和合理的样式复用机制,使得逻辑上相关的属性值必须以字面量的形式重复输出,导致难以维护等

看到这里很多小伙伴就要问了,到底有哪些主流的预处理器呢?

Sass:2007年诞生,最早也是最成熟的CSS预处理器,拥有ruby社区的支持和compass这一最强大的css框架,目前受LESS影响,已经进化到了全面兼容CSS的SCSS。

Less:2009年出现,受SASS的影响较大,在ruby社区之外支持者远超过SASS,其缺点是比起SASS来,可编程功能不够,不过优点是简单和兼容CSS。著名的Twitter Bootstrap就是采用LESS做底层语言的。

Stylus:2010年产生,来自Node.js社区,主要用来给Node项目进行CSS预处理支持,在此社区之内有一定支持者,在广泛的意义上人气还完全不如SASS和LESS。

那这些预处理器有哪些相似之处呢?

相同点

可以在 CSS 中使用变量、简单的程序逻辑、函数等等在编程语言中的一些基本技巧,可以让你的 CSS 更见简洁,适应性更强,代码更直观等。

不同点

1.变量:

  • Sass声明变量必须是“$”开头,后面紧跟变量名和变量值,而且变量名和变量值需要使用冒号:分隔开。
  • Less 声明变量用“Sass声明变量必须是“$”开头,后面紧跟变量名和变量值,而且变量名和变量值需要使用冒号:分隔开。
  • Less 声明变量用“@”法和Less、Sass完全相同。

2.作用域:

css 预编译器把变量赋予作用域,也就是存在生命周期。就像 js 一样,它会先从局部作用域查找变量,依次向上级作用域查找。

  • Sass:三者最差,不存在全局变量的概念。
  • Less:我认为跟 JS 一样,逐级查找,向上冒泡。
  • Stylus:完全等同 Less。Stylus 和 Sass 则更倾向于指令式。

3.嵌套:

十分真诚的说,三种 css 预编译器的选择器嵌套在使用上来说没有任何区别(也可能是我没发现)。Sass 除了常规的采用“&”替代父级选择器之外,还提供了奇葩的属性嵌套:

/*style.sass*/
.footer {
  font: {
    family:  微软雅黑;
    size: 5rem;
    weight: bolder;
  }
}

4.继承:

css 属性的继承是一个非常重要的特性,好消息是三种预编译器都对此做出了改善。

  • Sass和Stylus的继承非常像,能把一个选择器的所有样式继承到另一个选择器上。使用“@extend”开始,后面接被继承的选择器。
.shit {
  margin: 10px 5px;
  padding: 2px;
}
p {
  @extend .shit;/*继承.block*/
  border: 1px solid #aaa;
}
ul,li {
  @extend .shit; /*继承.block*/
  color: #aaa;
}

将被编译成标准 css:

.shit,p,ul,ol {
  margin: 10px 5px;
  padding:2px;
}
p {
  border: 1px solid #aaa
}
ul,li {
  color:#aaa;
}
  • Less 继承:与前两者继承方式有所区别,它不是在选择器上继承,而是将Mixins中的样式嵌套到每个选择器里面。然而这样会带来一个明显的缺点:每个选择器中会出现重复的样式。

5.导入@Import:

CSS中,不建议用@import导入css,因为会增加http请求。但 CSS 预处理器中的导入和CSS的有hhe很大区别,它是将不同 css 是在语义上导入,最终编译结果会生成一个CSS文件。

值得注意的是,如果不同文件相互引入的时候,出现相同变量名时可能会引起错误。所以我的建议是单独有一个 var.sass/less/styl 文件来记录所有你定义的变量。

Less 为@Import 扩展了语法,而 Sass 和 Stylus 并没有。

使用

目前各大前端框架都已支持当下主流的预编译器,只需要根据文档添加配置即可;此外也可以利用webpack去配置使用(想了解webpack相关内容,可持续关注“一郭鲜”)。

总结

  • Sass和Less语法严谨、Stylus相对自由。因为Less长得更像CSS,所以它可能学习起来更容易。
  • Sass 和 Compass、Stylus 和 Nib 都是好基友。
  • Sass 和 Stylus 都具有类语言的逻辑方式处理:条件、循环等,而 Less 需要通过When等关键词模拟这些功能,这方面 Less 比不上 Sass 和 Stylus。
  • Less 在丰富性以及特色上都不及 Sass 和 Stylus,若不是因为 Bootstrap 引入了 Less,可能它不会像现在这样被广泛应用(个人愚见)。
  • 还没尝试的小伙伴抓紧时间行动起来吧,各款预处理器任你挑选,总有一款适合你。


    有任何问题欢迎在下方留言讨论或私信我,关注公众号“一郭鲜”,前端知识一网打尽

    相关推荐

    如何设计一个优秀的电子商务产品详情页

    加入人人都是产品经理【起点学院】产品经理实战训练营,BAT产品总监手把手带你学产品电子商务网站的产品详情页面无疑是设计师和开发人员关注的最重要的网页之一。产品详情页面是客户作出“加入购物车”决定的页面...

    怎么在JS中使用Ajax进行异步请求?

    大家好,今天我来分享一项JavaScript的实战技巧,即如何在JS中使用Ajax进行异步请求,让你的网页速度瞬间提升。Ajax是一种在不刷新整个网页的情况下与服务器进行数据交互的技术,可以实现异步加...

    中小企业如何组建,管理团队_中小企业应当如何开展组织结构设计变革

    前言写了太多关于产品的东西觉得应该换换口味.从码农到架构师,从前端到平面再到UI、UE,最后走向了产品这条不归路,其实以前一直再给你们讲.产品经理跟项目经理区别没有特别大,两个岗位之间有很...

    前端监控 SDK 开发分享_前端监控系统 开源

    一、前言随着前端的发展和被重视,慢慢的行业内对于前端监控系统的重视程度也在增加。这里不对为什么需要监控再做解释。那我们先直接说说需求。对于中小型公司来说,可以直接使用三方的监控,比如自己搭建一套免费的...

    Ajax 会被 fetch 取代吗?Axios 怎么办?

    大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!今天给大家带来的主题是ajax、fetch...

    前端面试题《AJAX》_前端面试ajax考点汇总

    1.什么是ajax?ajax作用是什么?AJAX=异步JavaScript和XML。AJAX是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实...

    Ajax 详细介绍_ajax

    1、ajax是什么?asynchronousjavascriptandxml:异步的javascript和xml。ajax是用来改善用户体验的一种技术,其本质是利用浏览器内置的一个特殊的...

    6款可替代dreamweaver的工具_替代powerdesigner的工具

    dreamweaver对一个web前端工作者来说,再熟悉不过了,像我07年接触web前端开发就是用的dreamweaver,一直用到现在,身边的朋友有跟我推荐过各种更好用的可替代dreamweaver...

    我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊

    接下来你看到的将是全网最详细的Java知识点总结,全文分为三大部分:Java基础、Java框架、Java+云数据小编将为大家仔细讲解每大部分里面的详细知识点,别眨眼,从小白到大佬、零基础到精通,你绝...

    福斯《死侍》发布新剧照 "小贱贱"韦德被改造前造型曝光

    时光网讯福斯出品的科幻片《死侍》今天发布新剧照,其中一张是较为罕见的死侍在被改造之前的剧照,其余两张剧照都是死侍在执行任务中的状态。据外媒推测,片方此时发布剧照,预计是为了给不久之后影片发布首款正式预...

    2021年超详细的java学习路线总结—纯干货分享

    本文整理了java开发的学习路线和相关的学习资源,非常适合零基础入门java的同学,希望大家在学习的时候,能够节省时间。纯干货,良心推荐!第一阶段:Java基础重点知识点:数据类型、核心语法、面向对象...

    不用海淘,真黑五来到你身边:亚马逊15件热卖爆款推荐!

    Fujifilm富士instaxMini8小黄人拍立得相机(黄色/蓝色)扫二维码进入购物页面黑五是入手一个轻巧可爱的拍立得相机的好时机,此款是mini8的小黄人特别版,除了颜色涂装成小黄人...

    2025 年 Python 爬虫四大前沿技术:从异步到 AI

    作为互联网大厂的后端Python爬虫开发,你是否也曾遇到过这些痛点:面对海量目标URL,单线程爬虫爬取一周还没完成任务;动态渲染的SPA页面,requests库返回的全是空白代码;好不容易...

    最贱超级英雄《死侍》来了!_死侍超燃

    死侍Deadpool(2016)导演:蒂姆·米勒编剧:略特·里斯/保罗·沃尼克主演:瑞恩·雷诺兹/莫蕾娜·巴卡林/吉娜·卡拉诺/艾德·斯克林/T·J·米勒类型:动作/...

    停止javascript的ajax请求,取消axios请求,取消reactfetch请求

    一、Ajax原生里可以通过XMLHttpRequest对象上的abort方法来中断ajax。注意abort方法不能阻止向服务器发送请求,只能停止当前ajax请求。停止javascript的ajax请求...