css - 哪个表现更好:更少的规则声明或更少的属性声明?
问题描述
在响应式 CSS 的示例中,通常会看到一个 UI 布局被完全声明为“默认”布局(即不在媒体查询中),然后媒体查询添加属性和/或覆盖这些属性以创建一个不同的布局/外观。
像这样:
/**** Small screen layout: ****/
.toolbar {
background-color: #000;
width: 100%; /**** Declared here for the default layout ****/
position: absolute; /**** Declared here for the default layout ****/
}
/**** Large screen layout: ****/
@media (min-width: 500px)
{
.toolbar {
position: relative; /**** Declared again, just to 'remove' it ****/
width: auto; /**** Declared again, just to 'remove' it ****/
border-radius: 5px;
box-shadow: 0px 5px 10px rgba(0,0,0,0.3);
}
}
我想这样做:只有在媒体查询之外声明的公共属性
/**** Common properties ****/
.toolbar {
background-color: #000;
}
/**** Small-screen-only properties: ****/
@media (max-width: 499px)
{
.toolbar {
width: 100%; /**** Only declared once, where required ****/
position: absolute; /**** Only declared once, where required ****/
}
}
/**** Large-screen-only properties: ****/
@media (min-width: 500px)
{
.toolbar {
border-radius: 5px;
box-shadow: 0px 5px 10px rgba(0,0,0,0.3);
}
}
我想使用第二种方法,因为我更喜欢这样工作,但它有更多选择器供浏览器解析。
因此,第二种方法在现实世界场景中的性能是否可能明显更差?
解决方案
嘿。在对页面应用一些媒体查询之前,让我们考虑一下第二种方法是如何工作的。它在整个页面上应用白色,然后在这两种特定情况下,一种与另一种相反,它应用其他样式。“过度”的 CSS 也是如此,因为在这种情况下,如果不应用第一个媒体查询规则,则第二个会。
我建议你做的是建立一个没有任何疑问的一般规则。然后,设置特定的查询
所以最后(下面的例子)最好这样做
.element{
width:100px;
height:auto;
color:#fff;
}
@media (min-width: 500px)
{
.element{
width:200px;
height:100px;
color:#000;
}
}
而不是这个
@media (max-width: 499px)
{
.element{
width:100px;
height:auto;
color:#fff;
}
}
@media (min-width: 500px)
{
.element{
width:200px;
height:100px;
color:#000;
}
}
每当您有多个查询需要担心时,只需写下您真正需要的内容。不要过度查询,例如,1 个案例中的 2 个
就像一个if/else
. 你写了 if,因为 if 会覆盖默认属性,但你不写 else,因为默认值会保持不变,所以它不会被 if 覆盖
编辑
在上面写的所有可能的混乱中。简而言之,最好使用一个默认样式来应用,即没有任何查询或条件。然后,将编辑其行为的其他查询将写在其下方。
所以我写的第一个例子是最有效、最简单和最好的,对于任何规模的性能影响也是如此。另外,我强烈建议@media
只使用带有max-width
属性的查询,因为它们的目的是基于较低宽度的设备来缩放网页
推荐阅读
- python - 我部署的烧瓶应用程序中的错误,显示 500 内部服务器错误
- excel - 您如何在 Excel 中根据单元格值总计预定义值
- html - HTML如何根据选定的下拉值保存输入
- google-sheets - 如何使用静态索引从多个来源创建摘要页面
- java - 使用 file.renameTo 在两个不同的文件系统之间移动文件返回 false
- java - 使用意图从相机捕获图像创建空图像文件
- three.js - 使用着色器材质的标准材质。USE_MAP 突然停止工作,“maptexelToLinear;找不到匹配的重载函数”
- selenium - 有没有办法让 chrome 使用你的相机和麦克风来执行 selenium 脚本?我不想通过假流
- linux - 如何根据大小分割文件linux
- wordpress - wp_list_table 批量操作删除按钮不起作用 - 没有提交