前言
页面布局要学习三大核心, 盒子模型, 浮动 和 定位。 学习好盒子模型能非常好的帮助我们布局页面。
看透网页布局的本质
网页布局过程:
-
先准备好相关的网页元素,网页元素基本都是盒子 Box 。
-
利用 CSS 设置好盒子样式,然后摆放到相应位置。
-
往盒子里面装内容
网页布局的核心本质: 就是利用 CSS 摆盒子。
盒子模型
所谓盒子模型:就是把 HTML 页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器。
CSS 盒子模型本质就是封装周围的 HTML 元素,它包括:边框、外边距、内边距、和 实际内容
边框(border)
border可以设置元素的边框。边框有三部分组成:
- 边框宽度(粗细)
border-width
- 比如2px 或 0.1em
- 边框样式
border-style
-
none
: 默认无边框 -
dotted
: 定义一个点线边框 -
dashed
: 定义一个虚线边框 -
solid
: 定义实线边框
-
- 边框颜色
border-collapse
属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框。
border-collapse:collapse;/*表示相邻边框合并在一起*/
边框简写:
border: 1px solid red; /*没有顺序*/
边框分开写法:
border-top: 1px solid red; /* 只设定上边框, 其余同理 */
边框会影响盒子实际大小
边框会额外增加盒子的实际大小。因此我们有两种方案解决:
-
测量盒子大小的时候,不量边框.
-
如果测量的时候包含了边框,则需要 width/height 减去边框宽度
<head>
<style>
.box1 {
border: 10px solid blue;
width: 200px;
height: 200px;
;
}
</style>
</head>
<body>
<div class="box1">
</div>
</body>
此例中边框内容大小为200*200
,但盒子实际大小为220*220
内边距
元素的内边距在边框和内容区之间。控制该区域最简单的属性是 padding 属性。
属性
属性 | 描述 |
---|---|
padding | 简写属性。作用是在一个声明中设置元素的所内边距属性。 |
padding-bottom | 设置元素的下内边距。 |
padding-left | 设置元素的左内边距。 |
padding-right | 设置元素的右内边距。 |
padding-top | 设置元素的上内边距。 |
简写
当我们给盒子指定 padding 值之后,发生了 2 件事情:
-
内容和边框有了距离,添加了内边距。
-
padding影响了盒子实际大小。也就是说,如果盒子已经有了宽度和高度,此时再指定内边框会撑大盒子
如果想要盒子大小不变有两个解决方案
解决方案一
如果保证盒子跟效果图大小保持一致,则让 width/height 减去多出来的内边距大小即可。padding影响盒子大小也有好处
padding影响盒子大小的好处
padding内边距可以撑开盒子,我们可以做巧妙的运用.
因为每个导航栏里面的字数不一样多,我们可以不用给每个盒子宽度了,直接给padding最合适.
<style>
.nav {
height: 41px;
border-top: 3px solid #ff8500;
border-bottom: 1px solid #edeef0;
background-color: #fcfcfc;
line-height: 41px;
}
.nav a {
/* a属于行内元素 此时必须要转换 行内块元素 */
display: inline-block;
height: 41px;
padding: 0 20px;
font-size: 12px;
color: #4c4c4c;
text-decoration: none;
}
.nav a:hover {
background-color: #eee;
color: #ff8500;
}
</style>
解决方案二
盒子本身没有指定width/height属性,盒子的大小继承自父元素,此时padding不会撑开盒子
外边距
围绕在元素边框的空白区域是外边距。简单的说,就是控制盒子和盒子之间的距离。
设置外边距的最简单的方法就是使用 margin 属性,这个属性接受任何长度单位、百分数值甚至负值。
属性 | 描述 |
---|---|
margin | 简写属性。在一个声明中设置所有外边距属性。 |
margin-bottom | 设置元素的下外边距。 |
margin-left | 设置元素的左外边距。 |
margin-right | 设置元素的右外边距。 |
margin-top | 设置元素的上外边距。 |
外边距典型应用
外边距可以让块级盒子水平居中,但是必须满足两个条件:
① 盒子必须指定了宽度(width)。
② 盒子左右的外边距都设置为 auto 。
.header{ width:960px; margin:0 auto;}
常见的写法,以下三种都可以:
- margin-left: auto; margin-right: auto;
- margin: auto;
- margin: 0 auto;
以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中则需要给其父元素添加
text-align:center
外边距合并
外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
使用 margin 定义块元素的垂直外边距时,可能会出现外边距的合并。
主要有两种情况:
1. 相邻块元素垂直外边距的合并
2. 嵌套块元素垂直外边距的塌陷
当一个元素包含在另一个元素中时(假设没有内边距或边框把外边距分隔开),它们的上和/或下外边距也会发生合并。请看下图:
只有普通文档流中块框的垂直外边距才会发生外边距合并。行内框、浮动框或绝对定位之间的外边距不会合并。
解决方案
① 可以为父元素定义边框或内边距阻隔外边距的合并。
②可以为父元素添加浮动 overflow:hidden
。
清楚内外边距
网页元素很多都带有默认的内外边距,而且不同浏览器默认的也不一致。因此我们在布局前,首先要清除下网
页元素的内外边距。
* {
padding:0; /* 清除内边距 */
margin:0; /* 清除外边距 */
}
注意:行内元素为了照顾兼容性,只设置左右内外边距,不要设置上下内外边距。但是转换为块级和行内
块元素就可以了