CSS选择器学习笔记

CSS提供了种类繁多的选择器,初学时会不理解为什么提供这么多类型的选择器,以至于第一次写页面时每次想给一个标签添加样式都给它写一个新的class。后来,发现这样子维护起来相当麻烦,而且有很多属性都是部分通用的,给每个class都添加重复的内容无疑是冗余低效的。

随着学习的深入,开始尝试使用一些进阶的选择器,如:子元素选择器、直接子元素选择器、伪类选择器等。主要是想尽可能使用少一些class,使HTML文档的易读性更高(此前模仿的一个页面,对比源码后发现其HTML可读性极高,因此印象深刻)。

于是在最近编写的一个页面中写了大量诸如.content > div > div:nth-child(1) > p { }这样的选择器。因为先前先写好了HTML的整体结构,然后按着顺序写CSS,所以一开始还没什么问题。问题出现在实现某个比较复杂的效果时。因为当时时间有限,我就打算跳过复杂那部分,先写后面的。结果回头写复杂那部分的时候,发现想实现目标效果的话,必须调整HTML文档结构。然后加上新的标签之后,一切都乱套了。因为先前使用了大量直接子元素选择器,文档结构改变之后,原本的“父子”可能就不再是父子了,原来的兄弟之间备份也有可能改变,于是就出现了牵一发而动全身的恶果,修改起来相当麻烦。

小结

以下是目前为止关于CSS选择器的使用的一些个人归纳总结,可能有错漏,欢迎指出

  1. 如无必要,不得为id class选择器添加类型选择器进行限定。
    解释:会在性能和维护性上造成影响。
    示例
    /* good */
    #error,
    .danger-message {
    font-color: #c00;
    }

     /* bad */
     dialog#error,
     p.danger-message { 
         font-color: #c00;
     }
    

建议:选择器的嵌套层级硬不大于3级,位置靠后的限定条件应尽可能精确。(我之前就是没做到这点导致了大麻烦)

  1. 尽量在靠后、具体的位置使用:nth-child(){ }选择器。
    解释::nth-child(){ }选择器在方便的同时,极度依赖HTML文档结构,若在选择器中间使用:nth-child(){ }选择器,一旦文档结构发生改变(而且这很平常),将会产生严重的连锁效应。
    示例:
    /* good */
    .danger-message > div >p:nth-child(1) {
    font-color: #c00;
    }

     /* bad */
     .danger-message > div:nth-child(2) > p:nth-child(1) { 
         font-color: #c00;
     }
    
  2. 尽量不使用id选择器设置样式
    解释:重用性大大降低。id更多地使用在定位和js上。

  3. 当多个子标签样式相同时,可为他们的父标签设置class,使代码更简洁。
    示例:
    HTML:

      /* good */
     <div class="todo">
         <p>some content</p>
         <p>some content</p>
         <p>some content</p>
         <p>some content</p>
     </div>
    
     <div>
         <p class="todo">some content</p>
         <p class="todo">some content</p>
         <p class="todo">some content</p>
         <p class="todo">some content</p>
     </div>
    

以上就是最近在写CSS时对CSS选择器使用的一些总结,难免会有不足的地方,继续学习继续进步吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 关系选择器: div div:div之后的所有div,即子div,孙div,重孙div等等等,只要包含在我div里...
    趁你还年轻233阅读 258评论 0 2
  • 一、CSS选择器常见的有几种? 基本选择器 通配选择器~选择文档中所有的html元素,用一个*表示 元素选择器~选...
    dengpan阅读 931评论 0 3
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,629评论 1 92
  • (1). 阴影模糊半径与阴影扩展半径的区别:阴影模糊半径:此参数可选,其值只能是为正值,如果其值为0时,表示阴影不...
    Leisure_blogs阅读 1,416评论 0 6
  • 是这零点三刻,一个人醒着,怀里揣着许多的尘间的恼烦,如丝如缚,断不干净! 捧着书,却人痴傻了,每本书都是一间房子,...
    迷鹿mirror阅读 148评论 0 0