为什么我放弃了使用了4年的SASS转而选择使用回原生CSS
yuyutoo 2024-10-12 00:00 2 浏览 0 评论
Sass 作为一个强大的CSS预处理器,在过去十年里广受大家好评。它能够帮助我们高效地组织可扩展和稳定的 CSS 代码。然而,随着CSS的快速发展。曾经只有 Sass 才有的特性现在已经集成到 CSS 中了,包括Sass最引以为豪的变量语法和嵌套语法。
变量
在曾经很长的一段时间里,能够在CSS中定义变量被视为是 SCSS 的最独特优势,通过定义变量的方式,我们可以批量的管理属性,并且这也是原生CSS中一直被人吐槽的地方(当我们需要修改同一个属性时,需要修改多次)。但是随着CSS的快速发展, CSS 中也支持定义变量这种语法了,它的定义方式类似于 Sass。但是,它们之间的一个重大区别,是Sass的变量仅存在于预处理器上下文中,而 我们的CSS 变量可以在浏览器中使用,甚至可以通过 JavaScript 动态修改。
下面我们就示例如何在原始CSS中定义变量。
//定义变量
:root {
--button-padding: 10px 20px;
--button-bg-color: #007bff;
--button-text-color: #ffffff;
--button-border-radius: 8px;
}
//使用变量
.button {
padding: var(--button-padding);
background-color: var(--button-bg-color);
color: var(--button-text-color);
border-radius: var(--button-border-radius);
border: none;
cursor: pointer;
transition: background-color 0.3s;
}
CSS的嵌套
在样式的编写中 嵌套式的语法帮助了我们大大的减轻工作量也提高了代码的可读性。
.blog {
position: relative;
padding: 1rem;
background: var(--neutral-100);
.blog-item {
border: 1px solid var(--neutral-200);
& span {
font-size: 1rem;
}
}
}
:is 伪类
:is 伪类是通过接受一个选择器列表为参数,然后将后边的样式分别赋值给每个作为参数的选择器,它大大的减少了我们样式中的重复代码,并且可以大大的提高我们的编写代码的效率。
:is(selector1, selector2, selector3) {
/* 样式 */
}
:has 伪类
:has()表示满足一定条件后,就会匹配该元素,并且括号里面可以填组合选择器、类选择器、ID 选择器、属性选择器
选择包含特定子元素的父元素
.hero:has(.hero-button) {
background-color: var(--accent-50);
}
选择包含特定标签名的子元素的父元素:
cssCopy code
/* 选择包含 <span> 标签的子元素的 div 元素 */
div:has(> span) {
/* CSS 样式 */
}
选择包含指定属性的子元素的父元素:
cssCopy code
/* 选择包含有属性 "href" 的子元素的 a 元素 */
a:has(> [href]) {
/* CSS 样式 */
}
选择包含特定属性值的子元素的父元素:
cssCopy code
/* 选择包含具有 "data-active" 属性并且值为 "true" 的子元素的 div 元素 */
div:has(> [data-active="true"]) {
/* CSS 样式 */
}
容器查询
容器查询被认为是 CSS3 以来最重大的创新。因为它可以根据指定容器在尺寸发生变化时,在满足条件的情况下设置其内部元素样式。类似@media,但不同的是@container是针对容器元素,而@media针对的是浏览器窗口。
/* 定义一个名为 component 的 CSS 类 */
.component {
/* 设置一个名为 --theme 的 CSS 变量,值为 dark */
--theme: dark;
/* 设置 container-name 属性的值为 fancy */
container-name: fancy;
}
/* 使用 @container 自定义容器查询 */
/* 当容器名称为 fancy 且主题为 dark 时,应用下列样式 */
@container fancy style(--theme: dark) {
/* 选择所有类名为 fancy 的元素 */
.fancy {
/* 在这里定义 "dark" 主题下的样式 */
/* 这里可以添加一些适用于暗色主题的样式 */
}
}
/* 使用媒体查询 */
/* 当视口宽度达到至少 720 像素时,应用下列样式 */
@container (min-width: 720px) {
/* 选择所有类名为 headline 的元素 */
.headline {
/* 设置字体大小为 2em */
font-size: 2em;
}
}
@layer(级联层)
作用:用于控制样式表中规则的层叠顺序。它允许我们将样式表中的规则分组到不同的层中。
在 CSS 中,不同来源的样式规则具有不同的优先级。例如,开发者编写的样式表(作者样式表)比浏览器默认样式表(用户代理样式表)具有更高的优先级。这种优先级关系可以被理解为“级联规则”。
使用级联层,开发者可以更灵活地控制这些级联规则。在级联层 A 中声明的 CSS 规则与级联层 B 中的规则完全独立,它们的生效与否仅取决于它们所在的级联层(除非使用了 !important)。因此,当我们希望引入第三方样式表但又不希望第三方某些高优先级的规则覆盖原始的同名规则时,可以使用级联层来实现这一目的。
任何未在级联层中声明的 CSS 规则都会被收集到一个匿名的级联层中,并放置在所有手动声明的、有命名的和匿名的级联层之后。这意味着任何未在级联层中声明的 CSS 规则都将覆盖在级联层中声明的规则,与规则的权重无关。
通过使用级联层,开发者可以更好地管理样式规则,确保特定规则的优先级,以及更好地控制第三方样式表的影响。
@layer utilities {
.button {
padding: 0.5rem;
}
.button--lg {
padding: 0.8rem;
}
}
作者:zayyo
链接:https://juejin.cn/post/7350209063520600102
相关推荐
- jQuery VS AngularJS 你更钟爱哪个?
-
在这一次的Web开发教程中,我会尽力解答有关于jQuery和AngularJS的两个非常常见的问题,即jQuery和AngularJS之间的区别是什么?也就是说jQueryVSAngularJS?...
- Jquery实时校验,指定长度的「负小数」,小数位未满末尾补0
-
在可以输入【负小数】的输入框获取到焦点时,移除千位分隔符,在输入数据时,实时校验输入内容是否正确,失去焦点后,添加千位分隔符格式化数字。同时小数位未满时末尾补0。HTML代码...
- 如何在pbootCMS前台调用自定义表单?pbootCMS自定义调用代码示例
-
要在pbootCMS前台调用自定义表单,您需要在后台创建表单并为其添加字段,然后在前台模板文件中添加相关代码,如提交按钮和表单验证代码。您还可以自定义表单数据的存储位置、添加文件上传字段、日期选择器、...
- 编程技巧:Jquery实时验证,指定长度的「负小数」
-
为了保障【负小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【负小数】的方法。HTML代码<inputtype="text"class="forc...
- 一篇文章带你用jquery mobile设计颜色拾取器
-
【一、项目背景】现实生活中,我们经常会遇到配色的问题,这个时候去百度一下RGB表。而RGB表只提供相对于的颜色的RGB值而没有可以验证的模块。我们可以通过jquerymobile去设计颜色的拾取器...
- 编程技巧:Jquery实时验证,指定长度的「正小数」
-
为了保障【正小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【正小数】的方法。HTML做成方法<inputtype="text"class="fo...
- jquery.validate检查数组全部验证
-
问题:html中有多个name[],每个参数都要进行验证是否为空,这个时候直接用required:true话,不能全部验证,只要这个数组中有一个有值就可以通过的。解决方法使用addmethod...
- Vue进阶(幺叁肆):npm查看包版本信息
-
第一种方式npmviewjqueryversions这种方式可以查看npm服务器上所有的...
- layui中使用lay-verify进行条件校验
-
一、layui的校验很简单,主要有以下步骤:1.在form表单内加上class="layui-form"2.在提交按钮上加上lay-submit3.在想要校验的标签,加上lay-...
- jQuery是什么?如何使用? jquery是什么功能组件
-
jQuery于2006年1月由JohnResig在BarCampNYC首次发布。它目前由TimmyWilson领导,并由一组开发人员维护。jQuery是一个JavaScript库,它简化了客户...
- django框架的表单form的理解和用法-9
-
表单呈现...
- jquery对上传文件的检测判断 jquery实现文件上传
-
总体思路:在前端使用jquery对上传文件做部分初步的判断,验证通过的文件利用ajaxFileUpload上传到服务器端,并将文件的存储路径保存到数据库。<asp:FileUploadI...
- Nodejs之MEAN栈开发(四)-- form验证及图片上传
-
这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能。开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/R...
- 大数据开发基础之JAVA jquery 大数据java实战
-
上一篇我们讲解了JAVAscript的基础知识、特点及基本语法以及组成及基本用途,本期就给大家带来了JAVAweb的第二个知识点jquery,大数据开发基础之JAVAjquery,这是本篇文章的主要...
- 推荐四个开源的jQuery可视化表单设计器
-
jquery开源在线表单拖拉设计器formBuilder(推荐)jQueryformBuilder是一个开源的WEB在线html表单设计器,开发人员可以通过拖拉实现一个可视化的表单。支持表单常用控件...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)