前言
- 本篇中讲述了:
- css的引入方式
- css的常用单位
- css的语法
- css的样式
- 选择器
- css的三大特性
- 盒模型
- 浮动
- 定位
- flex弹性布局
- 基线对齐
- 字体图标
- BFC块级格式上下文
- 其他问题
- 如果有任何问题都可以留言给我,我看到了就会回复,如果我解决不了也可以一起探讨、学习。如果认为有任何错误都还请您不吝赐教,帮我指正,在下万分感谢。希望今后能和大家共同学习、进步。
- 下一篇会尽快更新,已经写好的文章也会在今后随着理解加深或者加入一些图解而断断续续的进行修改。
- 如果觉得这篇文章对您有帮助,还请点个赞支持一下,谢谢大家!
- 欢迎转载,注明出处即可。
CSS是什么?
- Cascading Style Sheets【层叠样式表】
- 是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。主要用来设计网页的样式,美化网页,静态或动态的修饰页面元素的样式
CSS的引入方式
【行内样式】
- 优先级最高,可以覆盖同意元素的其他引入的样式
- 作为标签的属性存在
- 代码量大,分离度较低,维护困难,冗余度高
【内嵌】
- 写在本HTML当中的head中的style标签当中
- 读取速度相较于两种导入比较快,同步的
【外链导入】
- 外部单独创建一个css样式表,通过link标签引入
- 异步加载的,而且是等到同步任务完成后,再去渲染加载回来的外链样式文件
【导入式】
- 在style标签内 使用
@import 文件路径来引入
- 还可在外联样式表
.css文件中在引入样式表,不过需要放在整个代码的最上面,不然会被后来的重复样式覆盖
CSS的常用单位
绝对长度单位
相对长度单位
em
- 在 font-size 中使用是相对于父元素的字体大小,在其他属性中使用是相对于自身的字体大小
rem 根元素【html】的字体大小
vw 视窗宽度的1%
vh 视窗高度的1%
视口
作用
- 在页面结构中,元数据部分有一条viewport,这一条就是为了在移动端浏览页面的时候,页面能够跟随设备的缩小而缩小。
<meta name="viewport" content="width=device-width, initial-scale=1.0">
属性
width=device-width 页面宽度等于设备宽度
user-scalable=no 禁止缩放
initial-scale=1.0 初始缩放值为1.0
maximum-scale=1.0 最大缩放值为1.0
minimum-scale=1.0 最小缩放值为1.0
CSS的语法
元素的划分
-
块级元素
-
行内元素
- 写宽高不起作用,其大小由其内部内容撑开并决定。
- 共占一行
- 【特殊行内元素】 行内块元素
-
【判断方式】
- 与行内元素放在一起,若测试的元素没有和行内元素共占一行,则一定是块级元素
- 若在一行,则通过改变测试元素宽高,来判断是【不变:行内元素】 还是 【变了:行内块元素】
-
元素标签的总结
-
行内元素:
- span、a、b、strong、i、em、s、del、u、ins
-
块级元素:
- div、h1 - h6、p、ul、li、ol、dl、dt、dd
-
行内块:
元素特性的转换display
-
转换为块级元素
display:block
- 【特性】
- 不设置宽度就会充满其父元素
- 不设置高度,就由内容能撑开多少决定
-
转换为行内元素【基本不使用】
-
转换为行内块元素
-
隐藏该元素
display:none
visibility:hidden 【可视程度】
opacity:% 【透明度】
z-index 【定位的元素可以以此控制层级】
- margin【控制无内容容器离开视口(无内容适用)】
- 宽高【减为0(无内容适用)】
CSS样式
清除默认样式
-
清除全局元素的margin和padding
<style>
*{
margin:0;
padding:0;
}
</style>
-
清除列表的默认样式
<style>
ul,li{
list-style:none;
}
</style>
-
清除a标签的默认样式
<style>
a{
text-decoration:none;
font-size:100px;
color:#333;
}
</style>
常用样式
文字
-
字体font-family
-
字号font-size
-
颜色color
-
粗细font-weight
-
倾斜&正常font-style
-
块级元素快速水平居中
-
行高line-height
-
高度height
-
文字对齐text-align
-
首行缩进
-
使用案例
<style>
body{
<!-- 可设置多种字体,用逗号间隔,如果没有字库就顺延使用,都没有就使用默认 -->
font-family:"Times New Roman",Times,serif;
font-family:"宋体","楷书","微软雅黑";
font-size:10px;
//正常
//font-weight:400px;
font-weight:normal;
//加粗
//font-weight:700px;
font-weight:bold;
//更粗
//font-weight:900px;
font-weight:bolder;
//倾斜&恢复正常
font-style:italic;font-style:normal;
color:#eee;
}
div{
<!-- 快速水平居中 -->
margin:0 auto;
}
#jvzhong{
height:300px;
line-height:300px;
}
p{
line-height:10px;
text-align:center;
// text-align:left;
// text-align:right;
}
</style>
<body>
<p>
这是一段文字
</p>
<div>块元素水平居中</div>
<div id="jvzhong">
<p>
垂直居中
</p>
</div>
</body>
边框border
border:宽度 样式 颜色;
- 还可以单独控制
border-width【单独控制宽度】
border-left-width【单独控制每条边宽度】
border-style 【单独控制样式】
border-color 【单独控制颜色】
<style>
div{
border:2px solid black;
border-width:10px;
border-left-width:10px;
border-style:dotted;
border-color:pink;
}
</style>
overflow
-
定义
-
overflow:hidden
-
overflow:auto
- 设置内容超出后自动出现滚动条,如果没超出,就不会出现滚动条
-
overflow:scroll
overflow:scroll 控制水平和垂直的滚动条
<style>
.text{
width: 200px;
height: 200px;
overflow: scroll;
}
</style>
<body>
<div class="text">
<div style="width:100px;">
<p>我是文本段我是文本段我是文本段</p>
</div>
</div>
<body>
overflow-y:scroll 控制垂直方向上的滚动条
<style>
.text{
width: 200px;
height: 200px;
overflow-y: scroll;
}
</style>
<body>
<div class="text">
<div style="width:100px;">
<p>我是文本段我是文本段我是文本段</p>
</div>
</div>
<body>
overflow-x:scroll 控制水平方向上的滚动条
<style>
.text{
width: 200px;
height: 200px;
overflow-x: scroll;
}
</style>
<body>
<div class="text">
<div style="width:100px;">
<p>我是文本段我是文本段我是文本段</p>
</div>
</div>
<body>
background
选择器
权重
- 同权重,看执行顺序
- 权重不同看权重
- 组合选择器权重是按照多个基础的权重相加
div>span权重2
.class>span权重11
div>span,div>span若想选择两个同级的子代,就是这样两个独立的整体使用【权重为4】
通配符选择器 *【所有元素】
- 权重为
0
- 范围最广,使用最少,通常用于清除全局默认样式
<style>
*{
margin:0;
padding:0;
}
</style>
标签选择器 【指定的标签】
<style>
ul{
list-style:none;
}
</style>
类选择器 .【指定的类】
- 权重为
10
- 范围为
选中class相同的所有标签
- 同一个标签可以有多个类名,但是中间要用空格隔开
<style>
.class{
margin:0;
padding:0;
}
</style>
<body>
<div class='class class1 class2'></div>
</body>
属性选择器 []【指定的含有某属性的元素】
- 权重为
10
- 范围为
选中所有含有此属性的元素
选中所有含有此【属性名&属性值】的元素
选中所有含有此【属性名&属性值中以某个字母开头的】的元素
选中所有含有此【属性名&属性值中以某个字母结尾的】的元素
- 在多个类名时,以某个字母开头去匹配的就是
第一个类名的开头,以某个字母结尾去匹配的就是最后一个类名的结尾
选中所有含有此【属性名&属性值中包含某个字母的】的元素
<style>
[index]{
color:red;
}
[index=index1]{
color:blue;
}
[class^=a]{
color:green;
}
[class$=a]{
color:orange;
}
[class*=pin]{
color:pink;
}
[class*=a]{
color:black;
}
</style>
<body>
<div index='index1'>index1</div>
<div class='apple'>apple</div>
<div class='banana'>banana</div>
<div class='pineapple'>pineapple</div>
<div class='orange a b c'>orange</div>
</body>
id选择器 #【指定的id】
- 权重为
100
- 范围为
选中同一种id的标签
- id是唯一的,同一个HTML页面中不允许重名
<style>
#id{
color:porple;
}
</style>
<body>
<div id='id'>id</div>
</body>
子选择器 >【指定的子代元素】
- 权重为
没权重,根据不同的基础选择器的搭配不同
- 范围为
选中符合我们所需父子关系的所有元素
> 两边所有基础选择器自选使用
div>span权重2
.class>span权重11
div>span,div>span若想选择两个同级的子代,就是这样两个独立的整体使用
<style>
#id>span{
color:porple;
}
</style>
<body>
<div id='id' class='class';>
<span>span</span>
<p>p</p>
</div>
</body>
后代选择器 空格【指定的所有后代元素】
- 权重为
没权重,根据不同的基础选择器的搭配不同
- 范围为
选中父元素中所有符合我们所需的所有后代元素【子、孙、曾孙】
空格 两边所有基础选择器自选使用
<style>
#id span{
color:porple;
}
</style>
<body>
<div id='id' class='class';>
<span>span1</span>
<p>p
<span>span2</span>
</p>
</div>
</body>
分组选择器,
- 权重为
每个基础元素各自的权重【各是各的不影响】, 以逗号做分割,去计算某个元素权重之和
.div1,.div2权重为10【按照.div单独的权重】
.main>.box1,.main>box2权重为20【按照.main>.box1单独的权重】
- 范围为
选择多个我们所需的元素
- 可以将
公用的样式提取出来,降低代码冗余,精简代码
- 示例
<style>
div,span{
....
}
.main>.box1,.main>box2{
}
</style>
交集选择器 没符号链接
- 权重为
没权重,选择器组合之和
- 范围为
选中同时具有多个名字元素
- 选择器和选择器紧紧相连,如
div#id span.span .p.content
<style>
div#id{
color:porple;
}
span.span{
color:porple;
}
.p.content{
color:porple;
}
</style>
<body>
<div id='id' class='class'>
<span class='span'>span</span>
<p class='p content'> p</p>
</div>
</body>
相邻兄弟选择器 +
- 权重为
没权重,选择器组合之和
- 范围为
选中页面中所有与【某个标签(坐标标签)】相邻的【某个标签(目标标签)】,不向上找
<style>
h4+p{
background-color:porple;
}
</style>
<body>
<div id='id' class='class'>
<p> p0</p>
<h4 >h4</h4>
<p > p1</p>
<p > p2</p>
<p > p3</p>
<h4 >h4</h4>
<p > p1</p>
<p > p2</p>
<p > p3</p>
<h4 >h4</h4>
<p > p1</p>
<p > p2</p>
<p > p3</p>
</div>
</body>
通用兄弟选择器 ~
- 权重为
没权重,选择器组合之和
- 范围为
选中页面中所有是【某个标签(坐标标签)】的所有【某种兄弟标签(目标标签)】,不论是否相邻,也不向上找
<style>
h4~p{
background-color:porple;
}
</style>
<body>
<div id='id' class='class'>
<p> p0</p>
<h4 >h4</h4>
<p > p1</p>
<p > p2</p>
<p > p3</p>
<h4 >h4</h4>
<p > p1</p>
<p > p2</p>
<p > p3</p>
<h4 >h4</h4>
<p > p1</p>
<p > p2</p>
<p > p3</p>
</div>
</body>
伪类选择器 :
- 伪元素用于设置元素指定部分的样式
-
a:link a:visited a:hover a:active 常用伪类选择器
- 是按照特定顺序使用的【爱恨原则lv(love) ha(hate)】
a:link a:visited a:hover a:active
- 权重为
伪类本身10,组合权重相加
- 范围为
我们指定的元素
<style>
a:link{
color:red;
}
a:visited{
color:pink;
}
a:hover{
color:orange;
}
a:active{
color:black;
}
</style>
<body>
<div id='id' class='class'>
<a href="https://www.baidu.com">百度</a>
</div>
</body>
-
:not() 排除选择器
- 权重为
伪类本身10,组合权重相加
- 范围为
选中页面中所有【除了要排除的元素】之外的元素
<style>
div :not(p){
background-color:porple;
}
</style>
<body>
<div id='id' class='class'>
<p > p1</p>
<h4 >h4</h4>
<div>
<p>p2</p>
</div>
</div>
</body>
-
:only-child ‘独生子’选择器
- 权重为
伪类本身10,组合权重相加
- 范围为
选中页面中所有【只有一个子元素】的元素
<style>
div:only-child{
background-color:porple;
}
</style>
<body>
<div id='id' class='class'>
<p> p1</p>
<h4 >h4</h4>
<div>
<p>p2</p>
</div>
</div>
</body>
-
:nth-child() ‘特定行’选择器
- 权重为
伪类本身10,组合权重相加
- 范围为
选中页面中【我们指定的元素行的元素】
- 数字
odd 所有奇数行 或 2n+1
even 所有偶数行 或 2n
?n 用一些方程、倍数等选中特定行
-
合并用法
其他选择器:nth-child(第一个) 父元素中的符合第一个选择器又符合行数的那个元素,如果不是那就选不中。
<style>
.id :nth-child(3n+1){
background-color:porple;
}
</style>
<body>
<div id='id' class='class'>
<p > p1</p>
<h4 h4 >h4</h4>
<div>
<p>p2</p>
</div>
<p>p2</p>
</div>
</body>
-
:first-child() ‘快速选中第一个子元素’选择器
- 权重为
伪类本身10,组合权重相加
- 范围为
选中页面中【我们指定的元素的第一个子元素】
<style>
.id :first-child(){
background-color:porple;
}
</style>
<body>
<div id='id' class='class'>
<p > p1</p>
<h4 >h4</h4>
<div>
<p>p2</p>
</div>
</div>
</body>
-
:last-child() ‘快速选中最后一个子元素’选择器
- 权重为
伪类本身10,组合权重相加
- 范围为
选中页面中【我们指定的元素的最后一个子元素】
<style>
.id :last-child(){
background-color:porple;
}
</style>
<body>
<div id='id' class='class'>
<p > p1</p>
<h4 >h4</h4>
<div>
<p>p2</p>
</div>
</div>
</body>
-
:nth-last-child() ‘倒序’选择器
- 权重为
伪类本身10,组合权重相加
- 范围为
选中页面中【我们指定的元素的最后一个子元素】
<style>
.id :nth-last-child(3){
background-color:porple;
}
</style>
<body>
<div id='id' class='class'>
<p > p1</p>
<h4 >h4</h4>
<div>
<p>p2</p>
</div>
</div>
</body>
-
:nth-of-type() ‘特定类型’选择器
- 权重为
伪类本身10,组合权重相加
- 范围为
选中页面某父元素中【我们指定类型的元素的第几个】
-
合并用法
其他选择器:nth-last-of-type(第几个) 父元素中的倒序第几个符合类型的那个元素。【first正序】
其他选择器:first-of-type 父元素中的第一个符合类型的那个元素。
其他选择器:last-of-type 父元素中的最后一个符合类型的那个元素。
<style>
.id :nth-child(3n+1){
background-color:porple;
}
</style>
<body>
<div id='id' class='class'>
<p > p1</p>
<h4 h4 >h4</h4>
<div>
<p>p2</p>
</div>
<p>p2</p>
</div>
</body>
CSS的三大特性
继承性
- 某些元素并没有设置某些属性,但是可以继承他祖先元素的属性
层叠性
- 对同一个元素同一个属性设置了不同的属性值,css处理这种冲突的能力,就叫做重叠性
-
【处理方式】
- 首先看权重
- 权重不同,看谁的权重大就听谁的
- 权重相同,则按照代码执行顺序来定
优先级【权重】
盒模型
盒模型的组成部分
content:主要内容区域
padding:元素盒子与内容直接的内填充
border:元素盒子的边框
margin:元素与元素之间的距离

