CSS 1.css介绍 css指的是层叠样式表(cascading style sheets) 官方文档:https://www.w3school.com.cn/css/index.asp为什么需要c
顺晟科技
2021-08-26 12:53:54
104
内联样式/行内样式:在标签内部通过style
属性设置元素样式
问题:样式只对一个标签生效,不方便维护(开发时不要使用)
内联样式表:在head
标签中的style
标签中编写样式,通过CSS
选择器选中元素并为其设置各种样式
问题:内部样式表只用于当前页面
外部样式表:在外部 CSS 文件中编写样式,通过link
标签引入外部 CSS 文件(更佳实践)
优势:外部 CSS 文件中的样式可以在多个页面中复用,同时可以利用浏览器的缓存机制,提高加载速度
元素选择器:根据标签名选中相应的元素
标签名 {声明块}
id
选择器:根据元素的id
属性值选中相应的元素(id
属性值不能重复)
#id属性值 {声明块}
类选择器:根据元素的class
属性值选中相应的元素(class
属性值可以重复,一个元素可以设置多个class
属性,使用空格隔开)
.class属性值 {声明块}
通配选择器:选中页面中的所有元素
* {声明块}
复合选择器
交集选择器:选中同时符合多个条件的元素
选择器1选择器2···选择器n {声明块}
并集选择器:同时选中多个选择器对应的元素
选择器1, 选择器2, ···, 选择器n {声明块}
关系选择器
父元素:直接包含子元素的元素子元素:直接被父元素包含的元素祖先元素:直接或间接包含后代元素的元素后代元素:直接或间接被祖先元素包含的元素兄弟元素:被相同父元素包含的元素子元素选择器:选中父元素内所有符合条件的子元素
父元素 > 子元素 {声明块}
后代元素选择器:选中元素内所有符合条件的后代元素(注意:交集选择器和后代元素选择器的区别)
祖先元素 后代元素 {声明块}
兄弟元素选择器:
选中元素之后个符合条件的兄弟元素
选择器1 + 选择器2 {声明块}
选中元素之后所有符合条件的兄弟元素
选择器1 ~ 选择器2 {声明块}
属性选择器
[属性名]:选择带有指定属性的所有元素
/* 选择带有 target 属性的所有元素 */
[target] {声明块}
[属性名=属性值]:选择带有指定属性且属性值等于指定值的所有元素(属性值可不加引号,只在其中包含符号或者空格时必须加引号)
/* 选择带有 target 属性且 target 属性等于 _blank 的所有元素 */
[target=_blank] {声明块}
[属性名~=属性值]:选择带有指定属性和且属性值包含指定值这一单词的所有元素
/* 选择带有 title 属性且 title 属性包含 title 这一单词的所有元素
选择 title="article title",不选择 title="article-title" 和 title="articletitle" */
[title~=title] {声明块}
[属性名|=属性值]:选择带有指定属性且属性值等于指定值或以指定值开头并与短横线相连的所有元素
/* 选择带有 title 属性且 title 属性等于 article 或以 article 开头并与短横线相连的所有元素
选择 title="article"、title="article-" 和 title="article-title"
不选择 title="articletitle" 和 title="article title" */
[title|=article] {声明块}
[属性名^=属性值]:选择带有指定属性且属性值以指定值开头的所有元素
/* 选择带有 title 属性且 title 属性以 article 开头的所有元素
选择 title="article title" 、 title="article-title" 和 title="articletitle" */
[title^=article] {声明块}
[属性名$=属性值]:选择带有指定属性且属性值以指定值结尾的所有元素
/* 选择带有 src 属性且属性值以 .jpeg 结尾的所有元素 */
[src$=".jpeg"] {声明块}
[属性名*=属性值]:选择带有指定属性且属性值中出现指定值的所有元素
/* 选择带有 title 属性且 title 属性值中出现 ticle 的所有元素 */
[title*=ticle] {声明块}
伪类选择器:伪类用于描述一个元素的特殊状态
:first-child
-> 选择属于父元素个子元素的所有元素:last-child
-> 选择属于父元素最后一个子元素的所有元素:nth-child(n)
-> 选择属于父元素第n
个子元素的所有元素:nth-last-child(n)
-> 选择属于父元素倒数第n
个子元素的所有元素:nth-child(2n)
/:nth-child(even)
-> 选择属于父元素偶数位子元素的所有元素:nth-child(2n+1)
/:nth-child(odd)
-> 选择属于父元素奇数位子元素的所有元素:only-child
-> 选择属于父元素子元素的所有元素:first-of-type
-> 选择其父元素个指定子元素:last-of-type
-> 选择其父元素最后一个指定子元素:nth-of-type(n)
-> 选择其父元素第n
个指定子元素:nth-last-of-type(n)
-> 选择其父元素倒数第n
个指定子元素:only-of-type
-> 选择属于父元素指定子元素的所有元素:not(选择器)
-> 选择不符合条件的所有元素a:link
-> 正常的链接(未访问的链接)a:visited
-> 已访问的链接(只能修改链接颜色,一般不用):hover
-> 选择鼠标移入的元素,用于设置鼠标移入后的效果:active
-> 选择鼠标点击的元素,用于设置鼠标点击后的效果:focus
-> 选择获取焦点的元素:root
-> 选择文档的根元素,即html
元素:empty
-> 选择没有子元素的所有元素伪元素选择器:伪元素用于描述特殊的并不真实存在于DOM
树中的元素(特殊的位置)::first-letter
-> 个字母::first-line
-> 行::selection
-> 选中的内容::before
-> 在元素的内容前添加::after
-> 在元素的内容后添加::before
和::after
需要结合CSS
的content
属性使用(CSS3
规定伪元素选择器使用双冒号,只需兼容 Webkit、Firefox 和 Opera 等浏览器时使用双冒号,要兼容IE时,建议使用CSS2
的单冒号写法)通过不同的设置方式或选择器对同一元素的同一样式设置了不同的值就会产生优先级权重问题。
发生冲突时样式由优先级权重决定1,0,0,0
> id
选择器0,1,0,0
> 属性、类和伪类选择器0,0,1,0
> 元素和伪元素选择器0,0,0,1
> 通配选择器0,0,0,0
> 继承的样式(没有权重)比较权重时需要将所有的选择器权重相加后进行比较(多个选择器权重相加和不会超过其中的更大数量级)选择器权重相加结果相同时,优先使用样式表中最后出现的样式可以在样式之后添加!important
,将该样式设为更高优先级,且无法进行修改(慎用)px
)百分比(子元素大小会随父元素大小改变)em
:相对于当前元素字体尺寸的长度单位 -> 1
em
= 1
font-size
,font-size
默认为16px
rem
:相对于根元素字体尺寸的长度单位CSS 将页面中的元素都设置为矩形的盒子,对页面的布局变成将不同的盒子摆放到不同的位置。
外边距(margin
):盒子和其它元素之间的距离
margin
可以为负值,表示向相反方向移动
默认情况下设置margin-right
不会产生效果
边框(border
)(边框属于盒子边缘,边框会影响整个盒子大小)
边框宽度border-width
(默认为3px
)
四个值(上 右 下 左)、三个值(上 左右 下)、两个值(上下 左右)、一个值(上下左右)或者单独指定某个边的宽度border-top-width
/border-bottom-width
/border-left-width
/border-right-width
border-color
(默认为黑色)边框样式border-style
(默认为none
,可选值包括dotted
/dashed
/solid
/double
/groove
/ridge
/inset
/outset
)简写:border: width color style;
或者border-top
/border-bottom
/border-left
/border-right: width color style
(空格隔开,没有顺序要求)内边距(padding
):内容区和边框之间的距离(内边距会影响整个盒子大小)内容区(content
):元素中的子元素和文本内容都在内容区中排列,大小由width
和height
两个属性或者子元素和文本内容的大小决定注意:盒子的大小或盒子可见框的大小由边框、内边距和内容区决定,盒子占用空间大小由外边距、边框、内边距和内容区决定
一个元素在其父元素中的水平方向位置由margin-left
、border-left
、padding-left
、width
、padding-right
、border-right
和margin-right
共同决定
一个元素在其父元素中的水平布局满足以下等式:
margin-left
+ border-left
+ padding-left
+ width
+ padding-right
+ border-right
+ margin-right
= 其父元素内容区宽度
auto
,则自动调整margin-right
的值(可以为负值)若margin-left
、width
和margin-right
中的某个值为auto
,则自动调整为auto
的值若width
的值为auto
时,margin-left
和margin-right
中存在值为auto
,则width
的值设置为更大,另外的值为auto
的属性值设置为0
若margin-left
和margin-right
的值均为auto
,则将margin-left
和margin-right
设置为相同的值(用于设置一个元素在其父元素中居中)注意:width
默认为auto
box-sizing
属性:用于设置盒子大小的计算方式(width
和height
的作用):
content-box
-> 默认值,width
和height
分别表示内容区的宽和高border-box
-> width
和height
分别表示盒子可见框的宽和高(边框、内边距和内容区总的宽和高)注意:IE 盒子模型和 W3C 标准盒子模型的区别在于,IE 盒子模型的width
和height
分别表示盒子可见框的宽和高(box-sizing
属性默认为border-box
),W3C 标准盒子模型的width
和height
分别表示内容区的宽和高(box-sizing
属性默认为content-box
)。
overflow
属性:用于设置内容超出内容区所占位置时溢出内容的处理方式
visible
-> 溢出hidden
-> 隐藏scroll
-> 生成横向纵向滚动条auto
-> 自动生成所需方向滚动条相邻元素的垂直方向外边距会发生重叠
兄弟元素间的垂直外边距取较大值(特殊情况:一正一负则取和,两个负值则取值较大值)子元素的上外边距会传递给父元素(影响开发,需要进行处理)
<div></div>
<div>
<div></div>
</div>
.top {
height: 100px;
background: lightgreen;
}
.outer {
width: 200px;
height: 200px;
background: skyblue;
/* 父元素 margin-top 较小 */
margin-top: 20px;
}
.inner {
width: 100px;
height: 100px;
background: lightpink;
/* 子元素 margin-top j */
margin-top: 50px;
}
padding
、border
和margin
,但不会影响垂直方向布局display
属性:用于设置元素显示方式
inline
-> 将元素设置为行内元素block
-> 将元素设置为块元素inline-block
-> 将元素设置为行内块元素(可以设置宽高但不会独占一行,慎用)table
-> 将元素设置为表格none
-> 隐藏元素,不占用位置visibility
属性:用于设置元素可见性
visible
-> 默认值,元素正常显示hidden
-> 隐藏元素,但依然占用位置outline
属性:用于设置元素的轮廓线,用法同border
属性,区别在于轮廓不会影响可见框的大小和页面的布局
box-shadow
属性:用于设置元素的阴影效果(不影响页面的布局)
box-shadow: 水平偏移量 垂直偏移量 阴影模糊半径(可选) 阴影颜色
border-radius
属性:用于设置元素圆角
border-top-left-radius
border-top-right-radius
border-bottom-left-radius
border-bottom-right-right
-> 一个值-圆角半径;两个值-椭圆长半径和短半径border-radius
-> 一个值:四个圆角半径;四个值:左上、右上、右下和左下圆角半径;两个值以"/"分隔-椭圆长半径/短半径border-radius: 50%;
:将元素设置为圆形浏览器会为元素设置一些默认样式,默认样式的存在会影响页面的布局,在开发时需要先去除默认样式
去除默认样式的方法:引入重置样式表
reset.css
-> 直接去除浏览器的默认样式normalize.css
-> 对默认样式进行统一float
属性:用于设置元素的浮动,使元素向其父元素的某一侧浮动
none
-> 默认值,元素不移动left
-> 元素向左浮动right
-> 元素向右移动元素的两个状态:
在文档流中
块元素在页面中独占一行,默认宽度是父元素的
,默认高度由内容决定行内元素只占自身大小,在页面中水平排列并自动换行,默认宽度和高度有内容决定不在文档流中(脱离文档流)浮动的特点:
浮动元素会完全脱离文档流,不再占用文档流中的位置,其后的元素会自动上移,可能被浮动元素覆盖浮动元素会向父元素的某一侧移动浮动元素在父元素的content-box
内浮动元素向父元素的某一侧移动时,不会超过之前的浮动元素浮动元素不会超过其之前的浮动的兄弟元素浮动元素不会盖住文字,文字会自动环绕在浮动元素周围简而言之,不再区分行内元素和块元素
auto
时,其高度由子元素决定,子元素设置float
属性后将会脱离文档流,导致父元素高度丢失解决方案:
BFC
(Block Formatting Context
,块级格式化上下文)clear
属性:使当前元素的左侧/右侧/两侧不允许出现浮动元素(移动当前元素以达到效果)
可选值:left
/right
/both
-> 清除左侧/右侧/两侧中较大一侧元素浮动对当前元素产生的影响
解决方案:利用伪元素在当前元素下加一个没有内容但设置了clear
属性的块元素(该伪元素位置会随子元素高度变化,父元素需要包括该伪元素,故父元素高度会随子元素高度变化)
clear-fix
类.clear-fix::before,
.clear-fix::after{
content: '';
/* table元素没有内容时不显示,且不占用布局 */
display: table;
}
.clear-fix::after {
clear: both;
}
或者
.clear-fix::after {
content: '';
display: block;
height: 0;
line-height: 0;
visibility: hidden;
clear: both;
}
position
属性;利用position
属性可以将元素放到页面的任意位置
static
-> 默认值,不开启定位,元素静止relative
-> 开启元素相对定位absolute
-> 开启元素定位fixed
-> 开启元素固定定位sticky
-> 开启元素粘滞定位特点:
开启相对定位后,若未设置偏移量则元素不会发生任何变化开启相对定位后会提升元素层级(将覆盖文档流中的其他元素)开启相对定位的元素不会脱离文档流(元素依然占据文档流中的位置)开启相对定位不会改变元素的性质(不会改变行内元素或块元素)
偏移量(offset
):定位元素与定位位置间的距离,可通过top
/bottom
/left
/right
四个属性进行设置
top
/bottom
属性 -> 用于设置定位元素上边/下边和定位位置间的距离,控制定位元素垂直方向的位置(只用一个)left
/right
属性 -> 用于设置定位元素左边/右边和定位位置间的距离,控制定位元素水平方向的距离(只用一个)定位:参照元素包含块进行定位
包含块:一般情况下是指元素最近的祖先块元素;对于开启了定位的元素,包含块指其最近的开启了定位(非static
)的祖先块元素(html
元素,又称为初始包含块)特点:
开启定位后,若未设置偏移量则元素位置不会发生变化开启定位后,元素脱离文档流开启定位后,行内元素变成块元素,高度和宽度由内容决定开启定位会提升元素层级(会覆盖文档流中的其他元素)开启定位的元素在其包含块中的水平布局满足等式:
left
+ margin-left
+ border-left
+ padding-left
+ width
+ padding-right
+ border-right
+ margin-right
+ right
= 包含块的内容区宽度
若过度约束:
若所有值均不为auto
,则自动调整margin-right
的值(可以为负值)若left
、margin-left
、width
、margin-right
和right
中的某个值为auto
,则自动调整设置为auto
的属性的值若margin-left
和margin-right
中的某个值和width
的值为auto
,则width
设置为更大,设置为auto
的属性设置为0
若left
和right
中的某个值和width
的值为auto
,则width
由内容决定,自动调整设置为auto
的属性若left
和right
的值均为auto
,则将left
和right
设置为0
若五个值均为auto
,则width
由内容决定,其余四个值都设置为0
开启定位的元素在其包含块中的垂直布局满足等式:
top
+ margin-top
+ border-top
+ padding-top
+ height
+ padding-bottom
+ border-bottom
+ margin-bottom
+ bottom
= 包含块的内容区高度
若过度约束:调整类似水平布局
粘滞定位:在到达包含块指定位置前随浏览器滚动条滚动,达到之后不再随滚动条滚动(兼容性较差,一般不用)
对同级元素设置粘性定位,则之后的元素会覆盖之前的元素
<!-- 对 h2 设置粘性定位,则第二个 h2 会覆盖个 h2 -->
<article>
<section></section>
<h2>节</h2>
<section></section>
<h2>第二节</h2>
<section></section>
</article>
对非同级元素设置粘性定位,则之后的元素会挤掉之前的元素
<!-- 对 h2 设置粘性定位,则第二个 h2 会挤掉个 h2 -->
<article>
<section>
<h2>节</h2>
<p>段落二
</p>
</section>
<section>
<h2>第二节</h2>
<p>段落一
</p>
</section>
</article>
z-index
属性 -> 整数值,用于设置元素的层级,数值越大层级越高(<font color="red">注意</font>:祖先元素不会覆盖后代元素)font-family
属性:可以直接指定多个字体样式或字体族,用逗号分隔,浏览器按先后顺序选择可用的字体样式或字体族(必须使用通用字体,避免出现电脑中没有指定字体的情况)
字体族(字体样式的类别,不是具体的样式):
serif
-> 衬线字体sans-serif
-> 非衬线字体monospace
-> 等宽字体@font-face
样式:用于下载并引入外部的字体(会影响加载速度)
@font-face{
/* 指定字体名称 */
font-family: '';
/* 字体的路径 */
src: url('');
}
图标字体:通过图片引入图标十分不灵活,因此可以将图标设置为字体,通过@font-face
样式进行引入
color
属性:前景色(通常用于设置字体颜色)
font-size
属性:字体大小
xx-small
|x-small
|small
|medium
|large
|x-large
|xx-large
像素值(px
)百分数(当前元素字体大小相对于其父元素字体大小)em
(等同于使用百分数)line-height
属性:行高,即文字占据的实际高度
px
或em
),也可以指定一个整数,表示字体大小的倍数(行高默认为字体大小的1.33
倍)行高会在字体框的上下平均分配(字体框:字体存在的格子)行间距 = 行高 - 字体大小font-weight
属性:用于设置字重(加粗)
normal
-> 默认值,不加粗bold
-> 加粗bolder
-> 比加粗更粗lighter
-> 比默认值更细100~900 -> 九个级别,400对应normal
,700对应bold
(一般不用)font-style
属性:用于设置字体风格
normal
-> 默认值,正常italic
-> 斜体font
属性:用于设置字体的相关属性(字体设置和字体大小是必选值)
font: 字重 字体风格 字体大小/行高 字体族
font-variant
属性:用于设置小型大写字母
text-transform
属性:用于设置文本大小写
none
-> 默认值,不修改大小写capitalize
-> 首字母大写uppercase
-> 全部大写lowercase
-> 全部小写text-decoration
属性:用于设置下划线、删除线和上划线
none
-> 默认值,不添加underline
-> 添加下划线line-through
-> 添加删除线overline
-> 添加上划线text-shadow
属性:用于设置文本阴影
text-shadow: 颜色 水平偏移 垂直偏移 模糊度
white-space
属性:用于设置文本中的空白
normal
-> 默认值,忽略空白pre
-> 保留文本中的所有空白,不自动换行(类似于pre
标签nowrap
-> 文本不自动换行pre-wrap
-> 保留文本中的所有空白,自动换行pre-line
-> 只保留文本中的换行符,忽略其他空白overflow-wrap
属性:用于设置文本溢出时的换行原则
normal
:默认值,单词中间不断开break-word
:文本溢出时单词中间可断开text-overflow
属性:用于设置文本溢出时的隐藏原则
clip
-> 隐藏超出部分ellipsis
-> 超出部分用省略号表示自定义字符串 -> 超出部分用自定义字符串表示text-indent
属性:用于设置段落首行缩进,可选值为长度值或百分比
text-align
属性:用于设置文本的水平对齐
left
-> 左对齐right
-> 右对齐center
-> 居中justify
-> /两端对齐vertical-align
属性:用于设置文本的垂直对齐
baseline
-> 默认值,基线对齐sub
-> 垂直对齐文本的下标super
-> 垂直对齐文本的上标top
-> 元素顶端与行中更高元素顶端对齐text-top
-> 元素顶端与父元素字体顶端对齐bottom
-> 元素顶端与行中更低元素顶端对齐text-bottom
-> 元素底端与父元素字体底端对齐middle
-> 居中(子元素中线和父元素中线对齐,并不是严格的居中)长度值或百分比 -> 设置对齐的位置word-spacing
属性:用于设置单词间距
letter-spacing
属性:用于设置字符间距
writing-mode
属性:用于设置排版模式
horizontal-tb
-> 左对齐则内容自左向右,右对齐则相反,下一行位于上一行下方vertical-rl
-> 左对齐则内容自上而下,下一行位于上一行左侧,右对齐则相反vertical-lr
-> 左对齐则内容自上而下,下一行位于上一行右侧,右对齐则相反background-color
属性:用于设置背景颜色
background-image
属性:用于设置背景图片
background-clip
属性:用于设置背景范围
border-box
-> 默认值,背景显示范围包括边框、内边距和内容区padding-box
-> 背景显示范围包括内边距和内容区content-box
-> 背景显示范围只包括内容区text
-> 背景裁剪成文字前景色background-repeat
属性:用于设置背景图片重复方式
repeat
-> 默认值,背景图片重复显示repeat-x
-> 仅沿x
轴方向重复显示repeat-y
-> 仅沿y
轴方向重复显示no-repeat
-> 不重复显示background-position
属性:用于设置背景图片显示位置
top
/bottom
/left
/right
/center
几个位置的组合设置背景图片的位置(只写一个则默认第二个为center
)或者通过垂直偏移量和水平偏移量设置背景图片的位置background-origin
属性:用于设置背景图片显示位置偏移量的原点(注意:若background-attachment
属性设置为fixed
,则这一属性不生效)
border-box
-> 偏移量从边框开始计算padding-box
-> 默认值,偏移量从内边距开始计算content-box
-> 偏移量从内容区开始计算background-size
属性:用于设置背景图片的尺寸
auto
则保持图片比例不变,只写一个则第二个默认为auto
)cover
-> 图片比例不变,背景图片铺满元素contain
-> 图片比例不变,在元素中完整显示背景图片background-attachment
属性:用于设置背景图片是否随元素移动
scroll
-> 默认值,背景图片随元素移动fixed
-> 背景图片固定,不随元素移动注意:后设置的背景置于底层
background-image: url(image1.png), url(image2.png);
或者
background: url(image1.png) left 50% no-repeat,
url(image2.png) right no-repeat red;
background
属性:用于设置背景图片的所有属性
background: red url(image.png) no-repeat right 50% fixed;
<font color="red">注意</font>:没有顺序要求,但是background-size
属性必须写在background-position
属性之后,并用"/"隔开,background-clip
属性必须写在background-origin
属性之后
线性渐变(linear-gradient
属性):颜色沿一条直线发生变化
linear-gradient(方向, 颜色)
方向:to top
/to bottom
/to left
/to right
;整数deg
(度数);小数(圈)
颜色:可以指定多个,以逗号隔开;默认情况下多个颜色平均分布,可以指定颜色和占比,以空格隔开,指定颜色开始颜色开始渐变的位置repeat-linear-gradient
(重复显示的线性渐变)
径向渐变(radial-gradient
属性):颜色沿中心向四周发生变化
radial-gradient(尺寸 at 位置, 颜色)
尺寸:默认由元素形状决定;circle
/ellipse
-> 圆形/椭圆;closest-side
/farthest-side
/closest-circle
/farthest-circle
-> 近边/远边/近角/远角
位置:top
/bottom
/left
/right
/center
将页面中的多个图标放在一张图中,为background-position
属性设置不同的值以显示不同的图标
background-position
属性设置不同的值,以显示每个小图片优点:节省空间,只需一次加载,同时可以防止出现闪烁BFC(Block Formatting Context)直译为块级格式化上下文,是一个只有Block-level Box
参与的独立渲染区域,规定了内部的元素的布局方式,同时,BFC 内部的元素与外部元素不会互相影响。
Box
是 CSS 布局的对象和基本单位。一个页面是由多个Box
组成的,元素的类型和display
属性决定了其Box
类型,不同类型的Box
会参与不同的格式化上下文(Formatting Context),而不同格式化上下文中的Box
内的元素也会以不同的方式渲染。
Block-level Box
:display
属性为block
、list-item
或者table
的元素,会生成Block-level Box
,并参与 Block Formatting Context。Inline-level Box
:display
属性为inline
、inline-block
或者inline-table
的元素,会生成Inline-level Box
,并参与 Inline Formatting Context。Formatting Context 是 CSS2.1 规范中的概念,是页面中的一块渲染区域,并且有一套渲染规则,决定了其中子元素如何定位以及和其他元素关系和相互作用
Box
会在垂直方向依次放置;Box
垂直方向的距离由margin
决定。同一个 BFC 内的两个相邻Box
的垂直方向margin
会发生重叠;每个Box
的margin box
的左边,与包含块的border box
的左边接触(即使存在浮动);BFC 在页面上是一个独立的区域,它内部的元素的布局不会和外部元素的布局产生相互影响;开启 BFC 的元素不会与float box
重叠;开启 BFC 的元素,可以包含浮动的子元素,计算高度时,浮动元素也参与计算。overflow
属性设置为不是visible
的元素浮动元素,元素的float
属性不是none
定位元素,元素的position
属性不是static
或者relative
内联块元素,元素的display
属性为inline-block
;弹性元素,元素的display
属性为flex
或者inline-flex
;网格元素,元素的display
属性为grid
或者inline-grid
;流式布局根元素,元素的display
属性为flow-root
;HTML 默认的某些表格元素。避免margin
重叠
根据布局规则第二点,两个p
元素垂直方向margin
会发生重叠,将第二个p
元素放置于一个新的 BFC 中,可以避免margin
发生重叠。
<div>
<h3>margin 重叠</h3>
<p>看看我的 margin 是多少</p>
<p>看看我的 margin 又是多少</p>
</div>
<div>
<h3>解决方案</h3>
<p>看看我的 margin 是多少</p>
<div>
<p>看看我的 margin 又是多少</p>
</div>
</div>
.problem p {
width: 200px;
color: deeppink;
background-color: skyblue;
line-height: 100px;
text-align: center;
margin: 30px;
}
.solution p {
width: 200px;
color: deeppink;
background-color: skyblue;
line-height: 100px;
text-align: center;
margin: 30px;
}
.solution div {
overflow: hidden;
}
自适应两栏布局
根据布局规则的第三点和第四点,使用浮动的两栏布局会发生覆盖,将右侧div
成为单独的 BFC,可以避免覆盖,实现自适应两栏布局。
<div>
<div>LEFT</div>
<div>RIGHT</div>
</div>
<div>
<div>LEFT</div>
<div>RIGHT</div>
</div>
.box {
margin: 20px;
}
.problem-left {
width: 100px;
height: 150px;
float: left;
background: pink;
text-align: center;
line-height: 150px;
font-size: 20px;
}
.problem-right {
height: 300px;
background: skyblue;
text-align: center;
line-height: 300px;
font-size: 40px;
}
.solution-left {
width: 100px;
height: 150px;
float: left;
background: pink;
text-align: center;
line-height: 150px;
font-size: 20px;
}
.solution-right {
height: 300px;
background: skyblue;
text-align: center;
line-height: 300px;
font-size: 40px;
overflow: hidden;
}
<div>
<div></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
</div>
.parent {
border: 5px solid rgb(91, 243, 30);
width: 300px;
}
.problem {
margin-bottom: 200px;
}
.solution {
overflow: hidden;
}
.child {
border: 5px solid rgb(233, 250, 84);
width: 100px;
height: 100px;
float: left;
}
09
2022-11
09
2022-11
09
2022-11
09
2022-11
19
2022-10
19
2022-10