目录
  1. 一、CSS的复合选择器
  2. 1.1 复合选择器
  3. 1.2 后代选择器
  4. 1.3 子选择器
  5. 1.4 并集选择器
  6. 1.5 伪类选择器
  7. 1.6 复合选择器总结
  8. 二、CSS的元素显示模式
  9. 2.1 什么是元素显示模式
  10. 2.2 块元素
  11. 2.3 行内元素
  12. 2.4 行内块元素
  13. 2.5 元素显示模式总结
  14. 2.6 元素显示模式的转换
  15. 三、CSS的背景
  16. 3.1 背景颜色
  17. 3.2 背景图片
  18. 3.3 背景平铺
  19. 3.4 背景位置
  20. 3.5 背景固定
  21. 3.6 背景属性复合写法
  22. 3.7 背景色半透明
  23. 3.8 背景总结
  24. 四、CSS三大特性
  25. 4.1 层叠性
  26. 4.2 继承性
  27. 4.3 优先级

一、CSS的复合选择器

1.1 复合选择器

CSS中根据选择器的类型把选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基本选择器进行组合而成的。

  • 复合选择器可以更准确、更高效的选择目标标签

  • 复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的。

  • 常用的复合选择器包括:后代选择器、子选择器、并集选择器、伪类选择器等等

1.2 后代选择器

后代选择器又称包含选择器,可以选择父元素里面的子元素。其写法就是把外层元素写在前面内层元素写在后面中间用空格分离。放标签发生嵌套时,内层标签就成为外层标签的后代。

元素1 元素2 {属性1: 属性值1...}

上述语法表示:选择元素1里面的所有元素2

<!-- 例:选择ul里面所有li标签 -->
ul li { 样式声明 }
  • 元素2可以是子元素,也可是子元素的子元素,只要是元素1的后代即可

  • 元素1和元素2可以是任意基础选择器,例如.nav li a {}

1.3 子选择器

子元素选择器,只能选择某元素的最近一级元素

元素1>元素2 { 样式声明 }

上述语法表示:选择元素1里面的所有直接后代元素2

<!-- 例:选择div里面所有最近一级p标签 -->
div>p { 样式声明 }

1.4 并集选择器

并集选择器可以选择多组标签,通常用于集体声明

并集选择器是各选择器通过英文逗号“,”连接而成任何形式的选择器都可以作为并集选择器的一部分

语法:

元素1, 元素2 { 样式声明 }

上述语法表示选择元素1和元素2

例如:

<!-- 选择u1和div标签元素 -->
u1, div { 样式声明 }

1.5 伪类选择器

伪类选择器用于向某些选择器添加特殊效果,比如给链接添加特殊效果,或者选择第1个,第n个元素

伪类选择器书写的最大特点是用**冒号“:”表示,比如:first-child:hover

伪类选择器有很对,如链接伪类、结构伪类等。

(1)链接伪类选择器

链接伪类选择器常用于,鼠标经过链接时,链接的颜色或其他样式发生改变。

选项作用
a:link选择所有未被访问的链接
a:visited选择所有已被访问的链接
a:hover选择鼠标指针位于其上的链接
a:active选择活动链接(鼠标按下未弹起的链接)

注意事项:

  • 为了确保生效,请按照LVHA的顺序声明:link - visited - hover active
  • 因为a链接在浏览器中有默认的样式,因此实际工作中都需要给链接单独指定样式

例:

a {
	color: gray;
	text-decoration: none;
}

a:hover {
	color: skyblue;
	text-decoration: underline;
}

(2):focus伪类选择器

:focus伪类选择器用于选取获得焦点的表单元素

焦点就是光标,一般情况<input>类表单元素才能获取,因此这个选择器也主要针对表单元素。

input:focus {
	background-color: skyblue;
}

1.6 复合选择器总结

选择器作用特征使用情况隔开符号及用法
后代选择器用来选择后代元素可以是子、孙较多符号是空格,.nav a
子代选择器选择最近一级元素只选子较少符号是大于,.nav>p
并集选择器选择某些相同样式的元素可以用于集体声明较多符号是逗号,.nav, .header
链接伪类选择器选择不同状态的链接跟链接相关较多重点记住a{}和a:hover实际开发的写法
:focus选择器选择获得光标的表单跟表单相关较少input:focus

