可扩展、模块化CSS--模块样式规则(翻译文)

SMACSS is becoming one of the most useful contributions to front-end discussions in years

就像前面一章提到的那样,模块在页面当中是一个独立的整体。像导航栏,弹出框,轮播等等。模块可以在布局当中,也可以在另一个模块之中,也可以自己独立的存在。所以模块必须做到尽可能的灵活,这样它才能在不破坏原有样式结构下,无差异地运用到页面的各个地方。

我们去设置模块的时候,应该避免使用ID选择器和标签选择器,而只用类选择器。而它的子元素可以通过后代或者子选择器进行样式上的连接。

模块的例子
.module > h2 {
    padding: 5px;
}

.module span {
    padding: 5px;
}
避免使用标签选择器

如果模块的子元素的样式是可预测的,统一的,那么使用后代和子选择器。.module span就是很好的用法,如果模块下的子元素在任何地方样式都一样的话。

通用元素样式
<div class="fld">
    <span>Folder Name</span>
</div>

/* The Folder Module */
.fld > span {
    padding-left: 20px;
    background: url(icon.png);
}

不过随着网站越来越复杂,问题也就来了。因为我们需要对模块进行扩展,所以用以上代码来修饰通用元素就会有诸多限制。

通用元素样式
<div class="fld">
    <span>Folder Name</span> 
    <span>(32 items)</span>
</div>

现在就有问题了。我们不想图标出现在两个模块子元素里。于是乎,我们又引发了另一个问题:
让一个选择器区别于其他的时候,它也就变得语义化。 spandiv没有语义化,但是像heading这样的就有语义化。在元素上加上类名无疑会变得好得多。

<div class="fld">
    <span class="fld-name">Folder Name</span> 
    <span class="fld-items">(32 items)</span>
</div>

通过添加类名,来增加语义化,无疑削弱了它的歧义。
如果你要使用元素选择器,那么久必须在类选择器之下使用,换句话说,你要使用子选址器。为此,你的确定元素与元素之间不会相互影响。普通元素语义化越多,那么产生冲突的可能就越大。只有像```heading``语义化标签使用的越多,那么元素选择器就会使用的越成功。
原文地址:https://smacss.com/

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,523评论 19 139
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,687评论 1 92
  • 很自然的,CSS是用来解决元素在页面放置在哪里的问题。大体上来说,页面上大组件和相对较小组件的布局是有所区别的。小...
    拿着号码牌徘徊阅读 3,558评论 0 1
  • 每一个项目代码都需要一定的组织性。如果每次都在文件末尾直接添加一个新的css样式无疑会让检索样式变得困难,并且让其...
    拿着号码牌徘徊阅读 3,890评论 0 1
  • 怎么可能只是牵手呢,给你个大大的拥抱!不,还有亲一个! 再次见面,你不会陌生吧!不会拒绝吧! 太阳很暖!等着与你相...
    林凡_阅读 1,410评论 0 0