谁不是一路荆棘而过呢
—— 24.5.12
CSS.3 选择器、PxCook软件、盒子模型
一、选择器
1.结构伪类选择器
1.作用:
根据元素的结构关系查找元素。
选择器 说明
E:first-child 查找第一个 E元素
E:last-child 查找最后一个E元素
E:nth-child(N) 查找第 N 个E元素(第一个元素 N 值为1)2.示例:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>结构伪类选择器</title> <style> /* 第一个 first-child */ li:first-child{ background-color: green; } /* 最后一个 last-child */ li:last-child{ background-color: gray; } /* 任意个 nth-child */ li:nth-child(3){ background-color: grey; } </style> </head> <body> <ul> <li>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> </ul> </body> </html>
3.:nth-child(公式)
作用:
根据元素的结构关系查找多个元素。
功能 公式
偶数标签 2n
奇数标签 2n+1:2n-1
找到5的倍数的标签 5n
找到第5个以后的标签 n+5
找到第5个以前的标签 -n+5<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>结构伪类选择器-公式用法</title> <style> /* 偶数标签 */ li:nth-child(2n){ background-color: blue; } /* 奇数标签 */ li:nth-child(2n-1){ background-color: red; } /* 5的倍数 */ li:nth-child(5n){ background-color: green; } /* 9以后的标签 */ li:nth-child(n+9){ background-color: yellow; } /* 2以前的标签 */ li:nth-child(-n+2){ background-color: orange; } </style> </head> <body> <ul> <li>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>li 9</li> <li>li 10</li> </ul> </body> </html>
2.伪元素选择器
1.作用:
创建虚拟元素(伪元素),用来摆放装饰性的内容。
选择器 说明
E::before 在E元素里面最前面添加一个伪元素
E..after 在E元素里面最后面添加一个伪元素2.注意点:
① 必须设置content:" "属性,用来 设置伪元素的内容如果没有内容,则引号留空即可
② 伪元素默认是行内显示模式
③ 权重和标签选择器相同3.示例
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>伪元素选择器</title> <style> div{ width:300px; height:300px; background-color: pink; } /* before创建出的显示模式是行内的 before是在div标签的前面 */ /* content属性不写,伪元素不生效 */ div::before{ content: "老鼠"; width: 100px; height: 100px; background-color: brown; display: block; } /* after创建出的显示模式是行内的 after是在div标签的后面 必须要写content属性 */ div::after{ width: 100px; height: 100px; background-color: orange; content: "大米"; display: block; } </style> </head> <body> <!-- 标签内容:老鼠爱大米 --> <div>爱</div> </body> </html>
二、PxCook像素大厨
PxCook(像素大厨)是一款切图设计工具软件。支持PSD文件(设计稿)的文字、颜色、距离自动智能识别。
开发面板(自动智能识别)
设计面板(手动测量尺寸和颜色)设计模式和开发模式进行测量尺寸
⭐三、盒子模型
1.作用:
布局网页,摆放盒子和内容
2.盒子模型 - 组成
盒子模型重要组成部分:
内容区域 — width & height
内边距 — padding(出现在内容与盒子边缘之间)
边框线 — border
外边距 — margin(出现在盒子外面)<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>盒子模型—组成</title> <style> div { width: 200px; height: 200px; background-color: pink; /* 内边距 内容与盒子边缘之间 */ padding: 20px; /* 边框线 */ border:3px solid #000; /* 外边距 出现在盒子外面,拉开两个盒子的距离 */ margin: 45px; } </style> </head> <body> <div> div 标签 </div> </body> </html>
3.盒子模型 - 边框线
属性名:
border(bd)
属性值:
边框线粗细 线条样式 颜色(不区分顺序)
常用线条样式
属性值 线条样式
solid 实线
dashed 虚线
dotted 点线<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>盒子模型-边框线</title> <style> div{ width: 200px; height: 200px; background-color: pink; /* 实线 */ border: 1px solid #000; /* 虚线 */ border: 2px dashed darkcyan; /* 点线 */ border: 3px dotted darkgray; } </style> </head> <body> <div>div 标签</div> </body> </html>
示例:
4.设置单方向边框线
属性名:
border-方位名词(bd+方位名词首字母,例如,bdl)
方位名词:top、right、bottom、left
属性值:
边框线粗细 线条样式 颜色(不区分顺序)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>盒子模型-单方向边框线</title> <style> div{ width: 200px; height: 200px; background-color: pink; /* 上边框线 */ border-top: 1px solid #000; /* 左边框线 */ border-left: 3px dashed red; /* 右边框线 */ border-right: 2px solid blue; /* 下边框线 */ border-bottom: 1px solid green; } </style> </head> <body> <div>div 标签</div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>盒子模型-内边距</title> <style> div{ width: 200px; height: 200px; background-color: pink; /* 上边距 */ padding-top: 30px; /* 内边距 */ padding: 20px; } </style> </head> <body> <div>div 标签</div> </body> </html>
5.盒子模型 - 内边距
作用:
设置 内容 与 盒子边缘 之间的距离
属性名:
padding / padding-方位名词
示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>盒子模型-内边距</title> <style> div{ width: 200px; height: 200px; background-color: pink; /* 上边距 */ padding-top: 30px; /* 内边距 */ padding: 20px; } </style> </head> <body> <div>div 标签</div> </body> </html>
6.盒子模型 - 内边距 - 多值写法
padding 多值写法
取值个数 示例 含义
一个值 padding:10px; 四个方向内边距均为10px
四个值 padding:10px 20px 40px80px; 上:10px;右:20px;下:40px;左:80px
三个值 padding:10px 40px 80px; 上:10px;左右:40px;下:80px
两个值 padding:10px 80px; 上下:10px;左右:80px
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>盒子模型 - padding多值写法</title> <style> div{ width: 200px; height: 200px; background-color: pink; /* padding的多值写法 四值写法 上右下左 从上开始顺时针循环 */ padding: 10px 20px 40px 80px; /* padding的多值写法 三值写法 上 左右 下 左右相同 */ padding: 10px 40px 80px; /* padding的多值写法 两值写法 先上下 再左右 */ padding: 20px 40px; } </style> </head> <body> <div>div 标签</div> </body> </html>
7.盒子模型 - 尺寸计算
默认情况
盒子尺寸 = 内容尺寸 + border 尺寸 + 内边距尺寸
结论:
给盒子加 border / padding 会撑大盒子
解决
手动做减法,减掉 border/padding 的尺寸
内减模式:box-sizing:border-box
8.盒子模型 - 外边距
作用:
拉开两个盒子之间的距离
属性名:
margin
提示:
与 padding 属性值写法、含义相同
示例:
9.盒子模型 - 版心居中
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>版心居中案例</title> <style> /* 版心居中要求:盒子需要有宽度 */ div{ width: 1000px; height: 200px; background-color: pink; /* 上下外边距是0 左右外边距是auto中心 */ margin: 0 auto; } </style> </head> <body> <div>div 标签</div> </body> </html>
清除默认样式
清除标签默认的样式,比如:默认的内外边距。工作中一般先清除这些默认的标签,再根据工作稿的数值进行分析
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>清除默认样式</title> <style> *{ margin: 0; padding: 0; /* 选中了所有标签启动内减模式 */ box-sizing: border-box; } /* 去除列表的项目符号 none */ li{ list-style: none; } </style> </head> <body> <h1>h1 标签</h1> <p>pppppp</p> <ul> <li> li </li> </ul> </body> </html>
10.盒子模型 - 元素溢出
作用:
控制溢出元素的内容的显示方式
属性名:
overflow
属性值
属性值 效果
hidden 溢出隐藏
scroll 溢出滚动(无论是否溢出,都显示滚动条位置)
auto 溢出滚动(溢出才显示滚动条位置)<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>元素溢出</title> <style> div{ width: 200px; height: 200px; background-color: pink; } </style> </head> <body> <div> 文字内容测试溢出显示方式文字内容测试潜出显示方式 文字内容测试溢出显示方式文字内容测试滥出显示方式 文字内容测试滥出显示方式文字内容测试溢出显示方式 文字内容测试溢由显示方式文字内容测试溢出最示方式 文字内容测试溢出显示方式文字内容测试滥出显示方式 文字内容测试滥出显示方式文字内容测试溢出显示方式 文字内容测试滥出显示方式文字内容测试滥出显示方式 文字内容测试溢出显示方式文字内容测试溢出显示方式 文字内容测试滥出显示方式文字内容测试滥出显示方式 </div> </body> </html>
hidden
<style> div{ width: 200px; height: 200px; background-color: pink; /* hidden超出盒子集合的隐藏 */ overflow: hidden; } </style>
scroll
div{ width: 200px; height: 200px; background-color: pink; /* scroll文字滚动条效果 横竖都有滚动条 */ overflow: scroll; } </style>
auto
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>元素溢出</title> <style> div{ width: 200px; height: 200px; background-color: pink; /* 内容溢出才有滚动条,不溢出不会产生滚动条 */ overflow: auto; } </style> </head> <body> <div> 文字内容测试溢出显示方式文字内容测试潜出显示方式 文字内容测试溢出显示方式文字内容测试滥出显示方式 文字内容测试滥出显示方式文字内容测试溢出显示方式 文字内容测试溢由显示方式文字内容测试溢出最示方式 文字内容测试溢出显示方式文字内容测试滥出显示方式 文字内容测试滥出显示方式文字内容测试溢出显示方式 文字内容测试滥出显示方式文字内容测试滥出显示方式 文字内容测试溢出显示方式文字内容测试溢出显示方式 文字内容测试滥出显示方式文字内容测试滥出显示方式 </div> </body> </html>
11.外边距问题 - 合并现象
场景:
垂直排列的兄弟元素,上下 margin 会合并
现象:
取两个 margin 中的较大值生效
外边距问题-塌陷问题
示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>外边距-合并现象</title> <style> .one{ width: 100px; height: 100px; background-color: brown; /* 产生间距 */ margin-bottom: 20px; } .two{ width: 100px; height: 100px; background-color: orange; /* 产生间距 两个盒子间距只取一个较大值 */ margin-top: 50px; } </style> </head> <body> <div class="one">one</div> <div class="two">two</div> </body> </html>
12.外边距 - 塌陷问题
场景:
父子级的标签,子级的添加 上外边距 margin-top 会产生塌陷问题
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>外边距-塌陷问题</title> <style> .father{ width: 300px; height: 300px; background-color: pink; } .son{ width: 100px; height: 100px; background-color: orange; margin-top:50px ; } </style> </head> <body> <div class="father"> <div class="son">son</div> </div> </body> </html>
现象:
导致父级一起向下移动
解决方法:
① 取消子级margin,父级设置padding
② 父级设置 overflow: hidden
③ 父级设置 border-top
示例:
① 取消子级margin,父级设置padding
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>外边距-塌陷问题</title> <style> .father{ width: 300px; height: 300px; background-color: pink; /* 取消子级margin,父级设置padding */ padding-top: 50px; box-sizing: border-box; } .son{ width: 100px; height: 100px; background-color: orange; /* 取消子级margin,父级设置padding */ /* margin-top:50px ; */ } </style> </head> <body> <div class="father"> <div class="son">son</div> </div> </body> </html>
② 父级设置 overflow: hidden
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>外边距-塌陷问题</title> <style> .father{ width: 300px; height: 300px; background-color: pink; /* 1.取消子级margin,父级设置padding */ /* padding-top: 50px; box-sizing: border-box; */ /* 2. 父级设置 overflow: hidden */ overflow: hidden; } .son{ width: 100px; height: 100px; background-color: orange; /* 1.取消子级margin,父级设置padding */ margin-top:50px ; } </style> </head> <body> <div class="father"> <div class="son">son</div> </div> </body> </html>
③ 父级设置 border-top
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>外边距-塌陷问题</title> <style> .father{ width: 300px; height: 300px; background-color: pink; /* 1. 取消子级margin,父级设置padding */ /* padding-top: 50px; box-sizing: border-box; */ /* 2. 父级设置 overflow: hidden */ /* overflow: hidden; */ /* 3. 父级设置 border-top */ border-top: 1px solid #000; } .son{ width: 100px; height: 100px; background-color: orange; /* 1.取消子级margin,父级设置padding */ margin-top:50px ; } </style> </head> <body> <div class="father"> <div class="son">son</div> </div> </body> </html>
<style> .father{ width: 300px; height: 300px; background-color: pink; /* 1. 取消子级margin,父级设置padding */ /* padding-top: 50px; box-sizing: border-box; */ /* 2. 父级设置 overflow: hidden */ /* overflow: hidden; */ /* 3. 父级设置 border-top */ border-top: 1px solid #000; } .son{ width: 100px; height: 100px; background-color: orange; /* 1.取消子级margin,父级设置padding */ margin-top:50px ; } </style>
13.行内元素-内外边距问题
场景:
行内元素添加 margin 和 padding,无法改变元素垂直位置
解决方法:
给行内元素添加 line-height 可以改变垂直位置
示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>行内元素的垂直内外边距</title> <style> span{ /* margin padding属性不影响垂直位置,只影响水平位置的变化 */ margin: 50px; padding: 20px; line-height: 100px; } </style> </head> <body> <span>span标签</span> <span>span标签</span> </body> </html>
14.盒子模型 - 圆角
作用:
设置元素的外边框为圆角。
属性名:
border-radius
属性值:
数字+px/百分比
提示:属性值是圆角半径
圆角效果 属性值写多个代表各个边不同 从左上顺时针旋转 如果没有取值的和对角属性相同
两值写法 左上+右下 右上+左下
三值写法 左上 右上+左下 右下
四值写法:左上 右上 左下 右下
示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>圆角-基本使用</title> <style> div{ /* 上下是50px,左右是auto 居中效果 */ margin: 50px auto; width: 200px; height: 200px; background-color: orange; /* 圆角效果 属性值写多个代表各个边不同 从左上顺时针旋转 如果没有取值的和对角属性相同 */ border-radius: 30px; /* 两值写法 左上+右下 右上+左下 */ border-radius: 30px 70px; /* 三值写法 左上 右上+左下 右下 */ border-radius: 10px 20px 30px; /* 四值写法:左上 右上 左下 右下 */ border-radius: 45px,20px,30px,10px; } </style> </head> <body> <div></div> </body> </html>
常见应用 — 正圆形状
给正方形盒子设置圆角属性值为 宽高的一般 / 50%
常见应用 — 胶囊形状
给长方形盒子设置圆角属性值为 盒子高度的一半
示例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>圆角-特殊场景</title> <style> img{ width: 200px; height: 200px; /* 圆角属性 宽高的一半 必须在正方形内才行 百分比取值越小 头像就越不圆 */ /* border-radius: 100px; */ /* 圆角属性最大值取值是50% */ border-radius: 50%; } div{ width: 200px; height: 80px; background-color: orange; /* 胶囊状态的按钮 */ border-radius:40px ; } </style> </head> <body> <!-- 正圆形 头像 --> <img src="./头像.jpg" alt=""> <!-- 胶囊形状 --> <div></div> </body> </html>
15.盒子模型 - 阴影(拓展)
作用:
给元素设置阴影效果
属性名:
box-shadow
属性值:
x轴偏移量 γ轴偏移量 模糊半径 扩散半径 颜色 内外阴影
注意:
X轴偏移量 和Y轴偏移量 必须书写
默认是外阴影,内阴影需要添加inset
示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>盒子阴影</title> <style> div{ margin: 50px auto; width: 200px; height: 80px; background-color: orange; /* box-shadow 阴影属性 */ box-shadow: 3px 5px 11px 1px rgba(0, 0, 0,0.5); /* inset 内阴影 */ /* box-shadow: 3px 5px 11px 1px rgba(0, 0, 0,0.5) inset;*/ } </style> </head> <body> <div></div> </body> </html>
四、综合案例
1.综合案例一 产品卡片
CSS 书写顺序:
1.盒子模型属性
2.文字样式
3.圆角、阴影等修饰属性像素大厨创建项目
像素大厨设计图片
代码实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>产品卡片</title> <style> *{ /* 清除默认内外边距 */ margin: 0%; padding: 0%; /* padding border会撑大盒子,设置内减模式 不会撑大盒子 */ box-sizing: border-box; } body{ background-color: #f1f1f1; } .product{ margin:50px auto; padding-top: 38px; width: 253px; height: 236px; background-color: #fff; /* 文字居中 */ text-align: center; /* 圆角效果 */ border-radius: 10px; } .product h4{ margin-top: 21px; margin-bottom: 15px; color: #50595d; font-size: 15px; font-weight: 400; } .product p{ font-size: 12px; color: #545c5f; } </style> </head> <body> <div class="product"> <img src="./liveSDK.svg" alt=""> <h4>抖音直播SDK</h4> <p>包含抖音直播看播功能</p> </div> </body> </html>
运行结果
开发细节
在工作中写CSS属性最好先写盒子模型的、再写文字的属性、最后写圆角阴影等等修饰性属性,这样可以提高浏览器渲染页面的效率
2.综合案例二 新闻列表
像素大厨设计图片
代码实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>新闻列表</title> <style> *{ /* 清除默认样式 */ margin: 0%; padding: 0%; /* 启动内减模式 */ box-sizing: border-box; } li{ /* 清除列表的项目符号 */ list-style: none; } a{ /* 清除超链接下划线 */ text-decoration: none; } /* 新闻整体布局 */ .news{ /* 版心居中效果 */ margin: 100px auto; /* 宽度 */ width: 359px; /* 高度 */ height: 193px; } /* 新闻标题布局 */ .news .hd { height: 34px; /* 背景颜色 */ background-color: #eee; /* 描边颜色 */ border: 1px solid #dbdee1; /* 删去左边区域线 */ border-left: 0; } /* 新闻两个字的背景框 */ .news .hd a{ /* 为了让盒子压住模块 盒子向上移动 超链接标签上移 */ margin-top: -1px; /* 超链接是行内特效,要先转为块级元素 */ display: block; border-top: 3px solid #ff8400; /* 新闻两个字的右边框 */ border-right: 1px solid #dbdee1; width: 48px; height: 34px; background-color: #fff; /* 将超链接文字位置下移 */ text-align: center; line-height: 34px; /* 超链接文字大小 */ font-style: 14px; /* 超链接文字颜色 */ color: #333; } .news .bd{ /* 加内边距 */ padding: 6px; } /* li的背景 */ .news .bd li{ /* 加左边距 */ padding-left: 15px; /* li中设置背景 */ background-image: url(./images/square.png); background-repeat: no-repeat; background-position: 0 center; } /* a的背景 */ .news .bd li a{ background: url(./images/img.gif) no-repeat 0 center; padding-left: 20px; font-size: 12px; color: #666; /* 设置文字间隔 */ line-height: 24px; } /* 新闻区域鼠标悬停效果 */ .news .bd li a:hover{ color: #ff8400; } </style> </head> <body> <!-- 新闻区域 包含:标题+内容 news作新闻整体布局 --> <div class="news"> <div class="hd"><a href="#">新闻</a></div> <div class="bd"> <ul> <li><a href="#">点赞“新农人” 温暖的伸手</a></li> <li><a href="#">在希望的田野上…</a></li> <li><a href="#">"中国天眼”又有新发现 已在《自然》杂志发表</a></li> <li><a href="#">急!这个领域,缺人!月新4万元还不好招!啥情况?</a></li> <li><a href="#">G9“带货”背后:亏损面持续扩大,竟争环境激烈</a></li> <li><a href="#">多地力推二手房“带押过户"有什么好处?</a></li> </ul> </div> </div> </body> </html>
运行结果