【发布时间】:2021-11-05 19:05:42
【问题描述】:
我一直在尝试找出 在我的 CSS 中设置“默认值”(例如字体大小、字体系列)的位置。
我见过它们最常放置在这些区域:
-
*(通用选择器) :roothtmlbody
是否有一个可靠的标准做法来解决我遇到的问题?
提前谢谢你!
更新:
(1)我花了一两个小时messing around with them on this pen on CodePen,最终发现CSS 特异性与我预期的不同:
特异性: * > body > :root > html
我之前知道* 是最不具体的(fun visual reference of CSS specificity here),所以我惊讶地发现它优先于其他标签。 (欢迎解释!)
(2)此外,我发现了一些例外情况:
例外:
-
body>*仅用于“非标记”文本(HTML 文档中<body>元素内的文本,但不是任何其他元素的后代)- (此处
*仍优先于:root或html)
- (此处
- 如果
*将字体大小设置为百分比(例如字体大小:100%),它将继承并应用到其他三个标签的字体大小中的任何一个,具有以下优先级:@987654340 @ >:root>html
(3) 最后,我发现了一些我认为值得分享的值得注意的信息:
重要信息:
- 仅
*样式“用户界面”元素(例如input、textarea、button、select、...更多?)- 更新:如果您 (1) 将它们的属性设置为“继承”,并且 (2) 它们不是任何其他样式元素的后代(否则,他们将继承这些样式,而不是
body/:root/html)。
- 更新:如果您 (1) 将它们的属性设置为“继承”,并且 (2) 它们不是任何其他样式元素的后代(否则,他们将继承这些样式,而不是
-
*样式化“用户界面”元素的范围因浏览器而异- 例如,在 Chrome 上,
*将设置select元素的 font-size/font-family/color 样式。在 Safari 上,*只会设置select元素的字体大小(但是,即使是直接的select标记本身也是如此……奇怪。) - 更新:在 Safari 上,
*和直接的select标记将完全设置select元素的样式,但前提是您也通过更改边框或背景属性“破坏”样式(其他属性可以也可能导致这种情况)。如果您尝试仅更改颜色或填充(可能还有其他属性),则更改将不会应用,直到您通过更改前面提到的属性值之一来“破坏”它。奇怪。
- 例如,在 Chrome 上,
-
input的占位符文本使用*设置样式,但字体颜色仍为灰色(我猜是不是 'color' 的占位符属性导致了这种情况?)
帖子结束:
根据我从实验(do your own experimentation with my CodePen here) 中学到的知识,我提出了我目前关于设置CSS“默认值”的最佳位置的个人想法(我将在下面给出我的答案),但我很想看看其他人要说什么。我对编码还是很陌生,我相信在这方面还有一些更深入的学习要做!
【问题讨论】:
标签: html css root font-size document-body