css - CSS 特异性的最佳实践?

标签 css performance conflict css-specificity

<分区>

我正在创建 a contact form将包含在几个不同的站点上。

联系表格的样式和站点的样式都将包括在内,我不能很好地预测站点的样式。我希望联系表单的样式可以很容易地被站点的样式覆盖,但我不希望联系表单的样式被意外覆盖。

例如,如果站点开发人员想要更改提交按钮的颜色,则无需使用 !important 或一些过于具体的 #id #id element .class 即可轻松完成#id element.class 选择器的类型。

但是,另一方面,如果站点开发人员使用选择器编写样式,例如 input { background: yellow; }#site-wrapper input { background: yellow; } 我不希望它否决我引用类的联系表单样式,.contact_input { background: white; }

所以我的问题是,在这种情况下最佳做法是什么?我正在考虑在我的表单上添加一个 ID 并将其添加到每个选择器,这样我的选择器就会变成 #contactform .contact_input { background: white; } 我认为这可以避免冲突,但我想知道是否有更好的方法,因为这在页面呈现方面似乎有点低效。也许这没什么大不了的,但我只是想把它扔出去看看人们怎么想。

最佳答案

这是一个相当困难的原因,因为选择器本身及其在工作表中的位置都很重要。此外,事实上并没有唯一一种真正的 CSS 编写方式也无济于事。

我想如果您使用 ID 和标签选择器,那将是最好的。另外使用属性选择器:

#contact-form input { ... }
#contact-form input[type=email] { ... }
#contact-form select { ... }

但是您应该提到,强烈建议将该表放在其他表的顶部,例如:

<link type="stylesheet" href="/styles/contact-form.css" />
<link type="stylesheet" href="/styles/main.css" />

为什么采用这种方法?

通常开发人员会希望表单在整个网站上看起来都一样,这就是他使用标签名称选择器的原因:

input  { ... }
select { ... }

这些选择器比 #contact-form input 弱,所以它们不会覆盖任何东西。然而,有时有必要覆盖一些规则,因此开发人员将使用 #contact-form input 选择器,这在这种情况下是很自然的。

如果作为建议附上工作表,表示开发人员的样式将覆盖您的样式,尽管事实上两者都具有完全相同强度的选择器。这就是规则的位置很重要的原因。

关于css - CSS 特异性的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4453054/

相关文章:

performance - MuPdf 库在从 pdf 页面渲染图像时比 xpdf/poppler 更快吗?

c# - x64 平台上 Math.Round 的性能显着下降

tortoisesvn - 如何查看 Tortoise SVN 存储库中存在冲突的所有文件的列表?

jquery - 某些页面上的 Adsense 冲突

javascript - 不能让div去页面底部,CSS,HTML

html - 如何仅使用 css 为垂直导航栏创建子菜单

performance - redis哈希性能如何

git - git 的 merge 冲突解决是否比其他 SCM 和 merge 工具更高效?

不使用 "of-type"的几个容器元素内的 CSS3 目标第一段

html - 即使我为父级 div 设置了固定宽度,水平滚动条也不起作用?