如果你是一个前端开发人员,那么你应该使用过css预处理器以及预处理器中的嵌套特性 。它一直是一个受欢迎的功能,我一直都在使用CSS预处理器 。
今年所有的主流浏览器都支持原生CSS嵌套:Chrome、Firefox和Safari 。这是一个重要的CSS功能 , 这将使编写CSS更加容易 。在本文中我将记录到目前为止我所学到的关于CSS嵌套的知识,并与您分享我的发现,包括使用案例和示例 。
介绍CSS嵌套是许多开发人员期待已久的功能之一 。我们曾经依赖于CSS预处理器,如Sass或Less 。让我们来回顾一下以前的做法:
请看下面的例子 。我们有一个图标嵌套在选择器.nav__item中 。
.nav__item {.icon {display: flex;padding: 1rem;}}
以上是一个Sass语法的代码 。编译后,它在浏览器中看起来像下面这样:
.nav__item .icon {display: flex;padding: 1rem;}
使用原生CSS嵌套,相同的CSS将按原样工作 。这里有一个图,显示了原生CSS嵌套和浏览器DevTools之间的比较 。
文章插图
图片
请注意浏览器显示CSS的方式与CSS代码中的显示方式几乎一致 。
如果这个CSS是用Sass编译的,浏览器会显示如下:
文章插图
CSS嵌套的好处在我看来,嵌套 CSS 有一些很合理的理由,使其变得有用:
- 更容易阅读CSS
- 风格一致
- 确定特定样式的作用域
- 对没有类或ID的html元素添加样式
首先你需要学习 &符号, 有多数情况下,这个符号是必要的 。
嵌套没有类或ID的元素
文章插图
在这个例子中,<a>元素是通过.nav__item设置样式 。要使CSS有效,使用&符号是可选的 。
nav__item {& a {display: block;padding: 1.5rem 1rem;}}/* 等同于 */.nav__item a {}
您也可以选择不使用&符号:.nav__item {a {display: block;padding: 1.5rem 1rem;}}/* 等同于 */.nav__item a {}
请注意这是一个最近的更新,被称为宽松的CSS嵌套 。它适用于最新的Chrome Canary和Safari技术预览版 。使用类嵌套元素
文章插图
以前面的例子为例,但假设<a>元素有一个HTML类 。
.nav__item {.link {display: block;padding: 1.5rem 1rem;}}/* 等同于 */.nav__item .link {}
这里不需要使用& , 只有类名称也正常生效 。嵌套CSS组合器CSS原生嵌套的一个好处是可以使用组合器 。让我们来看一些例子 。
在下面的例子中,我想选择.nav__item的每个元素,它前面有另一个具有相同类的元素 。因此我使用了相邻兄弟选择器 。
文章插图
在原生CSS嵌套中 , 我们可以使用&符号来模拟这种效果 。请注意我重复使用了它两次 。
.nav__item {& + & {border-left: 2px solid;}}
魔术发生在第二次重复的& 。在这里浏览器将理解我想使用相邻的兄弟选择器 。让我给你看一个图表来说明这一点:文章插图
另一个例子是嵌套子组合器 。它可以选择元素的直接子元素 。
.nav__item {> a {padding: 1rem;}}
嵌套示例:Active, Focus, Hover:active、:focus和:hover是通过用户操作激活的CSS伪类 。文章插图
使用CSS嵌套,可以一次嵌套它们以避免代码重复 。让我们以:hover为例:
button {&:hover {background-color: var(--bg-color);}&:focus {outline: solid 2px;}}
使用预处理器进行嵌套时的区别在于浏览器将像这样渲染它:button:hover {background-color: var(--bg-color);}button:focus {outline: solid 2px;}
让我们来看看原生CSS嵌套在Chrome、Safari和Firefox中是如何呈现的 。文章插图
嵌套示例:Post Content第一个尝试CSS嵌套的例子之一是对帖子的正文内容设置样式 。想象一下,一篇文章有正文标题、文本、图像、引用等等 。
推荐阅读
- 孙卓回归原生家庭两周年,四丫头晒与儿子合照,言语中却透露心酸
- 云原生小技巧 : 如何在本地调试 Kubernetes Webhook?
- 天后王菲离异两次不敢再婚,哥哥57岁仍单身,都是原生家庭惹的祸
- 新 CSS Math方法:Rem 和 Mod()
- 使用Java构建云原生监控与日志系统
- CSS 新功能:让编码更高效
- 怎么使用CSS实现轮播图,前端项目流程八个阶段
- 使用 CSS Grid 的响应式网页设计:消除媒体查询过载
- CSS这几个函数很实用,也很简单
- 王鸥原生家庭令人窒息!被曝为留住何九华而怀孕,男友是杨幂铁粉