文章目录
1. 0基础快速入门CSS技术栈(4)
本篇围绕一个 导航栏案例进行学习知识点。
2. 重点提炼
- 复合选择器
- 后代选择器
- 并集选择器
- 标签显示模式
- CSS背景
- 背景位置
- CSS三大特性
- 优先级
3. CSS复合选择器
目标
-
理解
- 理解css复合选择器分别的应用场景
-
应用
- 使用后代选择器给元素添加样式
- 使用并集选择器给元素添加样式
- 使用伪类选择器
为什么要学习css复合选择器
CSS选择器分为 基础选择器 和 复合选择器 ,但是基础选择器不能满足我们实际开发中,快速高效的选择标签。
- 目的是为了可以选择更准确更精细的目标元素标签。
- 复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的
3.1 后代选择器(重点)
-
概念:
后代选择器又称为包含选择器
-
作用:
用来选择元素或元素组的子孙后代
-
其写法就是把外层标签写在前面,内层标签写在后面,中间用空格分隔,先写父亲爷爷,在写儿子孙子。
父级 子级{属性:属性值;属性:属性值;}
- 语法:
.class h3{color:red;font-size:16px;}
- 当标签发生嵌套时,内层标签就成为外层标签的后代。
- 子孙后代都可以这么选择。 或者说,它能选择任何包含在内 的标签。
实际就是把不同标签分类到不同的盒子里,分别设置样式。就相当于小米首页,上面和左侧的a标签
都是装进不同的盒子中采取不同的样式了。
3.1.1 example01
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>后代选择器</title>
<style>
/*常山 赵子龙*/
/*山东 济南*/
.nav a {
color: pink;
}
.wang ul li {
color: red;
}
</style>
</head>
<body>
<div class="nav">
<a href="#">内部链接</a>
<a href="#">内部链接</a>
<a href="#">内部链接</a>
</div>
<a href="#">外部链接</a>
<a href="#">外部链接</a>
<a href="#">外部链接</a>
<ul>
<li>一条狗</li>
<li>一条狗</li>
<li>一条狗</li>
</ul>
<div class="wang">
<ul>
<li>隔壁老王</li>
<li>隔壁老王</li>
<li>隔壁老王</li>
</ul>
</div>
</body>
</html>
commit description:a0.16(后代选择器案例-example01)
tag:a0.16
3.2 子元素选择器
-
作用:
子元素选择器只能选择作为某元素**子元素(亲儿子)**的元素。
-
其写法就是把父级标签写在前面,子级标签写在后面,中间跟一个
>
进行连接 -
语法:
.class>h3{color:red;font-size:14px;}
小结
这里的子 指的是 亲儿子 不包含孙子 重孙子之类。
白话:
比如: .demo > h3 {color: red;} 说明 h3 一定是demo 亲儿子。 demo 元素包含着h3。
3.2.1 exmaple02
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
/*后代选择器 选择 子孙后代*/
/*div strong {
color: red;
}*/
/*子元素选择器 符号 > 只选亲儿子 这些元素 */
div>strong {
color: pink;
}
</style>
</head>
<body>
<div>
<strong>儿子</strong>
<strong>儿子</strong>
<strong>儿子</strong>
</div>
<div>
<p>
<strong>孙子</strong>
<strong>孙子</strong>
<strong>孙子</strong>
</p>
</div>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.17
Branch: branch01commit description:a0.17(子元素选择器案例-example02)
tag:a0.17
3.3 交集选择器
-
条件
交集选择器由两个选择器构成,找到的标签必须满足:既有标签一的特点,也有标签二的特点。
-
语法:
-
其中第一个为标签选择器,第二个为
class
选择器,两个选择器之间不能有空格,如h3.special
。
记忆技巧:
交集选择器 是 并且的意思。 即…又…的意思
比如: p.one 选择的是: 类名为 .one 的 段落标签。
用的相对来说比较少,不太建议使用。
3.3.1 example03
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>交集选择器</title>
<style>
/*需求,就是让 p 这个 变成红色*/
/*交集选择器 既是p标签 又是 .red 类选择器的关系*/
p.red {
color: red;
}
</style>
</head>
<body>
<p class="red">红色</p>
<p class="red">红色</p>
<p class="red">红色</p>
<div class="red">红色</div>
<div class="red">红色</div>
<div class="red">红色</div>
<p>蓝色</p>
<p>蓝色</p>
<p>蓝色</p>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.18
Branch: branch01commit description:a0.18(交集选择器案例-example03)
tag:a0.18
3.4 并集选择器(重点)
- 应用:
- 如果某些选择器定义的相同样式,就可以利用并集选择器,可以让代码更简洁。
- 并集选择器(
CSS
选择器分组)是各个选择器通过,
连接而成的,通常用于集体声明。 - 语法:
-
任何形式的选择器(包括标签选择器、
class
类选择器id
选择器等),都可以作为并集选择器的一部分。 -
记忆技巧:
并集选择器通常用于集体声明 ,逗号隔开的,所有选择器都会执行后面样式,逗号可以理解为 和的意思。
比如 .one, p , #test {color: #F00;}
表示 .one 和 p 和 #test 这三个选择器都会执行颜色为红色。
通常用于集体声明。
他和他,在一起, 在一起 一起的意思
3.4.1 example04
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
/*客户需求: p 和 span 和 第一个div 里面的颜色都是红色*/
/*分开写的*/
p {
color: red;
}
span {
color: red;
}
.red {
color: red;
}
</style>
</head>
<body>
<p>我和你</p>
<p>我和你</p>
<p>我和你</p>
<span>我和你</span>
<span>我和你</span>
<span>我和你</span>
<div class="red">我和你</div>
<div>我和你</div>
<h1>你和我</h1>
<h1>你和我</h1>
</body>
</html>
改成并集选择器:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
/*客户需求: p 和 span 和 第一个div 里面的颜色都是红色*/
/*分开写的*/
/*p {
color: red;
}
span {
color: red;
}*/
/*.red {
color: red;
}*/
/*并集选择器 用逗号隔开, 逗号理解为 和的意思 通常用于集体声明 就是因为这些选择器 里面的样式 相同*/
p,
span,
.red {
color: red;
}
</style>
</head>
<body>
<p>我和你</p>
<p>我和你</p>
<p>我和你</p>
<span>我和你</span>
<span>我和你</span>
<span>我和你</span>
<div class="red">我和你</div>
<div>我和你</div>
<h1>你和我</h1>
<h1>你和我</h1>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.19
Branch: branch01commit description:a0.19(并集选择器案例-example04)
tag:a0.19
3.5 测试题
<!-- 主导航栏 -->
<div class="nav">
<ul>
<li><a href="#">公司首页</a></li>
<li><a href="#">公司简介</a></li>
<li><a href="#">公司产品</a></li>
<li><a href="#">联系我们</a></li>
</ul>
</div>
<!-- 侧导航栏 -->
<div class="sitenav">
<div class="site-l">左侧侧导航栏</div>
<div class="site-r"><a href="#">登录</a></div>
</div>
在不修改以上结构代码的前提下,完成以下任务:
- 链接
登录
的颜色为红色
- 主导航栏里面的所有的链接改为
橙色
- 主导航栏和侧导航栏里面文字都是
14像素
并且是微软雅黑
。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>小测验</title>
<style>
/* 1. 链接 登录 的颜色为红色 (后代选择器) */
.site-r a {
color: red;
}
/*2. 主导航栏里面的所有的链接改为橙色 (后代选择器) */
.nav ul li a {
color: orange;
}
/*3. 主导航栏和侧导航栏里面文字都是14像素并且是微软雅黑。(并集选择器)*/
.nav,
.sitenav {
font: 14px "微软雅黑";
}
</style>
</head>
<body>
<!-- 主导航栏 -->
<div class="nav">
<ul>
<li><a href="#">公司首页</a></li>
<li><a href="#">公司简介</a></li>
<li><a href="#">公司产品</a></li>
<li><a href="#">联系我们</a></li>
</ul>
</div>
<!-- 侧导航栏 -->
<div class="sitenav">
<div class="site-l">左侧侧导航栏</div>
<div class="site-r"><a href="#">登录</a></div>
</div>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.20
Branch: branch01commit description:a0.20(选择器小测验)
tag:a0.20
3.6 链接伪类选择器(重点)
伪类选择器:
为了和我们刚才学的类选择器相区别
类选择器是一个点 比如.demo {}
而我们的伪类 用 2个点 就是 冒号 比如 :link{}
伪娘
作用:
用于向某些选择器添加特殊的效果。比如给链接添加特殊效果, 比如可以选择 第1个,第n个元素。
因为伪类选择器很多,比如链接伪类,结构伪类
等等。这里先叙述链接伪类选择器。
a:link
/* 未访问的链接 */a:visited
/* 已访问的链接 */a:hover
/* 鼠标移动到链接上 */a:active
/* 选定的链接 */
3.6.1 example05
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>链接伪类选择器</title>
<style>
/*未访问过链接的状态 正常状态*/
/*p.one 交集选择器*/
a:link {
color: #333;
/*取消下划线*/
text-decoration: none;
}
/*已经访问的链接 我们点击过*/
a:visited {
color: orange;
}
/*鼠标经过链接时候的状态*/
a:hover {
color: red;
}
/*当我们点击的时候(按下鼠标,别松开的时候)*/
a:active {
color: green;
}
</style>
</head>
<body>
<a href="http://www.xiaomi.com">小米手机</a>
<a href="http://www.dami.com">大米手机</a>
<!-- p.one -->
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.21
Branch: branch01commit description:a0.21(链接伪类选择器example05-1)
tag:a0.21
注意
-
写的时候,他们的顺序尽量不要颠倒 按照
lvha
的顺序。否则可能引起错误。<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>链接伪类选择器</title> <style> /*鼠标经过链接时候的状态*/ a:hover { color: red; } /*当我们点击的时候(按下鼠标,别松开的时候)*/ a:active { color: green; } /*未访问过链接的状态 正常状态*/ /*p.one 交集选择器*/ a:link { color: #333; /*取消下划线*/ text-decoration: none; } /*已经访问的链接 我们点击过*/ a:visited { color: orange; } </style> </head> <body> <a href="http://www.xiaomi.com">小米手机</a> <a href="http://www.dami.com">大米手机</a> <!-- p.one --> </body> </html>
自己尝试会发现很多都失效了。
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.22
Branch: branch01commit description:a0.22(链接伪类选择器(bug)example05-2)
tag:a0.22
-
记忆法
- love hate 爱上了讨厌
- **lv **包包 非常 hao
-
因为叫链接伪类,所以都是 利用交集选择器
a:link a:hover
-
因为
a
链接浏览器具有默认样式,所以我们实际工作中都需要给链接单独指定样式(仅仅给父亲是没用的)。<style> /*正确写法*/ .nav a { color: #333; text-decoration: none; } /*错误写法*/ .nav { color: #333; text-decoration: none; } </style> <div class="nav"> <a href="#">手机</a> <a href="#">手机</a> <a href="#">手机</a> <a href="#">手机</a> </div>
-
实际工作开发中,我们很少写全四个状态,一般我们写法如下:
a { /* a是标签选择器 所有的链接 */
font-weight: 700;
font-size: 16px;
color: gray;
}
a:hover { /* :hover 是链接伪类选择器 鼠标经过 */
color: red; /* 鼠标经过的时候,由原来的 灰色 变成了红色 */
}
3.6.2 example06
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
/*所以我们实际工作中都需要给链接单独指定样式*/
.nav a {
color: #333;
text-decoration: none;
}
/*鼠标放到 nav 里面的链接 才会变色(后代选择器+链接伪类选择器)*/
.nav a:hover {
color: orange;
}
</style>
</head>
<body>
<div class="nav">
<a href="#">手机</a>
<a href="#">手机</a>
<a href="#">手机</a>
<a href="#">手机</a>
</div>
<a href="#">没有妈妈的孩子像棵草</a>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.23
Branch: branch01commit description:a0.23(实际开发中链接的写法example06)
tag:a0.23
3.7 复合选择器总结
选择器 | 作用 | 特征 | 使用情况 | 隔开符号及用法 |
---|---|---|---|---|
后代选择器 | 用来选择元素后代 | 是选择所有的子孙后代 | 较多 | 符号是空格 .nav a |
子代选择器 | 选择 最近一级元素 | 只选亲儿子 | 较少 | 符号是**>** .nav>p |
交集选择器 | 选择两个标签交集的部分 | 既是 又是 | 较少 | 没有符号 p.one |
并集选择器 | 选择某些相同样式的选择器 | 可以用于集体声明 | 较多 | 符号是逗号 .nav, .header |
链接伪类选择器 | 给链接更改状态 | 较多 | 重点记住 a{} 和 a:hover 实际开发的写法 |
4. 标签显示模式(display)重点
目标:
- 理解
- 标签的三种显示模式
- 三种显示模式的特点以及区别
- 理解三种显示模式的相互转化
- 应用
- 实现三种显示模式的相互转化
4.1 什么是标签显示模式
-
什么是标签的显示模式?
标签以什么方式进行显示,比如div 自己占一行, 比如span 一行可以放很多个
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div>我是div,一行独占上</div> <div>我是div,一行独占上</div> <div>我是div,一行独占上</div> <span>看我是span,我愿意一行</span> <span>看我是span,我愿意一行</span> <span>看我是span,我愿意一行</span> </body> </html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.24
Branch: branch01commit description:a0.24(不同标签显示效果不一样)
tag:a0.24
-
作用:
我们网页的标签非常多,再不同地方会用到不同类型的标签,以便更好的完成我们的网页。
-
标签的类型(分类)
HTML
标签一般分为块标签
和行内标签
两种类型,它们也称块元素
和行内元素
。
4.2 块级元素(block-level)
- 例:
常见的块元素有<h1>~<h6>、<p>、<div>、<ul>、<ol>、<li>等,其中<div>标签是最典型的块元素。
- 块级元素的特点(建议背诵)
(1)比较霸道,自己独占一行
(2)高度,宽度、外边距以及内边距都可以控制。
(3)宽度默认是容器(父级宽度)的100%
(4)是一个容器及盒子,里面可以放行内或者块级元素。
- 注意:
- 只有 文字才 能组成段落 因此
p
里面不能放块级元素,特别是p
不能放div
- 同理还有这些标签
h1,h2,h3,h4,h5,h6,dt
,他们都是文字类块级标签,里面不能放其他块级元素。
- 只有 文字才 能组成段落 因此
4.2.1 example07
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
div {
width: 200px;
height: 200px;
/*背景颜色 不要和 文字颜色混淆了 color*/
background-color: pink;
}
</style>
</head>
<body>
<div>我是块级元素</div>
<div>我是块级元素</div>
<div>
<strong>文字</strong>
<h1>标题</h1>
</div>
<!-- p里面不能包含 div 段落p h dt 里面尽量不要放块级元素 -->
<!-- <p>
<div>123</div>
</p> -->
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.25
Branch: branch01commit description:a0.25(块级显示模式案例example07)
tag:a0.25
4.3 行内元素(inline-level)
- 例:
常见的行内元素有<a>、<strong>、<b>、<em>、<i>、<del>、<s>、<ins>、<u>、<span>等,其中<span>标签最典型的行内元素。有的地方也成内联元素
- 行内元素的特点:
(1)相邻行内元素在一行上,一行可以显示多个。
(2)高、宽直接设置是无效的。
(3)默认宽度就是它本身内容的宽度。
(4)行内元素只能容纳文本或则其他行内元素。
注意:
- 链接里面不能再放链接。
- 特殊情况
a
里面可以放块级元素,但是给a转换一下块级模式最安全。(关于转换后面再说)
4.3.1 example08
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
span {
width: 200px;
height: 200px;
background-color: pink;
}
</style>
</head>
<body>
<span>我是行内元素</span>
<span>我是行内元素</span>
<span>我是行内元素哒哒哒</span>
<span><strong></strong></span>
<!-- 行内元素里不能放块级元素 -->
<!-- <span>
<div></div>
</span> -->
<!-- a标签里不能再嵌套a标签 -->
<!-- <a href="#">
<a href="#"></a>
</a> -->
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.26
Branch: branch01commit description:a0.26(行内显示模式案例example08)
tag:a0.26
4.4 行内块元素(inline-block)
- 例:
在行内元素中有几个特殊的标签——<img />、<input />、<td>,可以对它们设置宽高和对齐属性,有些资料可能会称它们为行内块元素。
-
行内块元素的特点:
(1)和相邻行内元素(行内块)在一行上,但是之间会有空白缝隙。一行可以显示多个
(2)默认宽度就是它本身内容的宽度。
(3)高度,行高、外边距以及内边距都可以控制。
4.4.1 example09
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
img {
width: 200px;
}
</style>
</head>
<body>
<img src="images/3.jpg" alt="">
<img src="images/3.jpg" alt="">
<img src="images/3.jpg" alt="">
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.27
Branch: branch01commit description:a0.27(行内块显示模式案例example09)
tag:a0.27
4.5 三种模式总结区别
元素模式 | 元素排列 | 设置样式 | 默认宽度 | 包含 |
---|---|---|---|---|
块级元素 | 一行只能放一个块级元素 | 可以设置宽度高度 | 容器的100% | 容器级可以包含任何标签 |
行内元素 | 一行可以放多个行内元素 | 不可以直接设置宽度高度 | 它本身内容的宽度 | 容纳文本或则其他行内元素 |
行内块元素 | 一行放多个行内块元素 | 可以设置宽度和高度 | 它本身内容的宽度 |
4.6 标签显示模式转换 display
- 块转行内:
display:inline
; - 行内转块:
display:block
; - 块、行内元素转换为行内块:
display: inline-block;
此阶段,我们只需关心这三个,其他的是我们后面的工作。
我们鼠标移动上去就弹出一个框,鼠标编程小手,在这框点击即可跳转,我们会发现a标签
是不能设置宽度高度的,而这里却有宽度和高度。这里实际就是行内元素转化为了块级元素。
4.6.1 example10
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
span {
/*把行内元素转换为块级元素*/
display: block;
width: 100px;
height: 100px;
background-color: pink;
}
div {
/*把块级元素转换为行内元素*/
display: inline;
width: 200px;
height: 200px;
background-color: purple;
}
a {
/*转换为 行内块元素*/
display: inline-block;
width: 80px;
height: 25px;
background-color: orange;
}
</style>
</head>
<body>
<span>行内</span>
<span>行内</span>
<div>div 是块级元素</div>
<div>div 是块级元素</div>
<a href="#">百度</a>
<a href="#">新浪</a>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.28
Branch: branch01commit description:a0.28(三种显示模式相互转换案例example10)
tag:a0.28
4.6.2 example11
简单导航栏
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
/*1. 变化样式 有大小 一行显示 我们想到了 行内块元素*/
a {
/*一定要进行模式转换 行内块*/
display: inline-block;
width: 100px;
height: 30px;
background-color: pink;
/*可以让文字水平居中*/
text-align: center;
/*白色*/
color: #fff;
/*去除下划线*/
text-decoration: none;
}
/*2. 鼠标经过 变化底色 和 文字的颜色*/
a:hover {
background-color: orange;
color: yellow;
}
</style>
</head>
<body>
<a href="#">新闻</a>
<a href="#">体育</a>
<a href="#">汽车</a>
<a href="#">好用</a>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.29
Branch: branch01commit description:a0.29(简单导航栏案例example11)
tag:a0.29
5. 行高那些事(line-height)
目标
- 理解
- 能说出 行高 和 高度 三种关系
- 能简单理解为什么行高等于高度单行文字会垂直居中
- 应用
- 使用行高实现单行文字垂直居中
- 能会测量行高
5.1 行高测量
行高的测量方法:上一行的基线到下一行基线的距离(英文基线到基线,中底线到顶线即可。)
ps测量行高:
测量的时候截图注意浏览器显示和电脑显示都得是100%,否则像素必然发生变化。
5.2 单行文本垂直居中
行高我们利用最多的一个地方是: 可以让单行文本在盒子中垂直居中对齐。
文字的行高等于盒子的高度。
这里情况些许复杂,开始学习,我们可以先从简单地方入手学会。
行高 = 上距离 + 内容高度 + 下距离
上距离和下距离总是相等的,因此文字看上去是垂直居中的。
行高和高度(容器)的三种关系
- 如果 行高 等 高度 文字会 垂直居中
- 如果行高 大于 高度 文字会 偏下
- 如果行高小于高度 文字会 偏上
5.2.1 example12
5.2.1.1 example12-1
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
div {
width: 100px;
height: 50px;
background-color: pink;
line-height: 50px;
}
</style>
</head>
<body>
<div> 文字垂直居中 </div>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.29
Branch: branch01commit description:a0.29(单行文本垂直居中栏案例example12-1——值相等则居中,否则越大越往下偏移)
tag:a0.29
5.2.1.2 example12-2
完善example11中的导航栏字体居中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
/*1. 变化样式 有大小 一行显示 我们想到了 行内块元素*/
a {
/*一定要进行模式转换 行内块*/
display: inline-block;
width: 100px;
height: 30px;
/*行高等于高度 可以让单行文本呢垂直居中*/
line-height: 30px;
background-color: pink;
/*可以让文字水平居中*/
text-align: center;
color: #fff;
text-decoration: none;
}
/*2. 鼠标经过 变化底色 和 文字的颜色*/
a:hover {
background-color: orange;
color: yellow;
}
</style>
</head>
<body>
<a href="#">新闻</a>
<a href="#">体育</a>
<a href="#">汽车</a>
<a href="#">好用</a>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.31
Branch: branch01commit description:a0.31(单行文本垂直居中栏案例example12-2——完善example11中的导航栏字体居中)
tag:a0.31
6. CSS 背景(background)
目标
- 理解
- 背景的作用
css
背景图片和插入图片的区别
- 应用
- 通过
css
背景属性,给页面元素添加背景样式 - 能设置不同的背景图片位置
- 通过
6.1 背景颜色(color)
-
语法:
background-color:颜色值; 默认的值是 transparent 透明的
6.1.1 example13
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.bg {
width: 800px;
height: 500px;
/* 快捷键bgc */
background-color: pink;
}
</style>
</head>
<body>
<div class="bg">
12312312312312312312312312312
</div>
</body>
</html>
6.2 背景图片(image)
- 语法:
background-image : none | url (url)
参数 | 作用 |
---|---|
none | 无背景图(默认的) |
url | 使用绝对或相对地址指定背景图像 |
background-image : url(images/demo.png);
- 小技巧: 我们提倡 背景图片后面的地址,
url
不要加引号。
背景图片和插入图片是有区别的。插入图片是在盒子内部放入图片,而背景图片是在盒子的底部。
6.2.1 example14
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.bg {
width: 800px;
height: 500px;
/* 快捷键bgc */
background-color: pink;
/*背景图片 1. 必须加url 2. url 里面的地址不要加 引号*/
/* bgi快捷键 */
background-image: url(images/l.jpg);
}
</style>
</head>
<body>
<div class="bg">
12312312312312312312312312312
</div>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.32
Branch: branch01commit description:a0.32(背景图片案例example14)
tag:a0.32
6.3 背景平铺(repeat)
- 语法:
background-repeat : repeat | no-repeat | repeat-x | repeat-y
参数 | 作用 |
---|---|
repeat | 背景图像在纵向和横向上平铺(默认的) |
no-repeat | 背景图像不平铺 |
repeat-x | 背景图像在横向上平铺 |
repeat-y | 背景图像在纵向平铺 |
6.3.1 example15
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.bg {
width: 800px;
height: 500px;
background-color: pink;
/*背景图片 1. 必须加url 2. url 里面的地址不要加 引号*/
background-image: url(images/l.jpg);
/*默认的是平铺图 repeat*/
/*background-repeat: repeat;*/
/*背景图片不平铺*/
background-repeat: no-repeat;
}
</style>
</head>
<body>
<div class="bg">
12312312312312312312312312312
</div>
</body>
</html>
水平平铺
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.bg {
width: 800px;
height: 500px;
background-color: pink;
/*背景图片 1. 必须加url 2. url 里面的地址不要加 引号*/
background-image: url(images/l.jpg);
/*默认的是平铺图 repeat*/
/* background-repeat: repeat; */
/*背景图片不平铺*/
/* background-repeat: no-repeat; */
/*横向平铺 repeat-x*/
background-repeat: repeat-x;
}
</style>
</head>
<body>
<div class="bg">
12312312312312312312312312312
</div>
</body>
</html>
纵向平铺
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.bg {
width: 800px;
height: 500px;
background-color: pink;
/*背景图片 1. 必须加url 2. url 里面的地址不要加 引号*/
background-image: url(images/l.jpg);
/*默认的是平铺图 repeat*/
/* background-repeat: repeat; */
/*背景图片不平铺*/
/* background-repeat: no-repeat; */
/*横向平铺 repeat-x*/
/* background-repeat: repeat-x; */
/*纵向平铺*/
background-repeat: repeat-y;
}
</style>
</head>
<body>
<div class="bg">
12312312312312312312312312312
</div>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.33
Branch: branch01commit description:a0.33(背景平铺案例example15)
tag:a0.33
6.4 背景位置(position) 重点
- 语法:
background-position : length || length
background-position : position || position
参数 | 值 |
---|---|
length | 百分数 | 由浮点数字和单位标识符组成的长度值 |
position | top | center | bottom | left | center | right 方位名词 |
- 注意:
- 必须先指定
background-image
属性 position
后面是x坐标和y坐标。 可以使用方位名词或者 精确单位。- 如果指定两个值,两个值都是方位名字,则两个值前后顺序无关,比如
left top
和top left
效果一致 - 如果只指定了一个方位名词,另一个值默认居中对齐。
- 如果
position
后面是精确坐标, 那么第一个,肯定是x
第二的一定是y
- 如果只指定一个数值,那该数值一定是x坐标,另一个默认垂直居中
- 如果指定的两个值是 精确单位和方位名字混合使用,则第一个值是x坐标,第二个值是y坐标
- 必须先指定
实际工作用的最多的,就是背景图片居中对齐了。
6.4.1 example16
6.4.1.1 example16-1
背景位置右上角
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.bg {
width: 800px;
height: 500px;
background-color: pink;
/*背景图片 1. 必须加url 2. url 里面的地址不要加 引号*/
background-image: url(images/l.jpg);
/*背景图片不平铺*/
background-repeat: no-repeat;
/*背景位置*/
/*background-position: x坐标 y坐标;*/
/*右上角*/
background-position: right top;
}
</style>
</head>
<body>
<div class="bg">
12312312312312312312312312312
</div>
</body>
</html>
/*左下角*/
background-position: left bottom;
/* 水平居中 垂直居中*/
background-position: center center;
background-position: center left;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.bg {
width: 800px;
height: 500px;
background-color: pink;
/*背景图片 1. 必须加url 2. url 里面的地址不要加 引号*/
background-image: url(images/l.jpg);
/*背景图片不平铺*/
background-repeat: no-repeat;
/*背景位置*/
/*background-position: x坐标 y坐标;*/
/*background-position: right top; 右上角*/
/*background-position: left bottom; 左下角*/
/*background-position: center center; 水平居中 垂直居中*/
/*则两个值前后顺序无关 因为是方位名词*/
/* background-position: center left; */
/*如果只指定了一个方位名词,另一个值默认居中对齐*/
background-position: top;
}
</style>
</head>
<body>
<div class="bg">
12312312312312312312312312312
</div>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.34
Branch: branch01commit description:a0.34(背景位置案例example16-1)
tag:a0.34
6.4.1.2 example16-2
注意:网页端的坐标轴和我们数学中的坐标x轴相同,y轴刚好相反(即越往右x轴坐标越大、越往下y轴坐标越大)。草图如下:
background-position: 50px 10px ;
background-position: 10px center;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.bg {
width: 800px;
height: 500px;
background-color: pink;
/*背景图片 1. 必须加url 2. url 里面的地址不要加 引号*/
background-image: url(images/l.jpg);
/*背景图片不平铺*/
background-repeat: no-repeat;
/*背景位置*/
/*background-position: x坐标 y坐标;*/
/*background-position: right top; 右上角*/
/*那么第一个,肯定是 x 是 50 第二的一定是y 是 10*/
/* background-position: 50px 10px ; */
/*以下说明 x 10像素 y 垂直居中的*/
/* background-position: 10px center; */
background-position: center 10px;
}
</style>
</head>
<body>
<div class="bg">
12312312312312312312312312312
</div>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.35
Branch: branch01commit description:a0.35(CSS背景位置2案例example16-2)
tag:a0.35
6.4.1.3 example16-3
魔兽世界背景大图
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
body {
height: 3000px;
background-image: url(images/sms.jpg);
background-repeat: no-repeat;
}
</style>
</head>
<body>
</body>
</html>
图片默认是从左上角开始(该图片的1920*1080,如果电脑分辨率刚好则还好,如果不够,就是从左上角开始展示,会丢失一部分,如果放中间是最好的),这样的话是不太好的,因此通常需要左右居中然后顶部对齐显示。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
body {
height: 3000px;
background-image: url(images/sms.jpg);
background-repeat: no-repeat;
/*这种写法一般是我们以后 超大背景图片的做法 背景定位*/
background-position: center top;
}
</style>
</head>
<body>
</body>
</html>
小迪电脑是1920*1080,所以看不出明显的差异。
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.36
Branch: branch01commit description:a0.36(魔兽世界背景大图案例example16-3)
tag:a0.36
6.4.1.4 example16-4
小图片在盒子左侧垂直居中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.icon {
width: 150px;
height: 35px;
background-color: pink;
background-image: url(images/sina.png);
background-repeat: no-repeat;
background-position: 10px center;
}
</style>
</head>
<body>
<div class="icon"></div>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.37
Branch: branch01commit description:a0.37(小图片左侧对齐盒子案例example16-4)
tag:a0.37
6.5 背景附着
-
背景附着就是解释背景是滚动的还是固定的
-
语法:
background-attachment : scroll | fixed
参数 | 作用 |
---|---|
scroll(默认) | 背景图像是随对象内容滚动 |
fixed | 背景图像固定 |
6.5.1 example17
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
body {
height: 3000px;
background-image: url(images/sms.jpg);
background-repeat: no-repeat;
/*这种写法一般是我们以后 超大背景图片的做法 背景定位*/
background-position: center top;
}
p {
font-size: 30px;
color: #fff;
}
</style>
</head>
<body>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
</body>
</html>
背景固定
/*背景固定的*/
background-attachment: fixed;
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.38
Branch: branch01commit description:a0.38(背景固定案例example17)
tag:a0.38
6.6 背景简写
background
:属性的值的书写顺序官方并没有强制标准的。为了可读性,建议大家如下写:background
: 背景颜色 背景图片地址 背景平铺 背景滚动 背景位置;- 语法:
background: transparent url(image.jpg) repeat-y scroll center top ;
6.6.1 example18
优化example17,进行背景简写
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
body {
height: 3000px;
/*background-color: #ccc;
background-image: url(images/sms.jpg);
background-repeat: no-repeat;
background-position: center top;
background-attachment: fixed;*/
/*background: 背景颜色 背景图片地址 背景平铺 背景滚动 背景位置;*/
background: #ccc url(images/sms.jpg) no-repeat fixed center top;
}
p {
font-size: 30px;
color: #fff;
}
</style>
</head>
<body>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
<p>天王盖地虎,小鸡炖蘑菇</p>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.39
Branch: branch01commit description:a0.39(优化example17,进行背景简写案例example18)
tag:a0.39
6.6.2 example19
导航栏案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.nav {
/*让里面的6个链接 居中对齐水平 这句话对 行内元素 行内块元素都有效果的*/
text-align: center;
}
.nav a {
/*有大小的 因为a 是行内元素 不能直接设置宽度和高 必须要转换 行内块元素*/
display: inline-block;
width: 120px;
height: 50px;
/*行高等于盒子的高度 就可以让单行文本垂直居中*/
line-height: 50px;
color: #fff;
/* 去除下划线 */
text-decoration: none;
/*背景简写:设置背景,不要平铺*/
background: url(images/bg.png) no-repeat;
}
/*鼠标经过nav里面的链接, 背景图片更换一下就好了*/
.nav a:hover {
background-image: url(images/bgc.png);
}
</style>
</head>
<body>
<div class="nav">
<a href="#">网站首页</a>
<a href="#">网站首页</a>
<a href="#">网站首页</a>
<a href="#">网站首页</a>
<a href="#">网站首页</a>
<a href="#">网站首页</a>
</div>
<a href="#">123</a>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.40
Branch: branch01commit description:a0.40(导航栏案例example19)
tag:a0.40
6.7 背景透明(CSS3)
我们把鼠标放上去,感觉是颜色加深了,实际上是在它们上面放了一个透明的盒子。
原理类似:
- 语法:
background: rgba(0, 0, 0, 0.3);
- 最后一个参数是
alpha
透明度 取值范围0~1
之间 - 我们习惯把
0.3
的0
省略掉 这样写background: rgba(0, 0, 0, .3)
; - 注意: 背景半透明是指盒子背景半透明, 盒子里面的内容不受影响
- 因为是
CSS3
,所以 低于ie9
的版本是不支持的。
6.7.1 example20
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.alpha {
width: 300px;
height: 300px;
/* .2是0.2的缩写 */
background: #000;
}
</style>
</head>
<body>
<div class="alpha">
哒哒哒
</div>
</body>
</html>
改透明:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.alpha {
width: 300px;
height: 300px;
/* .2是0.2的缩写 */
/* background: #000; */
background: rgba(0, 0, 0, .2);
}
</style>
</head>
<body>
<div class="alpha">
哒哒哒
</div>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.41
Branch: branch01commit description:a0.41(背景透明案例example20)
tag:a0.41
6.8 背景总结
属性 | 作用 | 值 |
---|---|---|
background-color | 背景颜色 | 预定义的颜色值/十六进制/RGB代码 |
background-image | 背景图片 | url(图片路径) |
background-repeat | 是否平铺 | repeat/no-repeat/repeat-x/repeat-y |
background-position | 背景位置 | length/position 分别是x 和 y坐标, 切记 如果有 精确数值单位,则必须按照先X 后Y 的写法 |
background-attachment | 背景固定还是滚动 | scroll/fixed |
背景简写 | 更简单 | 背景颜色 背景图片地址 背景平铺 背景滚动 背景位置; 他们没有顺序 |
背景透明 | 让盒子半透明 | background: rgba(0,0,0,0.3); 后面必须是 4个值 |
7. CSS 三大特性
目标:
- 理解
- 能说出
css
样式冲突采取的原则 - 能说出那些常见的样式会有继承
- 能说出
- 应用
- 能写出C
SS
优先级的算法 - 能会计算常见选择器的叠加值
- 能写出C
7.1 CSS层叠性
-
概念:
所谓层叠性是指多种
CSS
样式的叠加。是浏览器处理冲突的一个能力,如果一个属性通过两个相同选择器设置到同一个元素上,那么这个时候一个属性就会将另一个属性层叠掉
-
原则:
- 样式冲突,遵循的原则是就近原则。 那个样式离着结构近,就执行那个样式。
- 样式不冲突,不会层叠
CSS层叠性最后的执行口诀: 长江后浪推前浪,前浪死在沙滩上。
![](https://i-blog.csdnimg.cn/blog_migrate/f17e841d35d7be7a7b3f5b032e1f4c86.gif)
7.1.1 examole21
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
div {
color: red;
font-size: 30px;
}
div {
color: pink;
}
</style>
</head>
<body>
<div>
长江后浪推前浪,前浪死在沙滩上。
</div>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.42
Branch: branch01commit description:a0.42(样式的层叠性案例example21)
tag:a0.42
7.2 CSS继承性
如第一个标题栏的文字都是垂直居中,而一个大盒子都包起来,如果设置文字垂直居中,不用都把一个个居中,只需要把大盒子居中即可,剩下的子元素继承,减少了代码的冗余性。
-
概念:
子标签会继承父标签的某些样式,如文本颜色和字号。
想要设置一个可继承的属性,只需将它应用于父元素即可。
简单的理解就是: 子承父业。
- 注意:
- 恰当地使用继承可以简化代码,降低
CSS
样式的复杂性。比如有很多子级孩子都需要某个样式,可以给父级指定一个,这些孩子继承过来就好了。 - 子元素可以继承父元素的样式(text-,font-,line-这些元素开头的可以继承,以及color属性)
- 恰当地使用继承可以简化代码,降低
CSS继承性口诀: 龙生龙,凤生凤,老鼠生的孩子会打洞。
7.2.1 example22
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
div {
color: red;
}
</style>
</head>
<body>
<div>
<p>子孙后代</p>
</div>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.43
Branch: branch01commit description:a0.43(样式的继承性案例example22)
tag:a0.43
7.3 CSS优先级(重点)
-
概念:
定义
CSS
样式时,经常出现两个或更多规则应用在同一元素上,此时,-
选择器相同,则执行层叠性
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div { color: red; } div { color:pink; } </style> </head> <body> <div> 权重还有30秒到达战场 </div> </body> </html>
- 选择器不同,就会出现优先级的问题。
-
7.3.1 权重计算公式
关于CSS
权重,我们需要一套计算公式来去计算,这个就是 CSS Specificity
(特殊性)
标签选择器 | 计算权重公式 |
---|---|
继承或者 *(通配符) | 0,0,0,0(无权重) |
每个元素(标签选择器) | 0,0,0,1 |
每个类,伪类 | 0,0,1,0 |
每个ID | 0,1,0,0 |
每个行内样式 style="" | 1,0,0,0 |
每个!important 重要的 | ∞ 无穷大 |
- 值从左到右,左面的最大,一级大于一级,数位之间没有进制,级别之间不可超越。
- 关于
CSS
权重,我们需要一套计算公式来去计算,这个就是CSS Specificity(
特殊性) - div {
color: pink!important;
}
7.3.1.1 example23
类选择器(0,0,0,1
)和标签选择器(0,0,1,0
)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
/* div {
color: red;
} */
/*类选择器 权重 0,0,1,0 班长*/
.one {
color: blue;
}
/*标签选择器 权重 0,0,0,1 小组长*/
div {
color:pink;
}
</style>
</head>
<body>
<div class="one"> 权重还有30秒到达战场 </div>
</body>
</html>
类选择器(0,0,0,1
)和标签选择器(0,0,1,0
)、id 选择器(0,1,0,0
)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
/* div {
color: red;
} */
/*类选择器 权重 0,0,1,0 班长*/
.one {
color: blue;
}
/*id 选择器 权重 0,1,0,0 班主任*/
#two {
color: green;
}
/*标签选择器 权重 0,0,0,1 小组长*/
div {
color:pink;
}
</style>
</head>
<body>
<div class="one" id="two"> 权重还有30秒到达战场 </div>
</body>
</html>
类选择器(0,0,0,1
)和标签选择器(0,0,1,0
)、id 选择器(0,1,0,0
)、行内样式表(1,0,0,0
)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
/*类选择器 权重 0,0,1,0 班长*/
.one {
color: blue;
}
/*id 选择器 权重 0,1,0,0 班主任*/
#two {
color: green;
}
/*标签选择器 权重 0,0,0,1 小组长*/
div {
color:pink;
}
/*style= 行内样式表 权重 1,0,0,0 校长*/
</style>
</head>
<body>
<div class="one" id="two" style="color: yellow;"> 权重还有30秒到达战场 </div>
</body>
</html>
优先级老大!important
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
/* div {
color: red;
} */
/*类选择器 权重 0,0,1,0 班长*/
.one {
color: blue;
}
/*标签选择器 权重 0,0,0,1 小组长*/
/*!important 在样式属性的后面添加 权重最高 ∞ 教育局局长*/
div {
/* color:pink; */
color: pink!important;
}
/*id 选择器 权重 0,1,0,0 班主任*/
#two {
color: green;
}
/*style= 行内样式表 权重 1,0,0,0 校长*/
</style>
</head>
<body>
<div class="one" id="two" style="color: yellow;"> 权重还有30秒到达战场 </div>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.44
Branch: branch01commit description:a0.44(css优先级案例example23)
tag:a0.44
7.3.2 权重叠加
我们经常用交集选择器,后代选择器等,是有多个基础选择器组合而成,那么此时,就会出现权重叠加。
就是一个简单的加法计算
div ul li
------>0,0,0,3
.nav ul li
------>0,0,1,2
a:hover
-----—>0,0,1,1
.nav a
------>0,0,1,1
注意:
- 数位之间没有进制 比如说:
0,0,0,5 + 0,0,0,5 =0,0,0,10
而不是0,0, 1, 0
, 所以不会存在10个div
能赶上一个类选择器的情况。
7.3.2.1 example24
需求:改第一个标签为紫色。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
/*出现了权重叠加的现象 */
/*.nav a 权重 0,0,1,0 + 0,0,0,1 = 0,0,1,1 */
.nav a {
color: red;
}
/*.first 权重 0,0,1,0*/
.first {
color: pink;
}
</style>
</head>
<body>
<div> 人生四大悲 </div>
<div class="nav">
<a href="#" class="first">家里没宽带</a>
<a href="#">网速不够快</a>
<a href="#">手机没流量</a>
<a href="#">学校无wifi</a>
</div>
</body>
</html>
失败了。因为权重问题,可以看我写的注释解释。
解决:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
/*出现了权重叠加的现象 */
/*.nav a 权重 0,0,1,0 + 0,0,0,1 = 0,0,1,1 */
.nav a {
color: red;
}
/*.first 权重 0,0,1,0*/
/* .first {
color: pink;
} */
/*0020*/
.nav .first {
color: pink;
}
/*0,0,0,5 +
0,0,0,5 =
0,0,0,10*/
</style>
</head>
<body>
<div> 人生四大悲 </div>
<div class="nav">
<a href="#" class="first">家里没宽带</a>
<a href="#">网速不够快</a>
<a href="#">手机没流量</a>
<a href="#">学校无wifi</a>
</div>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.45
Branch: branch01commit description:a0.45(权重叠加案例example24)
tag:a0.45
7.3.3 继承的权重是0
这个不难,但是忽略很容易绕晕。其实,我们修改样式,一定要看该标签有没有被选中。
1) 如果选中了,那么以上面的公式来计权重。谁大听谁的。
2) 如果没有选中(如下例只选中了父级没有选儿子,那是没有用的),那么权重是0,因为继承的权重为0.
7.3.3.1 example25
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
div {
color: red;
}
p {
color: green;
}
/*因为demo 没有选p标签,所以 继承的权重为 0*/
.demo {
color: blue;
}
#test {
color: pink;
}
</style>
</head>
<body>
<div class="demo" id="test">
<p>继承的权重为 0</p>
</div>
</body>
</html>
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.46
Branch: branch01commit description:a0.46(继承的权重为0案例example25)
tag:a0.46
8. CSS注释
CSS注释规则:
/* 需要注释的内容 */ 进行注释的,即在需要注释的内容前使用 "/*" 标记开始注释,在内容的结尾使用 "*/"结束。
例如:
p {
/* 所有的字体是14像素大小*/
font-size: 14px;
}
9. CSS优先级笔试题
9.1 01题
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="keywords" content="关键词1,关键词2,关键词3" />
<meta name="description" content="对网站的描述" />
<title>第1题</title>
<style type="text/css">
div div{
color:blue;
}
div{
color:red;
}
</style>
</head>
<body>
<div>
<div>
<div>
试问这行字体是什么颜色的?
</div>
</div>
</div>
</body>
</html>
首先看修改样式的标签有没有被选中,这里被选中了,再看权重,因此是蓝色。
9.2 02题
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="keywords" content="关键词1,关键词2,关键词3" />
<meta name="description" content="对网站的描述" />
<title>第2题</title>
<style type="text/css">
#father{
color:red;
}
p {
color:blue;
}
</style>
</head>
<body>
<div id="father">
<p>试问这行字体是什么颜色的?</p>
</div>
</body>
</html>
#father
未被选中,继承的权重是0,所以是蓝色。
9.3 03题
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Document</title>
<style type="text/css">
div div div div div div div div div div div div{
color:red;
}
.me {
color:blue;
}
</style>
</head>
<body>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div class="me">试问这行文字是什么颜色的</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
选中了我们看公式,标签选择器权重0,0,0,12
与类选择器权重0,0,1,0
,显然是蓝色。
9.4 04题
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="keywords" content="关键词1,关键词2,关键词3" />
<meta name="description" content="对网站的描述" />
<title>第4题</title>
<style type="text/css">
div p {
color:red;
}
#father {
color:red;
}
p.c2{
color:blue;
}
</style>
</head>
<body>
<div id="father" class="c1">
<p class="c2">
试问这行字体是什么颜色的?
</p>
</div>
</body>
</html>
#father
虽然权重最高,但是未被选中,直接排除。
div p
对应:0,0,0,2
p.c2
对应:0,0,1,1
9.5 05题
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Document</title>
<style type="text/css">
.c1 .c2 div{
color: blue;
}
div #box3 {
color:green;
}
#box1 div {
color:yellow;
}
</style>
</head>
<body>
<div id="box1" class="c1">
<div id="box2" class="c2">
<div id="box3" class="c3">
文字
</div>
</div>
</div>
</body>
</html>
三个都满足条件,被选中。
.c1 .c2 div
首先被排除,后面都带#
div #box3
和 #box1 div
权重都是一样的(0101
),使用就近原则
,则是黄色。
9.6 06题
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="keywords" content="关键词1,关键词2,关键词3" />
<meta name="description" content="对网站的描述" />
<title>第6题</title>
<style type="text/css">
#father #son{
color:blue;
}
#father p.c2{
color:black;
}
div.c1 p.c2{
color:red;
}
#father{
color:green !important;
}
</style>
</head>
<body>
<div id="father" class="c1">
<p id="son" class="c2">
试问这行字体是什么颜色的?
</p>
</div>
</body>
</html>
#father
未被选中,排除。
#father #son
肯定是最高的,因为两个#
。
参考:https://github.com/6xiaoDi/blog-CSS/tree/a0.47
Branch: branch01commit description:a0.47(CSS优先级笔试题)
tag:a0.47
10. 总结
(后续待补充)