二、CSS的元素显示模式

2.1 什么是元素显示模式

网页的标签非常多,在不同地方会用到不同类型的标签,了解他们的特点可以更好地布局我们的网页。

元素显示模式就是元素(标签)以什么形式进行显示,比如<div>自己占一行,而一行可以放多个<span>

HTML元素一般分为块元素行内元素两种类型

2.2 块元素

常见的块元素有 <h1>~<h6><p><div><ul><ol><li>等,其中div是最典型的块元素

  • 块元素子集独占一行
  • 高度,宽度,外边距,内边距都可以控制
  • 宽度默认是容器父级的100%
  • 是一个容器或盒子,里面可以放行内元素或块元素

注意:文字类的元素内不能使用块级元素,<p>内不能放块级元素<div>等,同理<h1>~<h6>等都是文字类块级标签,里面也不能放其他块级元素。

2.3 行内元素

常见的行内元素有<a><strong><b><em><i><del><s><ins><u><span>等,其中<span>是最典型的行内元素,有些地方也称行内元素为内联元素。

  • 相邻行内元素在一行上,一行可以放多个行内元素
  • 高、宽直接设置是无效的
  • 默认宽度就是本身内容的宽度
  • 行内元素只能容纳文本或其他行内元素

注意:链接里面不能再放链接,但特殊情况下a标签内可以放块级元素。

2.4 行内块元素

在行内元素中有几个特殊的标签:<img><imput><td>,他们同时具有块元素和行内元素的特点。

  • 和相邻行内元素或行内块元素在一行上,但是它们之间会有空隙,一行可以显示多个
  • 默认宽度是本身内容的宽度
  • 高度、行高、外边距和内边距都可以控制

2.5 元素显示模式总结

元素模式元素排列设置样式默认宽度包含
块级元素一行只能放一个块级元素可以设置宽度高度容器的100%可以包含任何标签
行内元素一行可以放多个行内元素不可以直接设置宽度高度本身内容的宽度只可以包含行内元素
行内块元素一行可以放多个行内块元素可以直接设置宽度高度本身内容的宽度

2.6 元素显示模式的转换

特殊情况下,我们需要元素模式的转换,简单理解就是,一个模式的元素需要另外一种模式的特性

例如,想要增大链接<a>的触发范围

转换为块元素:display:block

转换为行内元素:display:inline

转换为行内块元素:display:inline-block

例:

a {
    width: 150px;
    height: 30px;
    background-color: skyblue;
    display: block;
}

三、CSS的背景

通过CSS背景属性可以为页面内元素添加背景样式

背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。

3.1 背景颜色

background-color 可以设置背景颜色

background-color: 颜色值

颜色参数:transparent 透明(默认)或color

3.2 背景图片

background-image 属性描述了元素的背景图像。实际开发常见于logo或者一些装饰性的小图片或者超大的背景图片,优点是非常便于控制位置。

background-image: none|url
参数值作用
none无背景(默认)
url使用绝对或相对地址指定背景图像

例:

div {
	width: 300px;
	height: 300px;
	background-image: url(images/background.jpg);
}

3.3 背景平铺

background-repeat 使HTML页面上对背景图像进行平铺

background-repeat: repeat | no-repeat | repeat-x | repeat-y
参数值作用
repeat背景图像在纵向和横向上平铺(默认)
no-repeat背景图像不平铺
repeat-x背景图像在横向平铺
repeat-y背景图像在纵向平铺

页面元素既可以添加背景颜色,也可以添加背景图片,背景图片在上层。

3.4 背景位置

background-position 可以改变图片在背景中的位置

background-position: x y;

参数是:x坐标和y坐标,可以使用方位名词或者精确单位

参数值说明
length百分数|由浮点数字和单位标识符组成的长度值
positiontop|center|bottom|left|center|right 等方位名词

(1)参数为方位名词

  • 如果指定的两个词都是方位名词,则两个值前后顺序无关,比如left top和top left效果一致
  • 如果只指定了一个方位名词,另一个忽略,则第二个默认居中对齐

