精通CSS笔记-CSS代码结构和选择器
CSS Mastery
结构
- 标签意义的重要性
- 有意义的页面更容易处理
- 程序和其他设备也可以理解有意义的标签,比如搜索引擎
- 可以简便的将元素调整为所需的样式,不需要添加其他标识符,避免了不必要的代码膨胀
- ID和类名
- 一个ID只能应用于页面上的一个元素(可以内嵌其他更多元素)
- 类适合标识内容的类型和其他相识的条目
- 不要过度使用或滥用类,更不要在每个地方都添加类,因为在文档中添加了无意义的代码
- 为元素命名
- 在分配ID和类名时,尽可能保持名称与表现方式无关,如类名red这类会混乱且不易修改类名
- 应该根据‘是什么’来命名而不应该根据‘外观如何’来命名。能使代码更有意义,避免代码和设计不同步
- 类名和ID区分大小写,所以需要使用统一的命名约定,建议多个单词之间用连字符分隔,例如andy-budd比andyBudd清晰
div和span
- div代表部分‘divsion’,将文档分割为几个有意义的区域,所以,将主要内容包围在div中并分配content类,可以在文档中添加结构和意义
应该只在没有现有元素能够实现区域分割的情况下使用div元素。如果使用主导航列表,就不需包围在div中,完全可以删除div,直接在列表上应用类
1
2
3
4
5
6
7<div class="nav">
<ul>
<li>home</li>
<li>about</li>
<li>contact</li>
</ul>
</div>应该用div根据条目的意义或功能(而不是表现方式或布局)对相关条目进行分组
- div可以对块级元素分组,而span可以对行内元素进行分组或标识
1
<p>Published on <span class="date">Feb 22nd, 2017</span> by <span class="author">KING</spa></p>
微格式
- 由于HTML中缺少相应的元素,很难突出显示人、地点或日期等类型信息。为了解决这个问题,开发一套标准的命名约定和标记模式来表示这些数据。这些命名约定基于vCard或iCalendar等现有的数据格式,称为微格式’microformat‘
- 微格式让我们可以用一种特定的方式标记数据,让程序和服务可以访问它。
- DOCTYPE
- DTD(文档类型定义)是一组机器可读的规则,定义XML或HTML的特定版本中允许有什么,不允许有什么。在解析网页时,浏览器使用DTD检查页面的有效性
- 浏览器通过分析页面的DOCTYPE声明来确定使用哪个DTD,从而知道HTML的版本
- DOCTYPE通常需要指定DTD文件的URL,但HTML5不需要指定URL
- 浏览器一般不读取这些文件,而是仅仅识别常见的DOCTYPE声明
选择器
常用选择器
- 也叫元素选择器或简单选择器
- 后代选择器用来寻找特定元素或元素组的后代
- 结合类型(元素)、后代、ID和类可以找到绝大多数元素
- 伪类,链接伪类(:link和:visited)只能用于锚元素(a标签);动态伪类(:hover 、 :active和:focus)理论上可以用于任何元素
通过伪类连接,可以创建更复杂的行为
1
a:visited:hover {color:red;}
*为通用选择器,作用就像通配符,匹配所有可用的元素。与其他选择器结合的时候,可以用来对某个元素的所有后代应用样式,或者跳过一级后代
高级选择器
子选择器,只选择元素的直接后代,即子元素;后代选择器选择一个元素的所有后代。
1
#nav>li {padding-left:20px;}
可以使用通用选择器模拟子选择器的效果,先在所有后代上应用预期样式,然后使用通用样式覆盖子元素的后台上的样式
1
2#nav li {padding-left:20px;}
#nav li * {padding-left:0;}相邻同胞选择器,用于定位同一个父元素下某个元素之后的元素(根据一个元素与另一个元素的相邻关系应用样式)
1
h2+p {font-size:1.3em;}
属性选择器,根据某个属性是否存在或属性的值来寻找元素
1
2
3
4
5
6
7
8
9/* 解释某些内容,如缩写词,当鼠标悬停在具有title属性的元素上时,显示提示 */
acronym[title] {border-bottom: 1px dotted #999;}
acronym[title]:hover, acronym[title]:focus {cursor:help;}
/* 使用rel属性值nofollow */
a[rel="nofollow"] {padding-right:20px;}
/*<a> 标签的 rel 属性用于指定当前文档与被链接文档的关系。 */
<a href="part_12.html" rel="next" rev="prev">利用属性选择器可以用于IE6 hack,因为IE6不支持属性选择器,而其他现代浏览器支持
1
2#header {color:red;}
[id="header"] {color:blue;}有些属性可以由多个值,此时可以使用~来表示有此属性即成立
1
.blogroll a[rel~="co-worker"] {color:red;}
CSS3选择器
特殊性和层叠的作用
- 通过层叠(cascade)的过程处理css样式规则之间的冲突,为每一个规则分配一个重要度,即权值。
- 标!important的样式 能优先于任何规则
- 相同规则特殊性,则后定义的规则优先
- 特殊性,为每种选择器分配一个值,
- 大基数(权重)确保非常特殊的选择器(如ID选择器)不会被大量一般选择器(如类型选择器)所超越。
分为4个等级,a,b,c,d
- 若为行内样式,a=1,权重为1000
- b为ID选择器的总数,权重为100
- c为类,伪类和属性选择器的数量,权重为10
- d为类型选择器和伪元素选择器的数量,权重为1
1
2
3
4选择器 特殊性 计算后的值
style="" 1,0,0,0 1000
#content{} 0,1,0,0 100
p.comment .datepost{} 0,0,2,1 21
在body上,使用类表示页面类型,使用ID标识特定页面,可以非常灵活的控制站点设计和布局,编写可维护的代码
1
2
3
4
5body.news {}
body#archive {}
<body id="archive" class="news">
...
</body>样式继承,应用样式的元素的后代会继承样式的某些属性,如颜色和字号。与层叠不同,层叠突出覆盖的特性
- 通过层叠(cascade)的过程处理css样式规则之间的冲突,为每一个规则分配一个重要度,即权值。
- 注释和维护样式表
- 使用@import url(“xx.css”)导入样式表比链接样式表慢
- 可以使用/ @group header / 这样的注释风格,作为一种简单而有效的样式表导航方法
- 站点单一样式表的代码结构
- 一般样式
- 主体样式
- reset样式
- 链接
- 标题
- 其他元素
- 辅助样式
- 表单
- 通知和错误
- 一致的条目
- 页面结构
- 标题、页脚和导航
- 布局
- 其他页面结构元素
- 页面组件
- 各个页面
- 特殊覆盖
1
2
3
4
5
6
7
8
9
10
11
12
13
14/* @group general styles
------------------------*/
/* @group helper styles
------------------------*/
/* @group page structure
------------------------*/
/* @group page components
------------------------*/
/* @group override
------------------------*/
- 一般样式