目录
注:本文基于VSCode
一、文档流
文档流(normal flow)
网页是一个多层结构,CSS可以给每一层设置样式,最终我们看到的是最上面的一层
文档流是网页最底下的那一层
元素分为两种状态:
1、在文档流中
2、脱离文档流
之前将元素分为三类,块元素、行内元素、行内块元素,分别具有一些特点,
这些特点都是元素在文档流中的特点:
块元素:不会独占一行,宽是父元素内容区宽度,高被内容撑开
行内元素:不会独占一行,宽高被内容撑开,不能自定义宽高
行内块:兼具块元素、行内元素的特点
注意:
1、一旦脱离文档流,以上的分类,以上分类的特点都不复存在
2、我们创建的元素默认是在文档流中
二、盒子模型
布局相关样式:
文档流默认的布局,浮动,定位,弹性盒子等
盒模型、盒子模型、框模型(box model)
网页中也有很多元素,将各种元素摆放在合适的位置,盒模型将页面所有元素的形状都统一了,
你在布局时只需要考虑元素的大小即可
盒模型: 快递
内容区 content 冰箱
内边距 padding 泡沫
边框 border 快递盒子
外边距 margin 快递离你的距离
盒子的大小:内容区、内边距、边框 有关系,跟外边距没有关系
内容区content
width:内容区的宽
height:内容区的高
<style type="text/css">
.box1{
width: 100px;
height: 100px;
background-color: rebeccapurple;
}
</style>
三、盒子模型的边框
边框(border)边框用来隔开盒子内部和盒子外部
设置边框,三个要素缺一不可,边框的宽度,边框的颜色,边框的样式
边框的宽度 border-width
1、可以设置多个值,空格隔开即可,
4个值 上 右 下 左(顺时针)
3个值 上 左右 下
2个值 上下 左右
1个值 上下左右
2、单独设置某一边的宽度
border-top-width
border-bottom-width
border-left-width
border-right-width
3、border-width有默认值,默认在1-3px
边框的颜色 border-color
1、可以设置多个值
规则跟border-width一样
2、可以单独设置某一边的颜色
border-xxx-color
xxx:top、bottom、left、right
transparent:透明色
3、小箭头的写法:
border-color:transparent transparent transparent orange;
4、border-color有默认值,默认为黑色
边框的样式 border-style
1、边框样式的种类
solid 实线
dotted 点状的虚线
dashed 虚线
double 双线
2、可以写多个样式
规则和border-width一样
3、可以单独设置某一边样式
规则和border-width一样
4、没有默认值
边框border简写:
1、语法:border:大小 颜色 样式;
三要素顺序无所谓
2、单独设置某一边的边框
border-top:大小 颜色 样式
border-bottom
border-left
3、border:none;不要某一边框
border-right:none
<style>
.box{
width: 200px;
height: 200px;
background-color: red;
border-width: 10px 20px 30px 40px;
border-top-width: 20px;
border-color: green;
border-style: solid dotted double dashed;
}
</style>
</head>
<body>
<div class="box">
</div>
</body>
</html>
四、内边距
内边距: padding 边框和内容区之间的距离
1、可以单独设置某一边的内边距
padding-top
2、内边距padding的简写
可以写多个值,规则与border-width一样
style>
.box1{
width: 100px;
height: 100px;
background-color: blue;
padding-top: 30px;
}
/*box2占满box1*/
.box2{
width: 100%;
height: 100%;
background-color: red;
}
</style>
</head>
<body>
<div class="box1">
<div class="box2"></div>
</div>
</body>
</html>
五、外边距
外边距 margin(块元素)
不影响盒子的大小,可以改变盒子的位置
margin-top 设置元素上外边距,如果是正值,元素向下移动,如果是负值,元素向上移动
margin-right 设置元素右外边距,元素没有效果
margin-left 设置元素左外边距,如果是正值,元素像右移动,如果是负值,元素向左移动
margin-bottom 设置元素下外边距,如果是正值,元素自己不动,会挤下面的元素向下移动
负值,下面的元素向上移动
margin简写
margin 可以设置多个值,规则跟padding一样
六、水平布局
面试题:什么是过度约束,浏览器是如何调整水平方向值?
水平布局:
水平方向能影响到inner所占位置的因素:
margin-left,border-left,padding-left,width,margin-right,border-right,padding-right
过度约束:
浏览器规定元素水平方向七个值相加必须等于其父元素内容区的宽度,
如果不等于浏览器就会自己调整,让等式成立
浏览器如何调整:
1、如果水平方向7个值中没有auto,浏览器会自动调整margin-right的值
2、7个值中有3个值可以设置auto,margin-left,width,margin-right
设置1个auto:三种情况 谁是auto浏览器就调整谁
设置2个auto:三种情况
margin-left width 调width
margin-right width 调width
margin-left margin-right 同时调整margin-left和margin-right
设置3个auto:一种情况
调整width
总结:1、如果7个值中有auto,调整的顺序:
width>margin-left margin-right
2、如果想让块元素水平方向居中,必须width为固定值,左右外边距为auto