目录
◆ 结构伪类选择器
◆ 伪元素
◆ 标准流
◆ 浮动
◆ 清除浮动
一、结构伪类选择器
目标:能够使用 结构伪类选择器 在HTML中定位元素
1 作用与优势:
- 作用:根据元素在HTML中的结构关系查找元素
- 优势:减少对于HTML中类的依赖,有利于保持代码整洁
- 场景:常用于查找某父级选择器中的子元素
2 选择器
<html lang="en">
<head>
<style>
/* 选中第一个 */
/* li:first-child {
background-color: green;
} */
/* 最后一个 */
/* li:last-child {
background-color: green;
} */
/* 任意一个 */
/* li:nth-child(5) {
background-color: green;
} */
/* 倒数第xx个 */
li:nth-last-child(1) {
background-color: blue;
}
</style>
</head>
<body>
<!-- ul>li{这是第$个li}*8 -->
<ul>
<li>这是第1个li</li>
<li>这是第2个li</li>
<li>这是第3个li</li>
<li>这是第4个li</li>
<li>这是第5个li</li>
<li>这是第6个li</li>
<li>这是第7个li</li>
<li>这是第8个li</li>
</ul>
</body>
</html>
<html lang="en">
<head>
<style>
/* ** 偶数 2的倍数*/
/* li:nth-child(2n) {
/* *** 奇数 */
/* li:nth-child(2n+1) { */
/* 找到前3个 */
/* li:nth-child(-n+3) { */
/* *** 4的倍数 */
li:nth-child(4n) {
background-color: green;
}
</style>
</head>
<body>
<ul>
<li>这是第1个li</li>
<li>这是第2个li</li>
<li>这是第3个li</li>
<li>这是第4个li</li>
<li>这是第5个li</li>
<li>这是第6个li</li>
<li>这是第7个li</li>
<li>这是第8个li</li>
</ul>
</body>
</html>
二、伪元素
<head>
<style>
.father {
width: 300px;
height: 300px;
background-color: pink;
}
.father::before {
/* 内容 */
/* content属性必须添加, 否则伪元素不生效 */
content: '老鼠';
color: green;
width: 100px;
height: 100px;
background-color: blue;
/* 默认是行内元素, 宽高不生效 */
display: block;
}
.father::after {
content: '大米';
}
</style>
</head>
<body>
<!-- 伪元素 通过css创建标签, 装饰性的不重要的小图 -->
<!-- 找父级, 在这个父级里面创建子级标签 -->
<div class="father">爱</div>
<!-- 老鼠爱大米 -->
</body>
三、标准流
目标:能够认识 标准流 的默认排布方式及其特点
➢ 标准流:又称文档流,是浏览器在渲染显示网页内容时默认采用的一套排版规则,规定了应该以何种方式排列元素
➢ 常见标准流排版规则:
- 块级元素:从上往下,垂直布局,独占一行
- 行内元素 或 行内块元素:从左往右,水平布局,空间不够自动折行
小结
➢ 标准流中块级元素的排版规则是?
• 从上往下、垂直布局、独占一行
➢ 标准流中行内元素或行内块元素的排版规则是?
• 从左往右、水平布局、空间不够自动折行
四、浮动
目标:能够认识使用 浮动的作用,了解 浮动的特点
学习路径:
- 浮动的作用
- 浮动的代码
- 浮动的特点
- 浮动的案例
1 浮动的作用
2 浮动的代码
<head>
<style>
/* img {
float: left;
} */
div {
width: 100px;
height: 100px;
}
.one {
background-color: pink;
float: left;
}
.two {
background-color: skyblue;
/* flr */
/* float: right; */
float: left;
}
</style>
</head>
<body>
<!-- 1. 图文环绕 -->
<!-- <img src="./images/1.jpg" alt="">
时代呼唤着我们,人民期待着我们。全党必须牢记,坚持党的全面领导是坚持和发展中国特色社会主义的必由之路,中国特色社会主义是实现中华民族伟大复兴的必由之路,团结奋斗是中国人民创造历史伟业的必由之路,贯彻新发展理念是新时代我国发展壮大的必由之路,全面从严治党是党永葆生机活力、走好新的赶考之路的必由之路。 战略性工作 全党要把青年工作作为战略性工作来抓,用党的科学理论武装青年,用党的初心使命感召青年,做青年朋友的知心人、青年工作的热心人、青年群众的引路人-->
<!-- 2. 网页布局: 块在一行排列 -->
<div class="one">one</div>
<div class="two">two</div>
</body>
小结
➢ 浮动的作用是什么?
- 早期作用:图文环绕
- 现在作用:用于布局,让垂直布局的盒子变成水平布局,如:一个在左,一个在右
➢ 左浮动的属性是?右浮动的属性是? - 左浮动:float : left
- 右浮动:float : right
3 浮动的特点
小结
➢ 浮动元素的特点有哪些?
- 浮动元素会脱标,在标准流中不占位置
- 浮动元素比标准流高出半个级别,可以覆盖标准流中的元素
- 浮动找浮动,下一个浮动元素会在上一个浮动元素后面左右浮动
- 浮动元素有特殊的显示效果:① 一行可以显示多个 ② 可以设置宽高
<head>
<style>
/* 浮动的标签 顶对齐 */
/* 浮动: 在一行排列, 宽高生效 -- 浮动后的标签具备行内块特点 */
.one {
width: 100px;
height: 100px;
background-color: pink;
float: left;
margin-top: 50px;
}
.two {
width: 200px;
height: 200px;
background-color: skyblue;
float: left;
/* 因为有浮动, 不能生效 - 盒子无法水平居中 */
margin: 0 auto;
}
.three {
width: 300px;
height: 300px;
background-color: orange;
}
</style>
</head>
<body>
<div class="one">one</div>
<div class="two">two</div>
<div class="three">three</div>
</body>
4 浮动的案例
<head>
<style>
* {
margin: 0;
padding: 0;
}
.top {
/* 宽度高度背景色 */
height: 40px;
background-color: #333;
}
.header {
width: 1226px;
height: 100px;
background-color: #ffc0cb;
margin: 0 auto;
}
.content {
width: 1226px;
height: 460px;
background-color: green;
margin: 0 auto;
}
.left {
float: left;
width: 234px;
height: 460px;
background-color: #ffa500;
}
.right {
float: left;
width: 992px;
height: 460px;
background-color: #87ceeb;
}
/* CSS书写顺序: 浏览器执行效率更高
1. 浮动 / display
2. 盒子模型: margin border padding 宽度高度背景色
3. 文字样式
*/
</style>
</head>
<body>
<!-- 通栏的盒子: 宽度和浏览器宽度一样大 -->
<div class="top"></div>
<div class="header">头部</div>
<div class="content">
<div class="left">left</div>
<div class="right">right</div>
</div>
</body>
head>
<style>
* {
margin: 0;
padding: 0;
}
div {
height: 614px;
width: 1226px;
background-color: red;
margin: 0 auto;
}
.left {
background-color: #800080;
width: 234px;
height: 614px;
float: left;
}
.right {
background-color: blue;
width: 978px;
height: 614px;
float: right;
}
.right li {
width: 234px;
height: 300px;
background-color: #87ceeb;
margin-bottom: 14px;
margin-right: 14px;
/* 取消li的小圆点 */
list-style: none;
float: left;
}
.right li:nth-child(4n) {
margin-right: 0;
}
</style>
</head>
<body>
<div>
<div class="left">
</div>
<div class="right">
<ul>
<li>li</li>
<li>li</li>
<li>li</li>
<li>li</li>
<li>li</li>
<li>li</li>
<li>li</li>
<li>li</li>
</ul>
</div>
</div>
</body>
<head>
<style>
.nav li {
float: left;
list-style: none;
background-color: #ffc0cb;
line-height: 50px;
text-align: center;
font-size: 16px;
width: 80px;
height: 50px;
}
.nav li a {
/* float: left; */
display: inline-block;
width: 80px;
height: 50px;
text-decoration: none;
color: white;
}
.nav li a:hover {
background-color: #008000;
}
</style>
</head>
<body>
<div class="nav">
<ul>
<!-- 导航标准写法 ul-li-a -->
<li><a href="">新闻1</a></li>
<li><a href="">新闻2</a></li>
<li><a href="">新闻3</a></li>
<li><a href="">新闻4</a></li>
<li><a href="">新闻5</a></li>
<li><a href="">新闻6</a></li>
<li><a href="">新闻7</a></li>
<li><a href="">新闻8</a></li>
</ul>
</div>
</body>
书写网页导航步骤:
- 清除默认的margin和padding
- 找到ul,去除小圆点 list-style: none;
- 找到li标签,设置浮动让li一行中显示
- 找到a标签,设置宽高 → a标签默认是行内元素,默认不能设置宽高??
• 方法一:给a标签设置 display : inline-block
• 方法二:给a标签设置 display : block
• 方法三:给a设置 float : left
五、清除浮动
目录
- 清除浮动的介绍
- 清除浮动的方法
1 清除浮动的介绍
➢ 含义:清除浮动带来的影响
• 影响:如果子元素浮动了,此时子元素不能撑开标准流的块级父元素
➢ 原因:
• 子元素浮动后脱标 → 不占位置
➢ 目的:
• 需要父元素有高度,从而不影响其他网页元素的布局
小结
➢ 清除浮动的含义是什么?
• 清除浮动带来的影响
• 影响:如果子元素浮动了,此时子元素不能撑开父元素
➢ 清除浮动的目的是什么?
• 需要父元素有高度,从而不影响其他网页元素的布局
2.1 清除浮动的方法 — ① 直接设置父元素高度
2.2 清除浮动的方法 — ② 额外标签法
➢ 操作:
- 在父元素内容的最后添加一个块级元素
-
给添加的块级元素设置 clear:both
➢ 特点:
• 缺点:会在页面中添加额外的标签,会让页面的HTML结构变得复杂
<head>
<style>
.top {
margin: 0 auto;
width: 1000px;
/* height: 300px; */
background-color: pink;
}
.bottom {
height: 100px;
background-color: green;
}
.left {
float: left;
width: 200px;
height: 300px;
background-color: #ccc;
}
.right {
float: right;
width: 790px;
height: 300px;
background-color: skyblue;
}
/*额外标签法*/
.clearfix {
/* 清除左右两侧浮动的影响 */
clear: both;
}
</style>
</head>
<body>
<!-- 父子级标签, 子级浮动, 父级没有高度, 后面的标准流盒子会受影响, 显示到上面的位置 -->
<div class="top">
<div class="left"></div>
<div class="right"></div>
<div class="clearfix"></div>
</div>
<div class="bottom"></div>
</body>
2.3 清除浮动的方法 — ③ 单伪元素清除法
<head>
<style>
.top {
margin: 0 auto;
width: 1000px;
/* height: 300px; */
background-color: pink;
}
.bottom {
height: 100px;
background-color: green;
}
.left {
float: left;
width: 200px;
height: 300px;
background-color: #ccc;
}
.right {
float: right;
width: 790px;
height: 300px;
background-color: skyblue;
}
/* 单伪元素清除浮动 和 额外标签法原理是一样的 */
/* top盒子添加clearfix 类名选择器,添加块内属性*/
.clearfix::after {
content: '';
/* 伪元素添加的标签是行内, 要求块 */
display: block;
clear: both;
/* 为了兼容性 适配低版本浏览器 */
height: 0;
visibility: hidden;
}
</style>
</head>
<body>
<!-- 父子级标签, 子级浮动, 父级没有高度, 后面的标准流盒子会受影响, 显示到上面的位置 -->
<div class="top clearfix">
<div class="left"></div>
<div class="right"></div>
<!-- 通过css 添加标签 clearfix -->
</div>
<div class="bottom"></div>
</body>
2.4 清除浮动的方法 — ④ 双伪元素清除法
<head>
<style>
.top {
margin: 0 auto;
width: 1000px;
/* height: 300px; */
background-color: pink;
}
.bottom {
height: 100px;
background-color: green;
}
.left {
float: left;
width: 200px;
height: 300px;
background-color: #ccc;
}
.right {
float: right;
width: 790px;
height: 300px;
background-color: skyblue;
}
/* .clearfix::before 作用: 解决外边距塌陷问题
外边距塌陷: 父子标签, 都是块级, 子级加margin会影响父级的位置
*/
/* 清除浮动 */
.clearfix::before,
.clearfix::after {
content: '';
display: table;
}
/* 真正清除浮动的标签 */
.clearfix::after {
/* content: '';
display: table; */
clear: both;
}
</style>
</head>
<body>
<!-- 父子级标签, 子级浮动, 父级没有高度, 后面的标准流盒子会受影响, 显示到上面的位置 -->
<div class="top clearfix">
<div class="left"></div>
<div class="right"></div>
</div>
<div class="bottom"></div>
</body>
2.5 清除浮动的方法 — ⑤ 给父元素设置overflow : hidden
➢ 操作:
- 直接给父元素设置 overflow : hidden
➢ 特点:
• 优点:方便
<head>
<style>
.top {
margin: 0 auto;
width: 1000px;
/* height: 300px; */
background-color: pink;
overflow: hidden;
}
.bottom {
height: 100px;
background-color: green;
}
.left {
float: left;
width: 200px;
height: 300px;
background-color: #ccc;
}
.right {
float: right;
width: 790px;
height: 300px;
background-color: skyblue;
}
</style>
</head>
<body>
<!-- 父子级标签, 子级浮动, 父级没有高度, 后面的标准流盒子会受影响, 显示到上面的位置 -->
<div class="top">
<div class="left"></div>
<div class="right"></div>
</div>
<div class="bottom"></div>
</body>
清除浮动小结
清除浮动(拓展补充)BFC的介绍
➢ 块格式化上下文(Block Formatting Context):BFC
• 是Web页面的可视CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。
➢ 创建BFC方法:
- html标签是BFC盒子
- 浮动元素是BFC盒子
- 行内块元素是BFC盒子
- overflow属性取值不为visible。如:auto、hidden…
- ……
➢ BFC盒子常见特点: - BFC盒子会默认包裹住内部子元素(标准流、浮动)→ 应用:清除浮动
- BFC盒子本身与子元素之间不存在margin的塌陷现象 → 应用:解决margin的塌陷
- ……