网页是一个多层的结构,一层叠着一层 通过CSS可以分别为每一层设置样式
作为用户来讲只能看到最顶上一层
这些层中,最底下的一层称为文档流,文档流是网页的基础 我们所创建的元素默认都是在文档流中进行排列的
行内元素 行内元素不会独占页面的一行,只占自身的大小
行内元素在页面中自左向右水平排列
如果一行之中不能容纳下所有的行内元素,则元素会换到第二行继续自左向右排列(书写习惯一致)
行内元素的默认宽度和高度都是被内容撑开
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>文档流</title> <style> span{ background-color: greenyellow; } </style> </head> <body> <span>我是一个span</span> <span>我是一个span</span> <span>我是一个span</span> <span>我是一个span</span> <span>我是一个span</span> <span>我是一个span</span> <span>我是一个span</span> <span>我是一个span</span> </body> </html>CSS将页面中的所有元素都设置为了一个矩形的盒子
将元素设置为矩形的盒子之后,对页面的布局就变成将不同的盒子摆放到不同的位置
每一个盒子都由以下几个部分组成: 内容区(content): 内边距(padding): 边框(border): 外边距(margin):
盒子实际在页面中占据的空间是由“内容+内边距+边框+外边距”组成的
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>盒子模型</title> <style> .box1{ /* 内容区(content):元素中所有的子元素和文本内容都在内容区中排列 内容区的大小由width 和 height两个属性来设置 width 设置内容区的宽度 height 设置内容区的高度 */ width: 200px; height: 200px; background-color: #bbffaa; /* 边框(border):边框属于盒子边缘,边框里边属于盒子内部,出了边框都是盒子的外部 边框的大小会影响到整个盒子的大小 要设置边框,需要至少设置三个样式: 边框的宽度:border-width 边框的颜色:border-color 边框的样式:border-style */ border-width: 10px; border-color: red; border-style: solid; } </style> </head> <body> <div class="box1"> 这是内容区</div> </body> </html>盒子边框border包围了盒子的内边距和内容,形成盒子模型的边界
语法:
border:颜色(color) 宽度(width) 样式(style); 解释:对所有边所有样式进行设置其中style属性有:
none 无边框 dotted 边框为点状 dashed 边框为虚线 solid 边框为实线 ...语法:
border-top border-right border-bottom border-left 解释:对某条边的所有样式进行设置语法:
border-style border-width border-color border-top-color border-top-width border-top-style <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>盒子模型边框</title> <style> .box1{ width: 200px; height: 200px; background-color: #bfa; /* 边框: 边框的宽度:border-width 边框的颜色:border-color 边框的样式:border-style */ /* border-width: 10px; 默认值一般都是3个像素 border-width可以用来指定四个方向的边框的宽度 值的情况: 四个值:上、右、下、左(顺时针) 三个值:上、左右、下 两个值:上下、左右 一个值:上下左右 除了border-width还有一组border-xxx-width xxx可以是 top、right、bottom、left 用来单独指定某一边宽度 */ border-width: 10px 20px 30px 40px; border-top-width: 10px; border-left-width: 30px; color: red; /* border-color用来指定边框的颜色,同样可以分别指定四个边的边框 规则和border-width一样 border-color也可以省略不写,如果省略了则自动使用color的颜色值,color是前景色默认是blcak */ border-color: orange; border-color: orange red yellow green; /* border-style 指定边框的样式 border-style 默认值是none 表示没有边框 solid 表示实线 dotted 点状虚线 dashed 表示虚线 double 双实线 */ border-style: solid dotted dashed double; /* border简写属性,通过该属性可以同时设置边框所有的相关样式,并且没有顺序要求 */ border: 10px red solid; } /* 除了border以外还有4个 xxxx border-top border-right border-bottom border-left border-top: 10px solid red; border-bottom: 10px solid red; 或者使用: border: 10px solid red; border-right: none; border-left: none; */ </style> </head> <body> <div class="box1"></div> </body> </html>盒子padding定义了边框和内容之间的空白区域,这空白区域称为盒子内边距
语法:
padding:属性值1 属性值2 属性值3 属性值4;
属性值单位:length(像素|厘米)、%(所占百分比)、inherit(从父元素继承内边距)当指定一个属性值:表示设置上下左右4个方向内边距 当指定四个属性值:表示设置上、右、下、左内边距
padding-top:属性值 padding-right:属性值 padding-left:属性值 padding-bottom:属性值
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>盒子模型内边距</title> <style> .box1{ width: 200px; height: 200px; background-color: #bfa; border: 10px orange solid; /* 内边距(padding) 内容区和边框之间的距离 一共有四个方向的内边距 padding-top padding-bottom padding-right padding-left 内边距的设置会影响到盒子的大小 背景颜色会延伸到内边距上 一共盒子的可见框的大小,由内容区、内边距、边框共同决定 所以在计算盒子大小时,需要将这三个区域加到一起计算 */ padding-top: 100px; padding-bottom: 100px; padding-right: 100px; /* paddinhg内边距的简写属性,可以同时指定四个方向的内边距 规则和border-width一样 */ padding: 10px 20px 30px 40px; } .inner{ width: 100%; height: 100%; background-color: yellow; } </style> </head> <body> <div class="box1"> <div class="inner"></div> </div> </body> </html>盒子margin定义了页面元素和元素之间的空白区域
语法:
margin:属性值1 属性值2 属性值3 属性值4;
属性值单位:length(像素|厘米)、%(所占百分比)、inherit(从父元素继承内边距)、auto(浏览器计算外边距)当指定一个属性值:表示设置上下左右4个方向外边距 当指定四个属性值:表示设置上、右、下、左外边距
margin-top:属性值 margin-right:属性值 margin-left:属性值 margin-bottom:属性值
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>盒子模型外边距</title> <style> .box1{ width: 200px; height: 200px; background-color: #bfa; border: 10px red solid; /* 外边距(margin) 外边距不会影响盒子可见框的大小 但是外边距会影响盒子的位置 一共有四个方向的外边距 margin-top 上外边距,设置一个正值,元素会向下移动 margin-right 默认情况下设置margin-right不会产生任何效果 margin-bottom 下外边距,设置一个正值,其下边的元素会向下移动 margin-left 左外边距,设置一个正值,元素会向右移动 margin也可以设置负值,如果是负值则元素会向相反的方向移动 元素在页面中是按照自左向右的顺序排列的 所以默认情况下如果我们设置的左和上外边距则会移动元素自身 而设置下和右外边距会移动其他元素 margin简写属性 margin可以同时设置四个方向的外边距,用法和padding一样 margin会影响到盒子实际占用空间大小 */ margin-top: 100px; margin-left: -100px; margin-bottom: 100px; margin-right: 0px; } .box2{ width: 220px; height: 220px; background-color: yellow; } </style> </head> <body> <div class="box1"></div> <div class="box2"></div> </body> </html>盒子的内容大小分别使用width(宽度)、height(高度)两个属性进行设置
盒子外边距合并主要针对普通流排版,指的是两个或以上多个相邻普通流块级元素在垂直外边距相遇时,将合并成一个外边距
如果外边距都为正,合并后的外边距高度等于这些高度值最大的外边距值
如果发生合并的外边距不全为正,会拉近两个块级元素垂直距离,甚至发生重叠
只有行内元素和浮动排版,才需要考虑相邻盒子之间水平间距
两个盒子之间的水平间距 = 左元素margin-right + 右元素margin-left
块级元素独占一行,其宽度自动填满父元素宽度,并和相邻的块级元素依次垂直排列
可以设定元素的宽度、高度、四个方向的内外边距
块级元素一般是其他元素的容器,可容纳块级元素和行内元素
常见块级元素:div、li、h1~h6行内元素不会独占一行,相邻的行内元素会排列在同一行里,直到一行排不下才换行
行内元素可以设置四个方向的内边距、左、右方向外边距,不可以设置宽、高、上、下外边距
行内元素的高度由元素高度决定,宽度由内容长度控制
行内元素一般不可以包含块级元素
常见行内元素:span、a、em、strong使用元素的display属性
display = block:行内元素以块级元素方式呈现 display = inline:块级元素以行内元素形式呈现 display = inline-block :元素变为行内块元素
既具有行内元素所有特征,也有块级元素可以设置宽高,上下外边距指在不使用其他与排版和定位相关的特殊CSS规则时,各种页面元素默认的排列规则
整个页面如同河流一般
普通流排版是页面元素默认的排版方式
通过设置position属性的不同值,实现四种类型定位
默认属性值,实现静态定位,就是元素按照普通流布局
相对定位,设置元素相对于它在普通流中的位置偏移
绝对定位,元素会基于相对于距离它最近的那个已定位的祖先元素偏移某个距离。
如果元素没有已近定义的祖先元素,那么它的偏移位置相对于最外层的包含框
固定定位,元素相对于浏览器窗口偏移某个位置,且固定不动,不会随着网页移动而移动
浮动排版中,块级元素的宽度不再自动伸展,而是根据盒子里放置的内容决定其宽度,要修改该宽度,可设置元素的宽度和内边距
浮动盒子可以向左向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。
使用float属性设置盒子浮动。
float:none:盒子不浮动float:left:盒子浮在父元素左边float:right:盒子浮在父元素右边使用clear属性清除元素的浮动
clear:left:在元素左侧不允许出现浮动元素clear:right:在元素右侧不允许出现浮动元素clear:both:在元素左右不允许出现浮动元素clear:none:默认值,运行在左右两侧出现浮动元素