一、CSS 盒子模型(Box Model)
概念
所有
HTML
元素可以看作盒子,在
CSS
中,
"box model"
这一术语是用来设计和布局时使用
CSS
盒模型本质上是一个盒子,封装周围的
HTML
元素,它包括:
外边距(
margin
),边框(
border
),内边距(
padding),和实际内容(content)
Margin( 外边距 ) - 清除边框外的区域,外边距是透明的Border( 边框 ) - 围绕在内边距和内容外的边框Padding( 内边距 ) - 清除内容周围的区域,内边距是透明的Content( 内容 ) - 盒子的内容,显示文本和图像
如果把盒子模型看作是一个生活中的快递,那么内容部分等同于你买的实物,内边距等同于快递盒子中的泡沫,边框等同于快递盒子,外边距等同于两个快递盒子之间的距离
<div></div>
div{
width: 100px;
height: 100px;
padding: 10px;
border: 2px solid red;
margin: 10px;
background: green;
}
盒子模型分类1 标准盒子模型2 怪异盒子模型3 弹性盒子模型
二、盒子模型之内容区域(Content)
W3C
盒子模型
(
标准盒模型
)
Content
(内容区域)
Content
内容区域包含宽度(
width
)和高度(
height
)两个属性块级元素默认宽度为100%
,行内元素默认宽度是由内容撑开,不管块级元素还是行内元素,默认高度都是由内容撑开
块级元素可以设置宽高属性,行内元素设置宽高属性不生效宽度(width
)和高度(
height
)可以取值为像素(
px
)和百分比(%
)
三、盒子模型之内边距(Padding)
定义
CSS padding
(填充)是一个简写属性,定义元素边框与元素内容之间的空间,即上下左右的内边距
可能的值
1 定义一个固定的填充(像素)2 使用百分比值定义一个填充
单边内边距属性
在
CSS
中,它可以指定不同的侧面不同的填充
padding-top:25px;
padding-bottom:25px;
padding-right:50px;
padding-left:50px;
分别代表
1 上内边距是 25px2 右内边距是 50px3 下内边距是 25px4 左内边距是 50px
简写属性
为了缩短代码,它可以在一个属性中指定的所有填充属性
这就是所谓的简写属性。所有的填充属性的简写属性是
padding
Padding
属性,可以有一到四个值
padding:25px 50px 75px 100px; // 顺序:上 右 下 左
padding:25px 50px 75px; // 顺序:上 (左右) 下
padding:25px 50px; // 顺序:上下 左右
padding:25px; // 顺序:所有方向
Padding
需要注意的问题
padding
会撑大容器
<body>
<ul class="nav">
<li><a href="#">首页</a></li>
<li><a href="#">手机</a></li>
<li><a href="#">家电</a></li>
<li><a href="#">配件</a></li>
<li><a href="#">生活</a></li>
<li><a href="#">服务</a></li>
<li><a href="#">社区</a></li>
</ul>
</body>
<style>
.nav>li{
float: left;
padding: 20px 30px;
background-color: #1D1E22;
}
.nav a{
color: #fff;
font-size: 14px;
}
</style>
四、盒子模型之边框(Border)
定义
CSS
边框属性允许你指定一个元素边框的样式和颜色
边框样式
边框样式属性指定要显示什么样的边界
border-style
属性用来定义边框的样式
border-style
值
边框宽度
您可以通过
border-width
属性为边框指定宽度
.one{
border-style:solid;
border-width:5px;
}
边框颜色
border-color
属性用于设置边框的颜色
.one{
border-style:solid;
border-color: red;
}
温馨提示border-color 单独使用是不起作用的,必须得先使用 borderstyle来设置边框样式
边框单独设置各边
在
CSS
中,可以指定不同的侧面不同的边框
p{
border-top: 1px solid red;
border-bottom: 1px solid red;
border-right: 1px solid red;
border-left: 1px solid red;
}
边框简写属性
你也可以在一个属性中设置边框
你可以在
border
属性中设置
border-width
border-style (required)
border-color
p{
border:5px solid red;
}
border-style
属性可以有
1-4
个值
border-style:dotted solid double dashed; //顺序:上 右 下 左
border-style:dotted solid double; // 顺序:上(左右) 下
border-style:dotted solid; // 顺序:上下 左右
border-style:dotted; // 顺序:所有方向
五、盒子模型之外边距
定义
CSS margin(
外边距
)
属性定义元素周围的空间
取值
1 Auto2 定义一个固定的 margin3 定义一个使用百分比的边距
单边外边距属性
在
CSS
中,它可以指定不同的侧面不同的边距
div{
margin-top:100px;
margin-bottom:100px;
margin-right:50px;
margin-left:50px;
}
简写属性
为了缩短代码,有可能使用一个属性中
margin
指定的所有边距属性
所有边距属性的简写属性是
margin
div{
margin:100px 50px;
}
margin
属性可以有一到四个值
margin:25px 50px 75px 100px; // 顺序:上 右 下 左
margin:25px 50px 75px; // 顺序:上 (左右) 下
margin:25px 50px; // 顺序:上下 左右
margin:25px; // 顺序:所有方向
margin
需要注意的问题
外边距合并问题
垂直方向上外边距相撞时,取较大值
<div class="one"></div>
<div class="two"></div>
<style>
.one,.two{
width: 200px;
height: 200px;
}
.one{
background-color: red;
margin-bottom: 50px;
}
.two{
background-color: blueviolet;
margin-top: 100px;
}
</style>
六、怪异盒模型
怪异盒模型
(IE
盒子模型
)
在该模式下,浏览器的
width
属性不是内容的宽度,而是内容、内 边距和边框的宽度的总和;即在怪异模式下的盒模型,盒子的(content
)宽度
+
内边距
padding+
边框
border
宽度
=
我们设置的
width(height
也是如此
)
,
盒子总宽度
/
高度
=width/height +
margin
Box-sizing
CSS3
指定盒子模型种类
box
-
sizing
属性允许您以特定的方式定义匹配某个区域的特定元素
box
-
sizing: content
-
box
;
宽度和高度分别应用到元素的内容框。在宽度和高度之外绘制元素的内边距和边框
box
-
sizing: border
-
box
;
为元素设定的宽度和高度决定了元素的边框盒。就是说,为元素指定的任何内边距和边框都将在已设定的宽度和高度内进行绘制。通过从已设定的宽度和高度分别减去边框和内边距才
能得到内容的宽度和高度
即
box
-
sizing
属性可以指定盒子模型种类,
content-box
指定盒子模型
为
W3C
(标准盒模型),
border-box
为怪异盒模型
弹性盒模型(
flex box
)
定义
弹性盒子是
CSS3
的一种新的布局模式
CSS3
弹性盒是一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式
引入弹性盒布局模型的目的是提供一种更加有效的方式来对一个容器中的子元素进行排列、对齐和分配空白空间
CSS3
弹性盒内容
弹性盒子由弹性容器
(Flex container)
和弹性子元素
(Flex item)
组成
弹性容器通过设置
display
属性的值为
flex
将其定义为弹性容器
弹性容器内包含了一个或多个弹性子元素
温馨提示弹性容器外及弹性子元素内是正常渲染的。弹性盒子只定义了弹性子元素如何在弹性容器内布局
<div class="flex-container">
<div class="flex-item">flex item 1</div>
<div class="flex-item">flex item 2</div>
<div class="flex-item">flex item 3</div>
</div>
<style>
.flex-container {
display: flex;
width: 400px;
height: 250px;
background-color: lightgrey;
}
.flex-item {
background-color: cornflowerblue;
width: 100px;
height: 100px;
margin: 10px;
}
</style>
温馨提示默认弹性盒里内容横向摆放
父元素上的属性
display
属性
display:flex
;
开启弹性盒
display:flex
;
属性设置后子元素默认水平排列
flex-direction
属性
定义
flex-direction
属性指定了弹性子元素在父容器中的位置
语法
flex-direction: row | row-reverse | column |
column-reverse
1row :横向从左到右排列(左对齐),默认的排列方式2row-reverse :反转横向排列(右对齐,从后往前排,最后一项排在最前面3column :纵向排列4column-reverse :反转纵向排列,从后往前排,最后一项排在最上面
.flex-container {
display: flex;
flex-direction: column;
width: 400px;
height: 250px;
background-color: lightgrey;
}
justify-content
属性
定义
内容对齐(
justify-content
)属性应用在弹性容器上,把弹性项沿着弹性容器的主轴线(main axis
)对齐
语法
justify-content: flex-start | flex-end |center | space-between | space-around
1flex - end 弹性项目向行尾紧挨着填充。第一个弹性项的 main-end 外边距边线被放置在该行的main-end 边线,而后续弹性项依次平齐摆放2center 弹性项目居中紧挨着填充。(如果剩余的自由空间是负的,则弹性项目将在两个方向上同时溢出)3space - between 弹性项目平均分布在该行上。如果剩余空间为负或者只有一个弹性项,则该值等同于 flex-start 。否则,第 1 个弹性项的外边距和行的 main-start 边线对齐,而最后 1 个弹性项的外边距和行的 main-end 边线对齐,然后剩余的弹性项分布在该行上,相邻项目的间隔相等。4space - around 弹性项目平均分布在该行上,两边留有一半的间隔空间。如果剩余空间为负或者只有一个弹性项,则该值等同于 center 。否则,弹性项目沿该行分布,且彼此间隔相等(比如是20px ),同时首尾两边和弹性容器之间留有一半的间隔( 1/2*20px=10px )
.flex-container {
display: flex;
justify-content: center;
width: 400px;
height: 250px;
background-color: lightgrey;
}
align-items
属性
定义
align
-
items
设置或检索弹性盒子元素在侧轴(纵轴)方向上的对齐方式
语法
align-items: flex-start | flex-end | center
flex - start 弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴起始边界flex - end 弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴结束边界center 弹性盒子元素在该行的侧轴(纵轴)上居中放置。(如果该行的尺寸小于弹性盒子元素的尺寸,则会向两个方向溢出相同的长度)
子元素上的属性
flex-grow
flex
-
grow
根据弹性盒子元素所设置的扩展因子作为比率来分配剩余空
间默认为0
,即如果存在剩余空间,也不放大如果只有一个子元素设置,那么按扩展因子转化的百分比对其分配剩余空间。0.1
即
10%
,
1
即
100%
,超出按
100%
<div class="flex-container">
<div class="flex-item1">flex item
1</div>
<div class="flex-item2">flex item
2</div>
<div class="flex-item3">flex item
3</div>
</div>
<style>
.flex-container {
display: flex;
width: 400px;
height: 250px;
background-color: gold;
}
.flex-item1 {
height: 150px;
background-color: red;
flex-grow: 1;
}
.flex-item2 {
height: 150px;
background-color: green;
flex-grow: 2;
}
.flex-item3 {
height: 150px;
background-color: blue;
flex-grow: 1;
}
</style>
七、浏览器内核

浏览器最重要或者说核心的部分是“Rendering Engine”,可大概译
为“
渲染引擎
”
,不过我们一般习惯将之称为
“
浏览器内核
”
。负责对网页语法的解释并渲染(显示)网页。
渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解释也有不同,因此同一网页在不同的内核的浏览器里的渲染(显示)效果也可能不同一些较新的css3
特性,需要添加以上前缀兼容每个浏览器
浏览器
|
浏览器内核
|
前缀
|
IE
浏览器
|
Trident
(
IE
内核)
|
-ms-
|
火狐浏览器
|
Gecko
(
Firefox
内核)
|
-moz
|
Chrome
和
Safari
浏览器
|
Webkit
(
Safari
内核,
Chrome
内核)
|
-webkit-
|
Chrome
浏览器
|
Blink
内核
|
-webkit-
|
360
浏览器、猎豹浏览器
|
IE+Chrome
双内核
|
-ms-/-webkit-
|
<div class="root">
<div class="box"></div>
<div class="box"></div>
</div>
<style>
.root{
display: flex;
}
.box{
flex: 1;
-ms-flex: 1;
-moz-flex:1;
-webkit-flex:1;
}
</style>