第1关:透视盒模型:居中的的盒子页面
盒模型
盒模型(Box Model),是CSS中重要的基础之一。
浏览器在对文档进行布局时,会根据CSS盒模型将所有元素,表示为一个矩形盒子(Box)。换句话说,每个元素都是一个盒子。
盒模型描述了元素所占空间的内容。每个盒子有四个边:外边距(Margin)、边框(Border)、内边距(Padding)和内容(Content)。
图片表示盒模型,如下:
基础实例
在本关中,我们使用如下HTML实例,进行讲解:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Hello World</title> <link rel="stylesheet" href="./CSS/style.css"> </head> <body> <h1>盒模型</h1> <div id="box1">盒子一宽度为200px,内间距为25px,外间距为20px、边框为25px。</div> </body> </html>
复制
其中style.css文件初始内容为:
* { margin: 0; padding: 0; } #box1 { background-color: whitesmoke; }
复制
显示效果如下:
内容区域 (Content Area)
内容区域包含盒子的内容,显示文本和图像。一般使用width和height指定大小。
例如,指定box元素内容宽度:
#box1 { background-color: whitesmoke; width: 200px; }
复制
显示效果如下:
内边距(Padding)
内边距(Padding) 是指内容周围的区域,内边距默认是透明的。如果内容区域设置了背景、颜色或者图片,这些样式将同样延伸应用到内边距上。
可以使用padding-top, padding-right, padding-bottom, padding-left,分别指定内容区域的上边、右边、下边和左边的内边距。
例如,指定box元素内边距:
#box1 { background-color: whitesmoke; width: 200px; padding-top: 20px; padding-right: 10px; padding-bottom: 15px; padding-left: 10px; }
复制
显示效果如下:
为书写简洁,也可以使用padding简写内边距。内边距简写时指定的顺序为顺时针。如果四个边边距相同,只需要指定一个值。
例如,上面的例子可以简写为:
#box1 { background-color: whitesmoke; width: 200px; padding: 20px 10px 15px 10px; }
复制
其中 20px 10px 15px 10px 依据顺时针方向,分别对应为 上、右、下和左内边距。
边框(Border)
边框(Border)是围绕在内边距和内容外的边框。使用border属性指定样式。其指定方式与我们在上一节表格样式中讲解相同,所以在此不再赘述。
例如,指定box元素边框:
#box1 { background-color: whitesmoke; width: 200px; padding: 20px 10px 15px 10px; border: 25px dotted yellowgreen; }
复制
显示效果如下:
外边距(Margin)
外边距(Margin) 是指边框外的区域,外边距默认也是透明的。
可以使用 margin-top, margin-right, margin-bottom, margin-left分别指定外边距区域的上边、右边、下边和左边的内边距。同样的,属性顺序为顺时针。
例如,指定box元素外边距:
#box1 { background-color: whitesmoke; width: 200px; padding: 20px 10px 15px 10px; border: 25px dotted yellowgreen; margin-top: 20px; margin-right: 20px; margin-bottom: 20px; margin-left: 20px; }
复制
显示效果如下:
同样的,也可以使用简写属性 margin。同内边距一样,外边距简写时指定的顺序为顺时针。如果四个边边距相同,只需要指定一个值。
例如,上面的例子可以简写为:
#box1 { background-color: whitesmoke; width: 200px; padding: 20px 10px 15px 10px; border: 25px dotted yellowgreen; margin: 20px; /*外边框四个边同时设置为20px*/ }
复制
任务要求
学会了基本表格样式修改,现在让我们来实践一下吧。请在右侧的编辑框中修改style.css文件,完成index.html中元素样式。要求如下:
- 设置box2元素,宽度为350px;
- 使用简写内边距的方式设置box2的内边距为25px;
- 设置box2元素边框为20px粗的黄绿色yellowgreen实线(注:直接使用单词指定颜色);
- 设置box2元素的外边距的下边距为10px;
- 使用简写内边距的方式设置body元素的内边距为20px。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Hello World</title> <link rel="stylesheet" href="step1/CSS/style.css"> </head> <body> <h1>盒模型</h1> <div id="box2">盒子二宽度为220px,内间距为30px,外间距为10px、边框为20px。</div> </body> </html>
复制
style.css文件
* { margin: 0; padding: 0; } body { /* ********** BEGIN ***********/ padding: 20px; /* ********** END *************/ border: 10px solid lightsalmon; } h1 { text-align: center; } #box2 { /* ********** BEGIN ***********/ width: 350px; padding: 25px; border: 20px solid yellowgreen; margin-bottom: 10px; /* ********** END *************/ }
复制
第2关:确定盒模型元素大小
确定元素大小
在 CSS 的默认盒子模型中,当我们指定一个CSS元素的高度与宽度时,只是指定了内容的宽度和高度。一个元素的大小,还包括其外边距、内边距和边框。通过box-sizing 属性可以更改计算元素宽度和高度的默认的 CSS 盒子模型。
box-sizing
box-sizing 属性值可以 设置为 content-box 或者 border-box。
/* 关键字 值 */
box-sizing: content-box;
box-sizing: border-box;
其分别含义如下:
content-box
如果设置 content-box 的 宽度为 width,高度为 height,元素实际布局占得宽度为 Width,高度为 Height。元素布局的实际大小,需要加上padding和border的大小。
所以,
元素布局所占宽度Width计算方法为:
Width = width + padding-left + padding-right + border-left + border-right
元素布局所占高度Height计算方法为:
Height = height + padding-top + padding-bottom + border-top + border-bottom
border-box
如何设置 border-box 的 宽度为 width,高度为 height,元素实际布局占得宽度为 Width,高度为 Height。元素布局的实际大小和 border-box 设置相同。
所以:
布局所占宽度 Width计算方法为:
Width = width(包含padding-left + padding-right + border-left + border-right)
布局所占高度 Height计算方法为:
Height = height(包含padding-top + padding-bottom + border-top + border-bottom)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>盒模型——确定元素大小</title> <style type="text/css"> .content-box { width: 160px; height: 80px; padding: 20px; border: 8px solid red; background: yellow; box-sizing: content-box; /* Total width: 160px + (2 * 20px) + (2 * 8px) = 216px Total height: 80px + (2 * 20px) + (2 * 8px) = 136px Content box width: 160px Content box height: 80px */ } .border-box { /***************** BEGIN *****************/ width:216px; height:136px; /***************** END *****************/ padding: 20px; border: 8px solid red; background: yellow; box-sizing: border-box; } </style> </head> <body> <div class="content-box">Content box</div> <br> <div class="border-box">Border box</div> </body> </html>
复制