1.文档流normal flow
-网页是一个多层结构
-通过CSS可以分别为每一层设置样式
-用户只能看到最顶层
-最底层:文档流(我们所创建的元素默认都是从文档流中进行排列)
<head> <style> .box1 { background-color: blue; } /*它的父元素为body*/ .box2 { width: 100px; background-color: red; } span { background-color: aqua; } </style> </head> <!-- 元素有两个状态:在文档流中/不在文档流(现在只考虑前者) -元素在文档流(基岩)中有什么特点:(元素也可以脱离文档流,不再区分块和行内) -块元素 div --块元素会在页面中独占一行 --默认宽度时父元素的全部(即浏览器设置宽度为多少,背景就宽多少) --默认高度是子元素的总和 -行内元素 span --行内元素不会只占一行,只占自身大小 --在页面中自左向右排列(若一行容纳不了,则会换行) --默认高度和宽度跟里面的元素有关 --> <body> <!--两个块元素--> <div class="box1"> 我是div1 </div> <div class="box2"> 我是div2 </div> <span>我是span1</span> <span>我是span2</span> </body>
2.盒子模型
<!--盒子模型(对元素进行布局) -CSS将页面中的所有元素都设置了一个矩形的盒子 -将元素设置为矩形的盒子后,对页面的布局就变成了将不同的盒子摆放到不同的位置 -每一个盒子都有一下几个部分组成: --内容区(content) --内边距(padding) --边框(border) --外边距(margin),决定盒子位置 --> <head> <style> .box1 { /*内容区content,元素中的所有子元素和文本都在内容去中 大小由width和height来设置*/ width: 100px; height: 100px; background-color: aqua; /*边框border,边框属于盒子边缘 设置边框: 宽度 border-width 颜色 border-color 样式 border-style 边框的大小会影响到盒子大小(盒子内容一直不变) */ border-width: 20px; border-color: red; border-style: solid; } </style> </head> <body> <div class="box1"> 1234 </div> </body>
1.盒子模型-边框
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .box1 { width: 200px; height: 200px; background-color: rgb(6, 106, 139); /*边框,下面三个元素缺一不可(border-width有默认值,一般3px)*/ /*border-xxx-width,xxx可以为top right bottom left来指定某一个边的宽度*/ border-width: 10px 20px 30px 40px; /*边框上右下左(顺时针)宽度*/ /*指定边框颜色,同样可以分别制定四个边框的颜色,也可以用border-xxx-color指定颜色*/ border-color: orange red yellow green; /*指定边框样式,与上面类似。默认值为none(无边框) solid 实线 dotted 点状虚线 dashed 虚线 double 双线*/ border-style: solid dotted dashed double; } .box2 { width: 100px; height: 100px; background-color: rgb(6, 106, 139); /*border简写属性,没有顺序要求 border-xxx xxx可以为top right bottom left单独设置一边的样式*/ border: solid 10px orange; /*单独去掉一边*/ border-bottom: none; } </style> </head> <body> <div class="box1"></div> <div class="box2"></div> </body>
2.盒子模型-内边距
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .box1 { width: 200px; height: 200px; background-color: rgb(6, 106, 139); border: solid 10px orange; /*内边距padding -内容区和边框之间的距离 -四个方向:padding-top/right/bottom/left 内边距的设置会影响到盒子大小,颜色默认为内容颜色 盒子可见框的大小由内容区+内边距+边框共同决定*/ padding-top: 50px; padding-bottom: 50px; padding-left: 50px; padding-right: 50px; /*padding的简写,上右下左,跟前面的border一样*/ padding: 10px 20px 30px 40px; } .inner { width: 200px; height: 200px; background-color: yellow; } </style> </head> <body> <div class="box1"> <div class="inner"> </div> </div> </body>
3.盒子模型-外边距
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .box1 { width: 200px; height: 200px; background-color: aqua; border: 10px red solid; /*外边距margin 不影响盒子可见框的大小 影响盒子的位置 共有四个方向的外边距: margin-top/right/bottom/left */ margin-top: 100px; /*盒子向下移动*/ margin-left: 100px; /*盒子向右移动*/ /*margin简写,跟border一样*/ margin: 100px,100px; } </style> </head> <body> <div class="box1"></div> </body>
4.盒子模型-水平方向的布局
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .outer { /*width默认为auto*/ width: 800px; height: 200px; border: 10px red solid; } /*元素水平方向的布局: 元素在其父元素中水平方向的位置有以下几个属性共同决定 margin-left border-left padding-left width padding-right border-right margin-right(一般不用,浏览器会自动调整确保下面的等式成立) 要满足以下等式: 上面的加起来=父元素内容区的宽度 若不成立,则称为过度约束,等式会自动调整(一般调整margin-right) 水平居中:width:xxxpx;margin:0 auto; */ .inner { width: 200px; height: 200px; background-color: aqua; margin-left: 100px; margin-right: auto; } </style> </head> <body> <div class="outer"> <div class="inner"></div> </div> </body>
5.盒子模型-垂直方向的布局
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> /*元素垂直方向的布局*/ .outer { width: 250px; height: 400px; background-color: #bfa; /*默认情况下父元素的高度被子元素撑开 若设置具体值,则按具体值来 */ } /*子元素实在父元素的内容区中排列的 若子元素大于父元素,则溢出 用overflow处理溢出的子元素 overflow:visible:默认显示 hidden:隐藏溢出部分 scroll:生成两个滚动条,通过滚动条查看完整内容 auto 根据需要生成滚动条*/ .inner { width: 100px; height: 100px; background-color: red; margin-bottom: 100px; overflow: auto; } </style> </head> <body> <div class="outer"> <div class="inner"></div> <div class="inner">111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111 </div> </div> </body>
6.盒子模型-外边距的折叠
(1)兄弟元素
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> /*外边距的重叠 "相邻"的"垂直方向"的外边距会出现重叠现象 兄弟元素 相邻垂直外边距取两者的较大值 特殊情况: 如果外边距一正一负,则取两者的和 如果外边距都为负,则取绝对值大的*/ .box1, .box2 { width: 50px; height: 50px; font-size: 50px; } /*box1的下外边距和box2的上外边距重叠了 尽管两个加起来是200px,但实际上是100px*/ .box1 { background-color: aqua; /*设置下外边距*/ margin-bottom: 50px; } .box2 { background-color: orange; /*设置上外边距*/ margin-top: 50px; } </style> </head>
(2)父子元素
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> /*外边距的重叠 "相邻"的"垂直方向"的外边距会出现重叠现象 父子元素: 相邻外边距,子元素会传递给父元素 会影响页面的布局,因此必须要处理 */ /*将子元素box4下移,不移动父元素box3*/ .box3 { width: 200px; height: 100px; background-color: aqua; padding-top: 100px; } .box4 { width: 100px; height: 100px; background-color: orange; } </style> </head> <body> <div class="box3"> <div class="box4"></div> </div> </body>
7.行内元素的盒子模型
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .s1 { background-color: yellow; /*行内元素的盒子模型 行内元素不支持设置宽度和高度 行内元素可以设置padding,垂直方向的padding不会影响页面布局 行内元素可以设置border,垂直方向的border不会影响页面布局 行内元素可以设置margin,垂直方向的margin不会影响页面布局*/ /*width和height无效*/ width: 100px; height: 100px; padding: 100px; border: 50px solid red; margin: 20px; } .box1 { width: 200px; height: 200px; background-color: #bfa; } </style> </head> <body> <span class="s1"> 我是span </span> <div class="box1">我是box1</div> </body>
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .s1 { background-color: yellow; margin: 100px; } .box1 { width: 200px; height: 200px; background-color: #bfa; } a { /*对于超链接的放大 width和height没有用 使用display设置元素显示的类型,这样可以使用width和height 可选值 (若隐藏,则不占位置) inline:将元素设为行内元素 block:将元素设为块元素 inline-block:行内块元素,既可以设置宽高,又不会独占一行 table:将元素设为表格 none:隐藏(可以设置为鼠标点击而显示)*/ /*visibility设置元素的显示状态 可选值(若隐藏,则依然占位置) visible:默认值,正常显示 hidden:隐藏,但是依然占据页面位置*/ display: inline-block;/*缺点:兼具行内元素和块元素的优缺点,两者之间有间隔*/ width: 100px; height: 100px; background-color: orange; } </style> </head> <body> <a href="javascript:;">超链接</a> <a href="javascript:;">超链接</a> <span class="s1">我是span</span> <div class="box1">我是box1</div> </body>
8.浏览器的默认样式
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> /*浏览器的默认样式:浏览器为元素设置一些默认样式 会影响页面布局,一般要去除浏览器的默认样式*/ body { /*去除外边距*/ margin: 0; } p { margin: 0; } ul { margin: 0; padding: 0; margin-left: 20px; /*去除项目符号*/ list-style: none; } /*所有元素去除默认样式:*/ * { margin: 0; padding: 0; } /*一般不自己写,引用别人的文件来去除浏览器的默认样式 下面这条放到<style>上面 <link rel="stylesheet" href="./css/reset/css">*/ .box1 { width: 100px; height: 100px; border: 1px solid black; } </style> </head> <body> <!--标签之间自动有间隔(浏览器自动设置了外边距)--> <div class="box1">我是box1</div> <p>我是一个段落</p> <p>我是一个段落</p> <p>我是一个段落</p> <p>我是一个段落</p> </body>
9.盒子的尺寸
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .box1 { width: 100px; height: 100px; background-color: #bfa; padding: 10px; border: 10px solid red; /*默认情况下,盒子可见框的大小由内容区、内边距和边框共同决定 box-sizing,设置盒子尺寸的计算方式(即width和height) 可选值 content-box:默认值,宽度和高度用来设置内容区的大小(140px*140px) border-box:宽度和高度设置整个盒子的大小(100px*100px) */ box-sizing: content-box; } .box2 { width: 100px; height: 100px; background-color: #bfa; padding: 10px; border: 10px solid red; box-sizing: border-box; } </style> </head>
10.轮廓和圆角
(1)轮廓
<head> <style> .box1 { width: 200px; height: 200px; background-color: #bfa; /*outline用来设置元素的轮廓线,用法和border一样 但轮廓不会影响可见框的大小*/ outline: 10px solid red; } .box2 { width: 200px; height: 200px; background-color: #bfa; border: 10px solid red; } </style> </head> <body> <div class="box1"></div> <span>outline</span> <div class="box2"></div> <span>border</span> </body>
(2)阴影
<head> <style> .box1 { width: 200px; height: 200px; background-color: #bfa; /*box-shadow:设置元素的阴影效果,不影响页面布局 阴影默认在元素正下方,所以需要偏移量 第1个值:水平偏移:正右负左 第2个值:垂直偏移:正下负上 第3个值:阴影模糊半径 第4个值:阴影颜色 */ box-shadow: 10px 10px 20px rgb(0, 0, 0, .5); } </style> </head> <body> <div class="box1"></div> </body>
(3)圆角
<head> <style> .box1 { width: 200px; height: 200px; background-color: orange; /*圆角:border-radius同时设置四个角 也可以分别设置: border-top-left-radius border-top-right-radius border-bottom-left-radius border-bottom-right-radius */ /*设置圆的半径*/ border-top-left-radius: 50px;/*正圆*/ border-top-right-radius: 50px 100px;/*椭圆*/ } .box2 { width: 200px; height: 200px; background-color: orange; /*设置为圆形*/ border-radius: 50%; } </style> </head> <body> <div class="box1"></div> <div class="box2"></div> </body>