计算盒子的总大小
总盒子的宽度=content的width+ 2*padding+2*border
总盒子的高度=content的height+ 2*padding+2*border
标准盒模型
- 标准盒模型:
box-sizing:content-box;
- 在标准盒模型中,宽和高指的是
content的宽和高

IE盒模型
- IE盒模型:
box-sizing: border-box;
- 在IE盒模型中,宽和高指的是
content+padding+border总盒子的宽和高

常用属性
-
width 宽度
max-width 最大宽度
min-width 最小宽度
<style>
p{
min-width:120px;
}
</style>
<body>
<p>我是内容我是内容我是内容我是内容我是内容我是内容</p>
</body>
-
height 高度
max-height 最大高度
min-height 最小高度
<style>
p{
min-height:120px;
}
</style>
<body>
<p>我是内容我是内容我是内容我是内容我是内容我是内容</p>
</body>
-
border 边框
- 除了使用复合样式外,单独方向的样式都可以单独设置,也可以单个值,两个值,三个值,四个值来控制,规律与padding一致。
border-style 边框样式
<style>
.main{
border-style: groove;
border-top-style: dashed;
}
</style>
border-color 边框颜色
<style>
.main{
border-color: teal;
border-right-color:tomato ;
}
</style>
border-width 边框粗细
<style>
.main{
border-width: 10px;
border-top-width: 20px;
}
</style>
border 边框复合样式
<style>
.main{
border: 30px dashed forestgreen;
}
</style>
-
padding、margin 内边距、外边距
浮动
float 浮动值
特点
- 脱离文档流,“ 不占位置 ”,浮动以后元素会一直向父元素的最上方移动,直到遇到父元素的边框或者其他的浮动元素,会停止移动。
- 一般会配合一个父级元素,使用浮动位置是相对于父级元素的
- 在正常文档流中,块级元素不设置宽高,默认会撑满父级元素;但一旦设置浮动脱离文档流,就
失去了所继承的宽高,转而由自身内容所决定
- 行内元素不可设置宽高,由自身内容决定;但一旦设置浮动,则可以设置宽高,会起作用。
- 使用浮动,可以实现文字环绕,除了图文混排,不建议使用浮动
- 一浮全浮,多个元素,如果要在一行显示,就把这些元素都设置为浮动
可能会造成的问题
-
元素浮动导致的父元素高度塌陷的问题:
-
原因
- 父元素在文档流中高度默认是被子元素撑开的,当子元素脱离文档流以后,将无法撑起父元素的高度,也就会导致父元素的高度塌陷。父元素的高度一旦塌陷, 所有标准流中元素的位置将会上移,导致整个页面的布局混乱
-
解决办法
-
给浮动元素的父元素设置高度
-
给浮动元素的父元素加overflow:hidden样式
<style>
.contain {
background-color: pink;
overflow: hidden;
}
.contain>.last,.contain>.box1{
width: 100px;
height: 100px;
background-color: green;
float: left;
}
</style>
<body>
<div class="contain">
<div class="box1">aaaa</div>
<div class="last">bbbbb</div>
</div>
</body>
-
添加块级元素并设置clear样式
- 在浮动元素的父元素中,给浮动元素的后面加一个
块级元素,然后给这个块级元素设置一个clear样式,此样式的作用为:消除"左浮动元素"、"右浮动元素"或"两个浮动元素一起"的由于使用浮动所造成的影响
弊端:需要添加多余的结构以及样式
<style>
.last{
clear: both;
}
</style>
<body>
<div class="contain">
<span class="box1"></span>
<div class="last"></div>
</div>
</body>
-
快捷固定样式
- 有一个固定的几条样式,给浮动元素的父级元素加一个类名,专门用来使用这几条样式,就可以消除浮动造成的不良影响。【此方式相当于使用
伪元素 ,给浮动元素后面添加了一个具有可以请除浮动样式的块级元素,而不是在结构中真的加一个块级元素。【是更加完善的第三种方法】】
<style>
.clearfix::after{
content: "";
font-size: 200px;
display: block;
border-top-style: dashed;
height: 0;
visibility: hidden;
clear: both;
}
.clearfix{
*zoom:1;
}
</style>
```
定位
static 静态定位
- 默认值,即没有定位,元素出现在正常的文档流中。
- top, bottom, left, right,z-index 声明不生效
relative 相对定位
absolute 绝对定位
fixed 固定定位
层级
其他
-
如何让一个元素在整个屏幕或者是一个盒子中水平垂直居中
- 给元素添加定位
position:absolute;
left:50%;
top:50%;
margin-left:负的盒子宽的一半;
margin-top:负的盒子高度的一半;
<style>
body{
height: 800px;
}
.outer{
width: 100%;
height: 100%;
position: relative;
}
.center{
width: 100px;
height: 100px;
background-color: tomato;
position: absolute;
top: 50%;
left: 50%;
margin-top: -50px;
margin-left: -50px;
}
</style>
<div class="outer">
<div class="center">
div
</div>
</div>
flex弹性布局
兼容性
- pc端IE10及以上放心使用,移动端直接用。

传统布局
- 传统布局基于盒模型,通过position定位+float浮动+display属性进行调整。这样实际上不是很方便,比如垂直居中就不是很方便
弹性布局
- 弹性布局可以为盒状模型提供最大的灵活性
display:flex; 代表的是块级
display:inline-flex; 代表的是行内块
- 设为Flex布局以后,子元素的float、clear和vertical-align属性将失效!
- 容器和项目: 一旦给某个元素设置了flex布局,该元素就变成了
flex容器,容器的所有子元素,都自动成为容器的成员,被称为 项目
- 两根轴: 默认为水平的主轴,和垂直的交叉轴【侧轴】
- 主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;
- 交叉轴的开始位置叫做cross start,结束位置叫做cross end。

容器
- 一旦给某个元素设置了flex布局,该元素就变成了
flex容器
容器的属性
-
控制主轴方向 flex-direction
- 设置后,项目会按照指定的容器主轴方向排列
- 默认为横向【从左到右】

<style>
div{
display:flex;
flex-direction:row;
}
</style>
<body>
<ul class="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
</body>
-
换行 flex-wrap
- 设置后,项目会在沿主轴方向充满容器后换行

- 默认为不换行
<style>
.list{
display:flex;
flex-direction:row;
flex-wrap:wrap;
}
</style>
<body>
<ul class="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
</body>
-
主轴&换行 flex-flow【复合属性】
- 第一个值代表设置主轴方向
- 第二个值代表设置是否换行
- 两个值空格隔开
<style>
.list{
display:flex;
flex-flow:column wrap;
}
</style>
<body>
<ul class="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
</body>
-
控制项目在主轴方向的对齐方式 justify-content【常用】
center 在主轴居中
flex-start对齐主轴起始端
flex-end对齐主轴结束端
space-between项目在容器主轴方向两端对齐
space-around在主轴上,每个项目间的间距是项目距离容器边框的距离的二倍

space-evenly在主轴上,每个项目间的间距与项目距离容器边框的距离相等

<style>
.list{
display:flex;
justify-content:space-between;
}
</style>
<body>
<ul class="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
</body>
-
控制项目在交叉轴方向的对齐方式 align-items【常用】
center 在交叉轴居中
flex-start对齐交叉轴起始端
flex-end对齐交叉轴结束端
stretch项目充满整个交叉轴【不常用】
- 【若项目在交叉轴上所占的比例不写,或设为auto,则它将占满整个交叉轴】
baseline 项目的第一行文字的基线对齐

<style>
.list{
display:flex;
flex-wrap:nowrap;
justify-content:center;
align-items:center;
}
</style>
<body>
<ul class="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
</body>
-
控制项目在交叉轴方向的对齐方式 align-content【换行导致多根轴线前提下】
center 在交叉轴居中
flex-start对齐交叉轴起始端
flex-end对齐交叉轴结束端
space-between多个主轴项目在容器交叉轴方向两端对齐
space-around在交叉轴上,【两个主轴项目】间的【交叉轴间距】是【其中一个主轴项目】在【交叉轴上】距离容器边框的距离的二倍
stretch项目充满整个交叉轴【不常用】
- 【若项目在交叉轴上所占的比例不写,或设为auto,则它将占满整个交叉轴】
<style>
.list{
display:flex;
flex-wrap:wrap;
justify-content:space-between;
align-content:space-between;
}
</style>
<body>
<ul class="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
</body>
项目
- 容器的所有子元素,都自动成为容器的成员,被称为
项目
项目的属性
-
项目的排列顺序 order
- 数值越小,排列越靠前,默认为0

-
项目的放大比例 flex-grow
- 默认为0,即如果存在剩余空间,也不放大
- 若都设置为1,则它们将等分剩余空间(如果有的话)
- 若其中一个为2,则比其他项目大一倍

-
项目的缩小比例 flex-shrink
- 默认为1,当空间不足时,所有项目都将等比例缩小
- 若一个设置为0,当空间不足时,其余都缩小,这一个不缩小
- 无负值

-
项目占主轴空间 flex-basis
- 定义了在分配多余空间之前,项目占据的主轴空间(main size)
- 默认为auto,及项目本身的大小,也可以设置为固定值
- 浏览器根据这个属性,计算主轴是否有多余空间。
-
放大、缩小、占主轴空间 flex【复合属性】
flex:0 1 auto;【默认值】
flex:1;均分宽度
- 定义了在分配多余空间之前,项目占据的主轴空间(main size)
- 默认为auto,及项目本身的大小,也可以设置为固定值
- 浏览器根据这个属性,计算主轴是否有多余空间。
基线对齐
vertical-align 基线对齐

vertical-align:top; 顶线对齐
vertical-align:middle; 中线对齐
vertical-align:baseline; 基线对齐
vertical-align:bottom; 底线对齐
字体图标
- 实际上相当于加载文字,相较于图片不会发很多http请求并耗费很多资源加载图片
- 实际上是用样式实现的图标
- iconfont 阿里巴巴矢量图标库
-
作为网络资源使用
- 在图标库找到需要的图标,单个或者多个,分别或者整体生成在线链接
- 写一个容器,设置对应类名
- 将对应类名的样式表引入,在地址前面加http:
<link rel="stylesheet" href="http://at.alicdn.com/t/font_2558123_r4qonyni5e.css">
<style>
.iconfont{
color: blue;
font-size:20px;
}
</style>
<body>
<span class="iconfont icon-buganxingqu"></span>
</body>
-
作为本地资源使用
- 在图标库找到需要的图标,单个或者多个,分别或者整体生成包含样式表和字体文件的压缩包,下载的到本地
- 将样式表和字体文件导入到项目中
- 写一个容器,设置对应类名
- 将对应类名的样式表引入
<link rel="stylesheet" href="./CSS/iconfont.css">
<style>
.iconfont{
color: blue;
font-size:20px;
}
</style>
<body>
<span class="iconfont icon-buganxingqu"></span>
</body>
BFC(Block Formatting Contexts)【块级格式上下文】
- 它是一块独立的渲染区域 ,它规定了在该区域中,常规流块盒的布局。
- 不同的BFC它们在进行渲染时互不干扰。
规则
- 常规流块盒,在水平方向上,必须撑满包含块 (继承父元素的宽度)
- 常规流块盒,在排列方式上,是上下排列(块级元素的特点)
- 常规流块盒,如果无缝相邻,则进行外边距合并(外边距穿透,“一起下掉”)
- 常规流块盒的自动高度和摆放位置,会无视浮动元素。
BFC产生的条件
- 根元素:html
- 浮动和定位的元素【固定和绝对定位】
- overflow不等于visible
- display 为以下其中之一的值 inline-block,table-cell,table-caption;
常见的问题
- margin值穿透
- 浮动元素造成父盒子高度塌陷
其他问题
图片在父元素中会产生的一些问题【底部间隔】
- 为了解决图片在盒子中,底部有一个间隔的问题
- 解决办法
- 给图片转换成块元素 【多用】
- 给【图片的父元素】的字体大小设置为0 【会影响盒子中的其他文本元素】
- vertical-align:top; 改变基线对齐为top
margin值穿透:【只存在于margin-top】
-
情景
- 有一个大盒子里面包含小盒子,若想让小盒子离大盒子的顶部有一定的距离。就可以给小盒子设置margin-top属性,使其远离大盒子顶部。
-
实际状况
- 但如果大盒子没有设置padding-top 或者是border-top,直接给小盒子设置margin-top,大盒子会跟着小盒子一起向下移动,这个现象就是margin值穿透问题。
-
解决方法
- 给大盒子加padding
<style>
.box1 {
width: 100px;
height: 100px;
background-color: pink;
padding-top: 1px;
box-sizing: border-box;
}
.box2 {
width: 30px;
height: 30px;
margin-top: 29px;
background-color: purple;
}
</style>
</body>
<div class="box1">
<div class="box2"></div>
</div>
</body>
- 给大盒子加一个透明的上边框
<style>
.box1{
width: 100px;
height: 100px;
background-color:pink ;
border: 1px solid transparent;
}
.box2{
width: 30px;
height: 30px;
margin-top: 30px;
background-color: purple;
}
</style>
</body>
<div class="box1">
<div class="box2"></div>
</div>
</body>
- 溢出隐藏
<style>
.box1{
width: 100px;
height: 100px;
background-color:pink ;
overflow:hidden;
}
.box2{
width: 30px;
height: 30px;
margin-top: 30px;
background-color: purple;
}
</style>
</body>
<div class="box1">
<div class="box2"></div>
</div>
</body>
margin值合并
-
情景
- 有两个兄弟元素:bro1,bro2垂直排列,想要给bro1设置margin-bottom:30px; 再给bro2设置margin-top:100px;两元素的垂直间隔会是多少?
-
实际状况
- 这两个元素之间的距离并不是两者之和,而是取最大的那个值。
-
解决方法
- 只给其中一个元素设置全部的距离
<style>
.bro1{
width: 100px;
height: 100px;
}
.bro1{
width: 100px;
height: 100px;
margin-top: 100px;
}
</style>
</body>
<div class="bro1"></div>
<div class="bro2"></div>
</body>
行内块元素的自带间隔【左右间隔】
- 行内块元素在同一行中,左右自带了一些间隔,是由于代码中的回车符造成的
- 解决办法
- 消除代码中的回车符【不建议,代码较多时会比较混乱】
- 给【行内块元素的父元素】的字体大小设置为0 【会影响盒子中的其他文本元素,但是单独在设置字体大小就好了】
- 但是如果在子元素其中一个兄弟元素里面没有内容,就会造成位置对齐不准,其中一个元素下掉,由此引出【基线对齐问题】
- vertical-align:left; 改变基线对齐为top
如何用css写一个三角形
<style>
.triangle{
border: 50px solid black;
width:0;
border-color: transparent greenyellow transparent transparent;
}
</style>
<body>
<div class="triangle"></div>
</body>
画一个圆
一些其他会用到的样式
white-space:nowrap 文字换行【强制不换行】
text-overflow:ellipsis 文字被隐藏后使用何种样式【以点点的形式隐藏】
display:-webkit-box 控制让哪一行显示【老版本的flex】
-webkit--line-clamp:4 控制让哪一行显示【控制行数】
-webkit-box-orient: vertical;【老版本的控制主轴方向】
user-select 禁止用户选中【文字】
letter-space 字符间距离
word-space 单词间距离
opacity:0.5 透明度
- 兼容处理
filter:alpha(opacity=50)
filter:blur(20px) 高斯模糊 数值越大越糊
filter:grayscale(1) 全部变灰
filter:invert(1) 反色
filter: hue-rotate(0deg); 色相修改