今天我偶然发现了使用伪类的例子:root。适用范围相当广泛。想听听用过或用过的人的意见。真实操作体验,非文章素材。是否适合对项目进行个性化、选择主色、背景等?您在验证、速度和其他方面做得如何?是否可以减少样式数量?
这只是一个例子:
:root {
--main-color: #9BC53D;
--secondary-color: #EBFFFA;
}
body {
margin: 0;
padding: 0;
}
div {
position: absolute;
display: flex;
justify-content: center;
align-items: center;
right: 20%;
top: 20%;
left: 20%;
bottom: 20%;
text-align: center;
background: var(--main-color);
color: var(--secondary-color);
}
<div>I am an example!</div>
可以在此处找到更多示例。
:root没有做任何有趣的事情。它的特点是可以引用任何根元素。在 HTML 文件中,这将是html,在 SVG 文件svg中,在 XML 文件中,它的任何根元素。但毕竟,我们通常为 HTML(好吧,或者为 SVG)编写样式,并且我们确切地知道我们将哪个标签作为根标签。老实说,我很难想象我们同时将同一个 CSS 文件连接到 HTML 和 SVG,甚至想对它们的根元素应用相同的样式(但如果是这样,那么这个伪类就是为你准备的) !)。
所以我认为用标签选择器代替它是很有可能的。
那么,如果对不同的 XML 进行样式化,那么它可能很有用。
尽管就个人而言,在实践中,我还没有看到需要设置 XML 样式。
这个方法很好。有了它,您可以方便地批量更改样式。例如,如果您在多种款式中使用相同的颜色,那么为了改变它,您不需要打破一切。
我不能说什么关于速度。CSS 变量的运行速度与其他函数一样快。至少在浏览器的时间轴上。但还是有评论慢了几毫秒。
但最大的问题是 CSS 变量最近才开始使用。大多数“落后”的浏览器和几乎所有旧版本的浏览器都不支持它们。它们不受IE、Edge、Yandex(尽管在Chromium上创建)和其他几个不支持。
我的结论是:
CSS变量目前应该只在小的开发中使用,用于测试,以便以后编辑方便,在大型项目中最好不要使用。希望将来所有的浏览器都支持它。但无论如何,我不建议将来使用它们,因为大多数人仍然使用旧版本的浏览器并且谁知道它们将如何显示(记住vw 和 vh,这意味着不同浏览器中的大小不同)。
因此,让我们尝试了解一些可能性和缺点。
值得从支持现在处于非常低的水平这一事实开始。当某些浏览器根本不支持这个伪类时,情况就是这样,这意味着完全使用会受到质疑。或许正是因为如此,他现在并没有太大的人气。
用例:
当然,最简单的例子就是问题本身:
通过设置标准颜色,您可以在整个文档中使用它们。同时,此方法非常适合个性化项目,因为通过更改一个值,您可以更改整个页面的外观。
同样,您可以通过指定文档中经常重复的长样式来节省字符数。例如,渐变:
在这种情况下,渐变本身中的值会随着主色而变化。
这个伪类也适用于不同的语言:
也可以在 JS 中使用来自 CSS 的值。
换句话说,范围可以相当广泛。
下面是来自该来源的示例,清楚地显示了元素与不同样式之间的关系。
我想总结一下我开始时的情况。支持还不开心。但是,时间流逝,很快一切都会改变。
由于问题实际上是关于自定义属性的,而不是关于伪类的
:root,所以这里有一些让我喜欢的例子。Хотя препроцессоры умеют использовать свои внутренние переменные, они всё равно не умеют делать такую вещь, которая, кажется, всеми ожидалась: после изменения переменной автоматически менять имеющиеся свойства, которые её используют. Пример, унылые препроцессорные переменные, синтаксис SCSS:
Пример с модными CSS-переменными (разницу можно увидеть даже тут, если нажать на На всю страницу):
Обратите внимание, что изменилась всего одна переменная и кучу свойств переписывать не надо, профит!
Наконец-то можно разделить свойство
transform, если используешь больше одной трансформации (хотя нам уже давно обещают сделать индивидуальные свойстваscale,translateи прочие). Раньше анимировать несколько свойств или перезаписать их при помощи JS было тем ещё упражнением, но теперь всё изменилось! Пример:Отдельного упоминания заслуживает использование CSS-переменных с функцией
calc(). Хотя в примерах выше она уже использовалась, но, думаю, её стоит упомянуть отдельно. Особенно интересно это смотрится при создании фигур, пример (также смотреть и на весь экран):Коэффициенты подогнаны исходя из простейшего 3² + 4² = 5².
Генерировать и менять размеры равносторонних фигур и фигур, с зависимыми друг от друга свойствами (квадраты, круги, овалы, параллелепипеды), стало просто, как никогда! )
Ну и бонус-трек, стилизация SVG-спрайта типа
<use>при помощи CSS-переменных. В автоматических генераторах спрайтов в будущем, надеюсь, будет возможность вставлять CSS-переменные каждой фигуре.PS就这些了,可惜我把比赛解释成了伪类的最佳定义
:root。我希望这些用户案例集会让您感兴趣。PPS 请将@Qwertyi 的回答标记为已接受)
伪类
:root,我们先搞清楚它适合用在什么地方,有什么用。理论
使用它的主要目的是访问文档的根元素。
HTML 页面的根元素是什么?这是一个元素
<html>。事实证明,在 :root 伪类的帮助下,我们可以访问它。你可能想知道为什么我什至应该使用 :root 伪类,而我可以这样写:
并成功访问元素?
但是,请不要忘记,CSS 是一项不仅仅用于 html 文档的技术,它还可以应用于 XML 页面和 SVG 文件等。
使用这个符号:
我们得到了一个更通用的符号来访问页面的根元素。在技术不断发展和越来越多新的移动设备出现的背景下,这一点非常重要。
这是一个可以在实践中使用的示例文档。
CSS 变量
但是,
:root它也用于在 CSS 中设置变量。这是真正的奇迹开始的地方:在 CSS 中使用变量的能力是 CSS 预处理器的一个显着优势。在最简单的示例中,我们可以通过定义设计中使用的颜色和字体,然后在需要特定字体或颜色时使用变量来节省大量时间。如果我们决定改变字体或调色板,我们只需要改变一个地方。
结论
最后,我想说 :root 伪类是最近才出现的,在旧的浏览器中不起作用。
:rootIE 和 Edge 的支持非常令人沮丧:真正的操作体验是 :root - 只为特定浏览器编写样式。浏览器陌生感。它起作用只是因为不是每个人都支持它。