(2)参数为精确单位

  • 如果参数值是精确坐标,那么第一个一定是x坐标,第二个一定是y坐标
  • 如果只指定了一个数值,则数值一定指x,y坐标默认垂直居中

(3)参数为混合单位

  • 如果指定的两个值是精确单位和方位名词混合使用,第一个值一定是x坐标,第二个是y坐标

3.5 背景固定

background-attachment 属性设置背景图像是否固定或者随着页面的区域部分滚动,可以制作视差滚动的效果。

background-attachment: scroll | fixed
参数作用
scroll背景图像是否随对象内容滚动(默认)
fixed背景图像固定

3.6 背景属性复合写法

为了简化背景属性的代码,我们可以将这些属性合并简写在同一个background属性中,减少代码量。

当使用简写属性时,没有特定的书写顺序,一般习惯约定顺序为:

background: 背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置

例:

background: transparent url(image.jpg) repeat-none fixed top center

3.7 背景色半透明

background: rgba(0, 0, 0, 0.3);

四个参数分别为r,g,b和alpha透明度,最后一个alpha透明度取值范围为0~1,0代表完全透明。

此属性只是让背景颜色半透明,里面的内容不受影响。

3.8 背景总结

属性作用
background-color背景颜色预定义的颜色值/十六进制/RGB代码
background-image背景图片url(图片路径)
background-repeat是否平铺repeat/no-repeat/repeat-x/repeat-y
background-position背景位置length/position 分别是x 和 y坐标
background-attachment背景附着scroll背景滚动、fixed背景固定
背景简写减少代码量背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置
背景色半透明颜色半透明background: rgba(0,0,0,0.3);

背景图片:实际开发中常用于装饰性的小图片,或者超大的背景图片,优点是非常便于控制位置。

四、CSS三大特性

CSS由三个非常重要的特性:层叠性、继承性、优先级

4.1 层叠性

相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式。层叠性主要解决样式冲突的问题。

层叠的原则是:

  • 样式冲突,遵循就近原则,哪个样式离结构近,就执行哪个样式
  • 样式不冲突,则不会层叠

4.2 继承性

子标签会继承父标签的某些样式,如文本颜色和字号等。

例如:

<div>
    <p>div内的p</p>
</div>

此时如果设置div的样式,则p标签也会继承div的样式。

可继承的样式有:text-,font-,line-这些元素开头的可以继承,以及color属性。

行高的继承性

行高可以跟单位,也可以不跟单位

body {
	font: 12px/1.5;
}
div {
	font-size: 14px;
}

其中的1.5代表当前元素文字大小的1.5倍。即div中的行高是21px,body中其它标签的行高默认是18px。

4.3 优先级

当同一个元素指定多个选择器,就会有优先级的产生。

  • 选择器相同,则执行层叠性
  • 选择器不同,则根据选择器权重执行
选择器选择器权重
继承 或 通配符选择器*0,0,0,0
元素选择器0,0,0,1
类选择器,伪类选择器0,0,1,0
ID选择器0,1,0,0
行内样式 style=""1,0,0,0
!important最大
    <style>
        div {
            color: skyblue !important;
        }
        
        .test {
            color: greenyellow;
        }
        
        #demo {
            color: red;
        }
    </style>
</head>

<body>
    <div class="test" id="demo" style="color: pink;">hello world</div>
</body>

总而言之,作用范围越大,权重越低,作用范围越小,权重越高。

权重叠加

如果是复合选择器,则会有权重叠加,需要计算权重

/* ul内的li权重是0,0,0,1+0,0,0,1=0,0,0,2 */
ul li {
color: darkcyan;
}
/* li的权重是0,0,0,1 */
li {
color: skyblue;
}
/* .nav内的li权重是0,0,1,0+0,0,0,1=0,0,1,1 */
.nav li {
color: red;
}
  • 权重只会叠加,不会进位
  • 权重比较是从左到右逐位进行比较

本文参考了黑马程序员pink老师的视频教程 黑马程序员pink老师前端入门视频教程: https://www.bilibili.com/video/BV14J4114768