能够使用结构伪类选择器在HTML中选择元素,能够说出标准流元素的布局特点,能够说出浮动元素的特点,能够使用浮动完成小米模块布局案例,能够说出清除浮动的目的,并能够使用清除浮动的方法
一、结构伪类选择器
根据元素在HTML中的结构关系(主要针对嵌套关系)查找元素,减少对于HTML中类的依赖,有利于保持代码整洁,常用于查找某父级选择器中的子元素。以li元素为例进行展示,代码如下:
li:first-child {
background-color: green; /* 选中第一个 */
}
li:last-child {
background-color:red; /* 最后一个 */
}
li:nth-child(5) {
background-color:pink; /* 任意一个 */
}
li:nth-last-child(2) {
background-color: blue; /* 倒数第xx个 */
}
/* 偶数 li:nth-child(2n) */
/*奇数 li:nth-child(2n+1) (2n-1)也可以 */
/* 找到前3个li:nth-child(-n+3) ,n的取值为0、1、2、3、4... */
/* 找从第三个往后 li:nth-child(n+3) */
/* 4的倍数 */
li:nth-child(4n) {
background-color: green;
}
二、伪元素
一般页面中的非主体内容可以使用伪元素,是由CSS模拟出来的标签效果,用来制作装饰性的小图,区别于HTML设置的标签,有两种伪元素。
伪元素 | 作用 |
::before | 在父元素内容的最前添加一个伪元素 |
::after | 在父元素内容的最后添加一个伪元素 |
注意点:必须设置context属性才能生效,伪元素默认是行内元素
context:' ' 这里必须填充内容,否则不能当成元素进行渲染操作
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.father {
width: 300px;
height: 300px;
background-color: pink;
}
.father::before {
/* 内容 */
/* content属性必须添加, 否则伪元素不生效*/
content: '老鼠';
width: 100px;
height: 200px;
}
.father::after {
content: '大米';
/* 默认是行内块,设置宽高不生效,需要display转换为行内块或者块 */
}
</style>
</head>
<body>
<!-- 伪元素 通过css创建标签, 装饰性的不重要的小图 -->
<!-- 找父级, 在这个父级里面创建子级标签 -->
<div class="father">爱</div>
<!-- 老鼠爱大米 -->
</body>
</html>
三、标准流
标准流,又称文档流,是浏览器在渲染显示网页内容时默认采用的一套排版规则,规定了应该以何种方式排列元素,就是前面所说的显示模式
常见的标准流排版规则:
- 块级元素:从上往下,垂直布局,独占一行
- 行内元素或者行内块元素:从左往右,水平布局,空间不够自动拆行
注意:浏览器在解析行内和行内块标签时,如果代码换行书写,会产生一个空格的间距。如果在代码不换行的前提下,要求无空格接触,则需要使用浮动。
四、浮动
早期作用:图文环绕
现在作用:用于布局,让垂直布局的盒子变成水平布局,如:一个在左,一个在右
浮动元素的特点:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
.box {
margin: 0 auto;
width: 1226px;
height: 614px;
/* background-color: pink; */
}
.left {
float: left;
width: 234px;
height: 614px;
background-color: #800080;
}
.right {
float: right;
width: 978px;
height: 614px;
/* background-color: green; */
}
ul {
/* 去掉列表的符号 */
list-style: none;
}
.right li {
float: left;
margin-right: 14px;
margin-bottom: 14px;
width: 234px;
height: 300px;
background-color: #87ceeb;
}
/* 如果父级的宽度不够, 子级会自动换行 */
/* 第四个li和第八个li右侧间距清除 */
.right li:nth-child(4n) {
margin-right: 0;
}
</style>
</head>
<body>
<div class="box">
<div class="left"></div>
<div class="right">
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
.nav {
margin: 50px auto;
width: 640px;
height: 50px;
background-color: #ffc0cb;
}
ul {
list-style: none;
}
.nav li {
float: left;
}
.nav li a {
/* 1. 浮动 / display */
/* display: inline-block; */
display: block;
/* 2. 盒子模型 */
width: 80px;
height: 50px; /* 给a设置宽高,可以使点击范围最大,若是给li,则只能点击文字 */
/* background-color: green; */
/* 3. 文字样式 */
text-align: center;
line-height: 50px;
color: #fff;
text-decoration: none;
}
.nav li a:hover {
background-color: green;
}
</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>
<li><a href="#">新闻</a></li>
<li><a href="#">新闻</a></li>
<li><a href="#">新闻</a></li>
<li><a href="#">新闻</a></li>
</ul>
</div>
</body>
</html>
五、清除浮动
清除浮动是指清除浮动带来的影响,如果子元素浮动了,此时子元素不能撑开父元素,需要父元素有高度,从而不影响其他网页元素的布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<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;
}
</style>
</head>
<body>
<!-- 父子级标签, 子级浮动, 父级没有高度, 后面的标准流盒子会受影响, 显示到上面的位置 -->
<div class="top">
<div class="left"></div>
<div class="right"></div>
</div>
<div class="bottom"></div>
</body>
</html>
由于浮动的父元素高度设置为0,那么产生的效果如下:
清除浮动的方法:
1.直接设置父元素高度,该方法简单粗暴,方便;但有些布局中不能固定父元素高度,如:新闻列表、京东推荐模块
2.额外标签法:在父元素内容的最后添加一个块级元素,给添加的块级元素设置clear:both。该方法在会在页面中添加额外的标签,会让页面的HTML结构变得复杂
<style>
.clearfix {
/* 清除左右两侧浮动的影响 */
clear: both;
}
</style>
</head>
<body>
<!-- 父子级标签, 子级浮动, 父级没有高度, 后面的标准流盒子会受影响, 显示到上面的位置 -->
<div class="top">
<div class="left"></div>
<div class="right"></div>
<div class="clearfix"></div>
3.单伪元素清除法:用伪元素代替了额外标签。在项目中使用,直接给标签加清除浮动
/* 单伪元素清除浮动 和 额外标签法原理是一样的 */
<style>
.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 添加标签 -->
</div>
<div class="bottom"></div>
4.双伪元素清除法,在项目中使用,直接给标签加类即可清除浮动
<style>
/* .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>
5.给父元素设置overflow:hidden。该方法方便
<style>
.top {
margin: 0 auto;
width: 1000px;
/* height: 300px; */
background-color: pink;
overflow: hidden;
}
</style>