样式,听谁的(unfinished)
# 样式,听谁的(unfinished)
[TOC]
# 一、常见的css继承属性
# 1.1 文本相关属性
- font-family
- font-size
- 继承的是计算的值,没有准确的值继承
- font-style
- font-variant:可将小写字母转换成大写字母
- normal | bold | bolder | lighter | 数值 | inherit
- 数值:100 - 900的整百数,其中400等同于normal,700等同于bold。
# 1.2 列表相关属性
- list-style-image
- list-style-position
- list-style-type
- list-style
# 1.3 颜色相关属性
- color
# 1.4 其他
- cursor
- opacity
- visibility
# 二、不可继承的属性
- 不可继承的一般是会改变盒子模型的。
border, padding, margin, width, height, display
# 三、属性叠加
- position跟display、float这些特性相互叠加后会怎么样?
- display属性规定元素应该生成的框的类型;position属性规定元素的定位类型;float属性是一种布局方式,定义元素在哪个方向浮动。
- 类似于优先级机制:position:absolute/fixed优先级最高,有他们在时,float不起作用,display值需要调整。
- float 或者absolute定位的元素,只能是块元素或表格。
# 四、百分比
当按百分比设定一个元素的宽度时,它是相对于父容器的宽度计算的。
对于一些表示竖向距离的属性,例如 padding-top , padding-bottom , margin-top , margin-bottom 等,当按百分比设定它们时,依据的也是父容器的宽度,而不是高度。
# 五、引入样式
参考教程:你真的理解@import和link引入样式的区别吗 (opens new window)
# 5.1 link
link
是HTML提供的标签,不仅可以加载 CSS 文件,还可以定义 RSS、rel 连接属性等。
# 5.2 @import
@import
是 CSS 提供的语法规则,只有导入样式表的作用。
尽量不使用,会阻塞页面。
# 5.3 两者的区别
# 5.3.1 加载顺序
- 加载页面时,
link
标签引入的 CSS 被同时加载。 @import
引入的 CSS 将在页面加载完毕后被加载。
# 5.3.2 DOM可控性
- 可以通过 JS 操作 DOM ,插入
link
标签来改变样式。 - 由于DOM方法是基于文档的,无法使用
@import
的方式插入样式。
# 5.3.3 权重区别
css的权重优先级表现为:
!important > 行内样式 > ID > 类、伪类、属性 > 标签名 > 继承 > 通配符
# 六、选择器
# 6.1 关系选择器
选择器 | 名称 | 描述 | 注意事项 |
---|---|---|---|
E F | 包含选择器 | 选择所有包含在E元素里面的F元素 | F元素可为子孙元素 |
E>F | 子选择器 | 选择所有作为E元素的子元素F | F元素不能是孙元素 |
E+F | 相邻选择器 | 选择紧贴在E元素之后的F元素 | 强制是紧邻的元素 |
E~F | 兄弟选择器 | 选择E元素之后的所有兄弟元素F | 不强制是紧邻元素 |
# 6.2 属性选择器
选择器 | 描述 |
---|---|
E[attr] | 选择具有attr属性的E元素 |
E[attr="val"] | 选择具有attr属性且属性值等于val的E元素 |
E[attr~="val"] | 选择具有attr属性且属性值其中一个等于val的E元素(包含只有一个值且该值等于val的情况) |
E[attr|="val"] | 选择具有attr属性且属性值为以val开头并用连接符- 分隔的字符串的E元素(包含属性值仅为val的情况) |
E[attr^="val"] | 选择具有attr属性且属性值为以val开头的字符串的E元素 |
E[attr$="val"] | 选择具有attr属性且属性值为以val结尾的字符串的E元素 |
E[attr*="val"] | 选择具有attr属性且属性值为包含val的字符串的E元素 |
[attr] | 选择具有attr属性的元素 |
# 6.3 伪类选择器
# 6.3.1 超链接
- 需要按特定的书写顺序才能生效。
选择器 | 描述 |
---|---|
E:link | 设置超链接a在未被访问前的样式 |
E:hover | 设置元素鼠标在其悬停时的样式 |
E:active | 设置元素在被用户激活(在鼠标点击与释放之间发生的事件)时的样式 |
E:visited | 设置超链接a在其链接地址已被访问过时的样式 |
# 6.3.2 匹配父元素的子元素
选择器 | 描述 |
---|---|
E:first-child | 匹配父元素的第一个子元素是E元素的E元素 |
E:last-child | 匹配父元素的最后一个子元素是E元素的E元素 |
E:only-child | 匹配父元素仅有的一个子元素是E元素的E元素 |
E:nth-child(n) | 匹配父元素的第n个子元素是E元素的E元素 |
E:nth-last-child(n) | 匹配父元素的倒数第n个子元素是E元素的E元素 |
# 6.3.3 匹配同类型中的同级兄弟元素
把上面的child替换为of-type | 选择器 | 描述 | | :---------------------- | :--------------------------------------------------------- | |
E:first-of-type
| 匹配同类型中的第一个同级兄弟元素是E元素的E元素 | |E:last-of-type
| 匹配同类型中的最后一个同级兄弟元素是E元素的E元素 | |E:only-of-type
| 匹配同类型中的唯一的一个同级兄弟元素是E元素的E元素 | |E:nth-of-type(n)
| 匹配同类型中的第n个同级兄弟元素是E元素的E元素 | |E:nth-last-of-type(n)
| 匹配同类型中的倒数第n个同级兄弟元素是E元素的E元素(从1起) |nth-child()
与nth-of-type()
的区别对于**
p:nth-child(2)
表示这个元素要是p
标签,且是第二个子元素**,是两个必须满足的条件。于是,就是第一个p
标签颜色为红色(正好符合:p标签,第二个子元素)。如果在div
标签后面再插入个span
标签,如下:<section> <div>我是一个普通的div标签</div> <span>我是一个普通的span标签</span> <p>我是第1个p标签</p> <p>我是第2个p标签</p> <!-- 希望这个变红 --> </section>
1
2
3
4
5
6那么
p:nth-child(2)
将不会选择任何元素。而**
p:nth-of-type(2)
表示父标签下的第二个p
元素**,显然,无论在div
标签后面再插入个span
标签,还是h1
标签,都是第二个p
标签中的文字变红。这两者的差异用一个跟切合实际的情况比喻就是计划生育查人口:前者是如果是第二胎,且是女孩,罚款!后者是管他第几胎,第二个出身的女孩,罚款!
该答疑转载自:CSS3选择器:nth-child和:nth-of-type之间的差异 (opens new window)
:nth-child()
的用法
:nth-child(2n) /* 表示偶数 */
:nth-child(2n+1) /* 表示奇数 */
:nth-child(even) /* 表示偶数 */
:nth-child(odd) /* 表示奇数 */
2
3
4
5
# 6.3.4 应用于表单元素
选择器 | 描述 |
---|---|
E:focus | 设置元素在成为输入焦点(该元素的onfocus事件发生)时的样式。(一般应用于表单元素) |
E:checked | 匹配用户界面上处于选中状态的元素E。(用于input type为radio与checkbox时) |
E:enabled | 匹配用户界面上处于可用状态的元素E。(一般应用于表单元素) |
E:disabled | 匹配用户界面上处于禁用状态的元素E。(一般应用于表单元素) |
# 6.3.5 其他
选择器 | 描述 |
---|---|
E:empty | 匹配没有任何子元素(包括text节点)的元素E |
E:not(s) | 匹配不含有s选择符的元素E |
:not(s)
的用法
/* 给该列表中除最后一项外的所有列表项加一条底边线 */
li:not(:last-child) {
border-bottom: 1px solid #000;
}
2
3
4
# 6.4 伪对象选择器
选择器 | 描述 |
---|---|
E:before /E::before | 在目标元素E的前面插入的内容。用来和content属性一起使用 |
E:after /E::after | 在目标元素E的后面插入的内容。用来和content属性一起使用 |
E:first-letter /E::first-letter | 设置元素内的第一个字符的样式 |
E:first-line /E::first-line | 设置元素内的第一行的样式 |