跳转目录🚀
篇章 | 知识点 |
---|---|
CSS之邂逅(一) | 认识CSS、编写CSS样式、CSS注释、常见的CSS属性 |
CSS额外知识补充(二) | link元素、计算机进制、CSS表示颜色、Chorme调试工具、浏览器渲染流程 |
CSS属性与选择器(三) | CSS文本属性、CSS字体属性、CSS常见选择器 |
CSS属性的特性(四) | CSS属性的继承、CSS属性的层叠、CSS属性的类型、display属性、元素的隐藏、overflow属性、CSS不生效技巧 |
CSS盒子模型(五) | 认识盒子模型、内容width/height、内边距padding、边框/圆角border、外边距margin、盒子和文字阴影、box-sizing |
CSS设置背景(六) | background-(image、repeat、size、position、attachment)、background、background-image和img对比 |
CSS高级元素的使用(七) | 列表元素、表格元素、表格合并、表单元素、表单常见属性 |
CSS之Emme语法t和结构伪类(八) | 认识Emmet、常见Emmet语法、常见的结构伪类、否定伪类的使用 |
CSS额外知识补充(九) | border图形、Web网络字体、Web字体图标、CSS精灵图、cursor属性 |
CSS元素定位(十) | 标准流布局、认识元素的定位、静态定位、相对定位、固定定位、绝对定位、粘性定位、z-index |
CSS元素浮动(十一) | 认识浮动、浮动的规则、浮动的案例、高度塌陷、清除浮动、布局方案对比 |
CSS flex布局(十二) | 认识flex布局、flex布局的理解、flex-container属性、flex-item属性 |
1. 认识盒子模型
1.1 认识盒子
我觉得下面这张图描述的很形象,我们可以把HTML每一个元素看成是一个盒子
1.2 盒子模型 Box Model
- 每个盒子有四个属性,
- Content 内容
- padding 内边距
- border 边框
- margin 外边距
- 盒子模型的四边
- 因为盒子有四边, 所以
margin/padding/border
都包括top/right/bottom/left
四个边:
- 因为盒子有四边, 所以
1.3 在浏览器的开发工具中
在浏览器的开发工具中,我们选择一个元素,查看Computed后,就可以清晰的看到盒子模型
2. Content 内容区
2.1 宽度和高度 width&height
盒子的内容是通过设置 宽度width
和高度height
设置的。(行内级非替换元素是设置的宽高无效
)
- width的默认值 auto在不同场景下
- 在块级元素中,独占一行(父元素)
- 行内级:包裹内容
- 行内可替换元素:根据替换元素大小,如img根据图片默认大小决定宽度
2.2 最大/最小 宽度高度 min/max
该属性常在移动端适配
时使用,可以设置最大宽度和最小宽度。
- min-width :宽度大于等于min-width
- max-width:宽度小于等于max-width
高度同理,但不常用。
- min-height
- max-height
.home {
background-color: #f00;
max-width: 750px;
min-width: 500px;
height: 1000px;
margin: 0 auto;
}
3. padding 内边距
作用: padding属性用于设置盒子的内边距, 通常用于设置边框和内容之间的间距
3.1 padding的四个方向
- padding-top:上内边距
- padding-right:右内边距
- padding-bottom:下内边距
- padding-left:左内边距
3.2 padding 简写属性
- padding简写属性,遵循
顺时针转动
:4个值
:依次是上 右 下 左
3个值
:依次是上 左右 下
2个值
:依次是上下 左右
1个值
:四边同值
.box{
border: 1px solid red;
padding: 10px 20px 30px 40px;
display: inline-block;
}
4. border 边框
作用: 用于设盒子的边框,边框相较于于content/padding/margin来说特殊一些
- 边框具有
宽度width
- 边框具有
样式style
- 边框具有
颜色color
4.1 border-width 边框宽度
其中,border-width是以下四个属性的简写属性:
- border-top-width
- border-right-width
- border-bottom-width
- border-left-width
4.2 border-style 边框样式
其中,border-style是以下四个属性的简写属性:
- border-top-style
- border-right-style
- border-bottom-style
- border-left-style
边框的样式设置值
4.3 border-color 边框颜色
其中,border-color是以下四个属性的简写属性:
- border-top-color
- border-right-color
- border-bottom-color
- border-left-color
4.4 border 简写属性
其中,border可以对四边同时设置 宽度 样式 颜色, 并且是以下四个属性的简写属性
- border-top
- border-right
- border-bottom
- border-left
注意:
边框颜色、宽度、样式的编写顺序任意。在以上各简写属性都适用于顺时针转动规律
.box {
width: 300px;
height: 300px;
/* width */
/* border-top-width: 10px;
border-right-width: 20px;
border-bottom-width: 30px;
border-left-width: 40px; */
border-width: 10px 20px 30px 40px;
/* styel */
/* border-top-style: solid;
border-right-style: dashed;
border-bottom-style: ridge;
border-left-style: groove; */
border-style: solid ridge groove dotted;
/* color */
/* border-top-color: red;
border-right-color: green;
border-bottom-color: blue;
border-left-color: orange; */
border-color: red green blue orange;
/* 总缩写属性*/
/* border:10px solid red*/
}
4.5 border-radius 圆角
作用: 用于设置边框的圆角
其中,border-radius是以下四个属性的简写属性
- border-top-left-radius
- border-top-right-radius
- border-bottom-right-radius
- border-bottom-left-radius
常用的值
数值
:通常用来设置小的圆角,比如6px百分比
:通常用来设置一定弧度或者圆形
利用border-radius画圆
- 如果一个元素是正方形, 设置border-radius大于或等于50%时,就会变成一个圆
.circle{
width:100px;
height:100px;
background-color:#f00;
border:5px solid #0f0;
border-radius:50%;
}
5. margin 外边距
作用: 用于设置盒子的外边距
,通常用于元素和元素直接的间距
5.1 margin的四个方向
- margin-top:上外边距
- margin-bottom:下外边距
- margin-left:左外边距
- margin-right:右外边距
5.2 margin的简写属性
其中,margin可以对四边同时设置外边距, 并且是以下四个属性的简写属性
- margin-top
- margin-right
- margin-bottom
- margin-left
5.3 上下margin的传递
父子块级元素之间margin的传递:
- margin-top传递
- 条件①
块级元素的顶部线和父元素的顶部线重叠
==>块级元素的margin-top值会传递给父元素
- 条件①
- margin-bottom传递
- 条件①:
块级元素的底部线和父元素的底部线重叠
,条件②:并且父元素的高度是auto
==>块级元素的margin-bottom值会传递给父元素
- 条件①:
案例1:上传递
.box {
width: 300px;
height: 200px;
background-color: #f00;
/* 解决传递问题 */
/* 第一种 */
/* border: 1px solid blue; */
/* 第二种 BFC */
/* overflow: auto; */
/* 第三种 */
box-sizing: border-box;
padding-top: 20px;
}
.content {
width: 100px;
height: 100px;
background-color: #0f0;
/* margin-top: 20px; */
}
案例2:下传递
.box {
width: 300px;
/* height: 100px; */
background-color: #f00;
/* 解决传递问题 */
/* 第一种 */
/* border: 1px solid blue; */
/* 第二种 BFC */
/* overflow: auto; */
/* 第三种 */
/* padding-bottom: 20px; */
}
.content {
width: 100px;
height: 100px;
background-color: #0f0;
margin-bottom: 100px;
}
解决传递问题
1. 设置父元素padding-top\padding-bottom
2. 设置父元素border
3. 父元素触发BFC(block format control)
:有很多触发方式,其中可以通过设置overflow:auto;
来触发BFC
5.4 上下margin的折叠
- 垂直方向上:相邻的2个margin(margin-top、margin-bottom)有可能会合并为1个margin,这种现象叫做
collapse(折叠)
- 水平方向上:margin(margin-left、margin-right)永远不会collapse(折叠)
其中,折叠是取较大的值,我们可以只设置一个元素的margin来规避折叠的发生
折叠的场景:
- 两个兄弟块之间的上下margin折叠
.box{
display:inline-block;
width:100px;
height:100px;
background-color:#ff0;
margin-bottom:20px;
}
.container{
display:inline-block;
width:100px;
height:100px;
background-color:#0f0;
margin-top:20px
}
- 父子块级元素之间margin的折叠
.box {
width: 300px;
height: 100px;
box-sizing: border-box;
background-color: #f00;
padding-top: 60px;
}
.content {
width: 100px;
height: 100px;
background-color: #0f0;
margin-top: 10px;
}
总结:
- margin:一般是用来设置兄弟元素之间的间距
- padding:一般是用来设置父子元素之间的间距
5.5 块级元素水平居中
块级元素盒子模型 :
margin-left
+border-left
+padding-left
+width
+padding-right
+border-right
+margin-right
利用块级元素是独占一行的特性,当盒子设置了一定大小的width时:
- 默认情况下,将剩余空间全部分给
margin-right
,即左对齐 - 设置
margin-left:auto; margin-right:auto;
后,会平均分配剩余空间,即设置元素基于父元素水平居中
块级元素水平居中 ==> 设置 margin:0 auto;
body {
margin: 0;
padding: 0;
/* inline-level box */
/* 行内级: 行内非替换元素 span/a 行内替换元素 img input inline-block(没有一个元素默认是行内块元素,注意img这种是行内可替换元素,不是行内块) */
/* text-align: center; */
}
.box {
margin: 0 auto;
width: 200px;
height: 100px;
background-color: #f00;
/* display: inline-block; */
}
疑问: 父子之间的距离不是应该使用padding吗?这里为什么会用margin来调整基于父元素的子元素水平居中呢?
回答:
我们设置了margin:0 auto 后左右外边距是交由浏览器来控制的,是没有办法的办法。使用text-align需要改变元素的显示类型,破坏块级元素原有的特性;之后会学习flex布局,主要还是使用flex布局
6. 外轮廓 outline
outline表示元素的外轮廓,默认显示在border的外面,不占据空间
outline相关属性:
写法与border写法是类似的的,outline可以用于去除tab键选中a元素、input元素的focus轮廓效果。
- outline-width:外轮廓的宽度
- outline-style:外轮廓的样式
- outline-color:外轮廓的颜色
- outline:outline-width outline-style outline-color的简写属性
7. 阴影shadow
7.1 盒子阴影 box-shadow
作用: box-shadow属性可以设置一个或者多个阴影
box-shadow格式:
- insert值为可选值,表示外框阴影,默认下内框阴影。
- 把以下四项简称称为length:offset-x offset-y blur-radius spread-radius分别表示
x轴偏移量 y轴偏移量 模糊半径 扩展半径
,length[2,4]表示x y的偏移量是必填的,后两个可选。 - color 设置阴影颜色,默认黑色,可选。(如果设置了color属性,可没有在box-shadow里指定颜色,则会以color属性的值为准)
效果就不截图了,有点太占空间了,自己测试吧
.box{
width: 100px;
height: 100px;
background-color: #f00;
box-shadow: 100px 200px 10px 20px;
/*box-shadow:insert offset-x offset-y blur-radius spread-radius color*/
}
这里放一个测试阴影的网址:
https://html-css-js.com/css/generator/box-shadow/
7.2 文本阴影 font-shadow
作用: font-shadow属性可以设置一个或者多个阴影
text-shadow格式:与box-shadow格式相似,没有spread-raidus
8. 行内非替换元素的特殊性
此特性的制定,是为了防止设置这些属性后会破坏原本的排版
- 以下属性对行内级非替换元素不起作用
- width
- height
- margin-top
- margin-bottom
- 以下属性对行内级非替换元素比较特殊
- padding-top
- padding-bottom
- 上下方向的border
.box {
background-color: #f00;
/* 内容:width/height (压根不生效) */
width: 1000px;
height: 1000px;
/* 特殊: 上下生效 但是不占据空间 */
/* 内边距 padding*/
padding: 50px;
/* 边框 border */
border: 20px solid orange;
/* 特殊: 上下不生效 */
/* 外边距 margin */
margin: 10px;
}
9. 盒子尺寸 box-sizing
在前面的盒子模型中也有一张图,其实就是其中一种盒子模型content-box。box-sizing属性是用于设置盒子模型中宽高的行为
9.1 content-box
含义: 宽width 高height设置为content内容,而内边距padding和边框border为内容content之外的
9.2 border-box
含义: 宽width 高height设置为content内容、内边距padding和边框border的总和
其实content-box为标准盒子模型
,border-box为IE盒子模型
(已淘汰),如果我们想要更换盒子模型就需要设置box-sizing的属性
10. 案例练习
案例练习1
<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>
a {
display: inline-block;
color: black;
font-size: 10px;
text-decoration: none;
}
.button {
width: 70px;
height: 25px;
line-height: 25px;
border-radius: 13px;
text-align: center;
}
.new {
background-color: red;
color: white;
}
.vip {
background-color: black;
color: rgb(246, 189, 103);
}
</style>
</head>
<body>
<a href="www.baidu.com" class="button new">新人福利</a>
<a href="www.baidu.com" class="button vip">PLUS会员</a>
</body>
案例练习2
知识点
- 文本单行超出显示省略号
- 之前有说过a元素里不能写div,但是块级/行内块级元素是可以存放在任何的元素的,规矩不是死的,而且在学习了之后的知识后会有更多不一样的解决办法,如路由跳转,打开新链接window.open等
body {
background-color: #f4f4f4;
}
.item {
display: inline-block;
text-decoration: none;
width: 234px;
height: 300px;
text-align: center;
background-color: #fff;
box-sizing: border-box;
padding: 20px 0;
}
.item:hover {
box-shadow: 0px 10px 50px 5px #dedede;
}
.item img {
width: 160px;
height: 160px;
}
.item .title {
font-weight: normal;
margin: 10px 10px 2px;
font-size: 14px;
color: #333;
}
/* 单行显示省略号 */
.item .subtitle {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 12px;
margin: 0 10px 10px;
color: #b0b0b0;
}
.item .price {
color: #ff6700;
font-size: 16px;
margin: 0 10px 14px;
}
.item .price>.discount {
color: #b0b0b0;
text-decoration: line-through;
margin-left: 10px;
}
<body>
<a href="https://www.mi.com/shop/buy/detail?product_id=18075" class="item" target="_blank">
<img src="./img/a6cec580260ceb20ae6a885c2c65c611.jpeg" alt="">
<h3 class="title">Redmi K60</h3>
<p class="subtitle">骁龙8+|2K 高光直屏|5500mAh+67W闪充</p>
<p class="price">2499元起<span class="discount">2699元</span></p>
</a>
</body>
案例练习3
遇到的问题
- 如果需要将段落标题单行显示,多余隐藏显示省略号的效果。需要注意段落标签是否被a元素包裹,如果a元素作为段落标签的父元素而没有设置一定的宽度,则会导致上图的情况
- 解决办法:就是需要给a元素设置宽度,因为在设置no-wrap不允许换行后,段落元素的宽度是auto的,会独占一行显示
<!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>
a {
display: inline-block;
text-decoration: none;
}
.item {
width: 264px;
height: 240px;
}
.item .album img {
border-radius: 6px;
height: 148px;
}
.item .info {
width: 100%;
}
/* 段落单行显示问题 */
.item .info a {
width: 100%;
}
.item .info p {
/* height: 40px; */
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin: 8px 0px 0px 0px;
color: #333;
font-size: 15px;
}
.item .info .anchor {
font-size: 13px;
color: #9499a0;
}
.item .info .anchor:hover {
color: rgb(76, 147, 190);
}
.item .info .anchor:hover::before {
content: url(./img/widget-up.svg);
display: inline-block;
width: 15px;
height: 15px;
position: relative;
top: 1px;
}
.item .info .anchor::before {
content: url(./img/widget-up.svg);
display: inline-block;
width: 15px;
height: 15px;
position: relative;
top: 1px;
}
</style>
</head>
<body>
<div class="item">
<a class="album" href="#">
<img src="./img/03.webp" referrerpolicy="no-referrer" alt="">
</a>
<div class="info" href="#">
<a href="#">
<p>【星穹铁道】做好这3件小事,让你不花1分钱就能直接变强!</p>
</a>
<a class="anchor" href="#">
<span class="nicknam">馒头真君</span>
<span class="date">· 昨天</span>
</a>
</div>
</div>
</body>
</html>
如何实现 多行显示省略号
.item .info a {
width: 100%;
}
.item .info p {
/* height: 40px; */
overflow: hidden;
text-overflow: ellipsis;
margin: 8px 0px 0px 0px;
color: #333;
font-size: 15px;
/* 多行显示省略号 效果实现*/
/* 在webkit渲染内核浏览器的一种特殊布局方案,经常用于多行保留*/
display: -webkit-box;
/*保留2行*/
-webkit-line-clamp: 2;
/*盒子方向*/
-webkit-box-orient: vertical;
}