HTML-3
1.盒子模型
盒子模型:是把HTML页面中的布局元素看成一个矩形的盒子。CSS盒子模型的本质上是一个盒子
- 边框(border)
border可以设置元素的边框。边框由三部分组成边框宽度(粗细)边框样式 边框颜色
属性 | 作用 |
border-width | 定义边框的粗细,单位是px |
border-style | 边框的样式 |
border-color | 边框颜色 |
-
- border-collapse属性控制浏览器绘制表格边框的方式(collapse是合并的意思)
- 边框会额外增加盒子的实际大小
- 测量盒子时,不量边框
- 如果测量时包含了边框,则需要在设置width/height时减去边框
- 内边距(padding)
padding属性用于设置内边距,及边框与内容之间的距离
值的个数 | 表达含义 |
padding: 5px | 1个值,代表上下左右都有5像素内边距 |
padding: 5px 10px | 2个值,代表上下内边距是5像素,左右内边距是10像素 |
padding: 5px 10px 20px | 3个值,代表上内边距是5像素,左右内边距是10像素,下内边距是20像素 |
padding: 5px 10px 20px 30px | 4个值,上是5像素,右是10像素,下是20像素,左是30像素,顺时针 |
-
- padding会影响盒子实际的大小
当盒子已经有了宽度和高度时,再对padding进行设置,会影响盒子的实际大小
-
- 新浪导航栏
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 <style type="text/css"> 7 * { 8 padding: 0; 9 margin: 0; 10 } 11 .nav { 12 border-top: 3px solid #ff8500; 13 border-bottom: 1px solid #edeef0; 14 list-style: none; 15 margin: 40px 20px; 16 background-color: #fcfcfc; 17 color: #4c4c4c; 18 height: 41px; 19 } 20 .nav li { 21 float: left; 22 padding: 0 20px; 23 cursor: pointer; 24 line-height: 41px; 25 } 26 .nav li:hover{ 27 background-color: #eee; 28 color: #FF8500; 29 } 30 </style> 31 </head> 32 <body> 33 <div class="box"> 34 <ul class="nav"> 35 <li>设为首页</li> 36 <li>手机新浪网</li> 37 <li>移动客户端</li> 38 <li>博客</li> 39 <li>微博</li> 40 <li>关注我</li> 41 </ul> 42 </div> 43 </body> 44 </html>
-
- 当一个盒子本身没有指定width/height属性,则此时padding不会撑开盒子大小
- 盒子外边距margin
- 块级盒子水平居中(常见写法:margin-left: auto;margin-right: auto、margin: auto、margin: 0 auto)
- 盒子必须指定了宽度(width)
- 将盒子的左右外边距设置为auto
- 注意:以上是让块级元素水平居中的方式,对于行内/行内块元素,则给其父元素添加:text-align: center即可
- 外边距合并:当上下两个相邻的块元素(兄弟关系)相遇时,如果上面的元素有下边距,下面的元素有上边距,则他们之间的垂直间距,取两个值中的较大者,这种现象被称为相邻块元素垂直外边距的合并
- 嵌套块级元素垂直外边距的塌陷:对于两个嵌套关系(父子关系)的块元素,父元素有上边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值
- 解决方案:为父元素定义上边框
- 为父元素定义上内边距
- 可以为父元素添加overflow:hidden
- 块级盒子水平居中(常见写法:margin-left: auto;margin-right: auto、margin: auto、margin: 0 auto)
- 清除内外边距
1 * { 2 padding: 0; 3 margin: 0; 4 }
-
- 行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距。
下面是CSS3新增的3个样式,IE9及以上支持
- 圆角边框(border-radius: length)
radius半径(圆的半径)原理:(椭圆)与边框的交集形成圆角效果
-
- 参数值可以是数值或者百分比
- 该属性是一个简写属性,可以跟四个值,分别代表左上角、右上角、右下角、左下角
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 <style type="text/css"> 7 .yuanxing { 8 width: 200px; 9 height: 200px; 10 background-color: pink; 11 /* 50%就是宽度的一半 等价于100px */ 12 border-radius: 100px; 13 } 14 15 .yuanjiaojuxing { 16 width: 200px; 17 height: 100px; 18 background-color: pink; 19 border-radius: 50px; 20 } 21 </style> 22 </head> 23 <body> 24 1.原型的做法 25 <div class="yuanxing"></div> 26 2.圆角矩形的做法 27 <div class="yuanjiaojuxing"></div> 28 </body> 29 </html>
- 盒子阴影:box-shadow
box-shadow: h-shadow x-shadow blur spread color inset
值 | 描述 |
h-shadow | 必须,水平阴影的位置,允许负值 |
x-shadow | 必须,垂直阴影的位置,允许负值 |
blur | 可选,模糊距离 |
spread | 可选,阴影的尺寸 |
color | 可选。阴影的颜色 |
inset | 可选,将外部阴影(outset)改为内部阴影,(注意:默认是outset,不用进行设置,写了不起效果) |
- 文字阴影:text-shadow: h-shadow v-shadow blur color
2.CSS浮动
- 三种传统布局方式
- 普通流(标准流/文档流):元素按照默认状态进行布局
- 浮动
- 定位
- 网页布局第一准则:多个块级元素纵向排列标准流,多个块级元素横向排列浮动
- float属性用于创建浮动框,将其移动到一边,直到左边缘或者右边缘触及包含块或另一个浮动框的边缘
- 浮动元素会脱离标准流(脱标),不再保留原先的位置
- 浮动的元素会一行内显示并且元素顶部对齐:如果父级盒子装不下这些浮动的盒子,多出的盒子会另起一行显示
- 浮动的元素会具有行内块元素的特性,如果是行内元素有了浮动,则不需要转换可以直接设置宽高
- 如果块级元素没有添加宽度,默认是和父级元素一样宽,但当它添加了附送后,它的大小根据内容来定
- 为了约束浮动的位置,我们一般先用标准流的父元素上下位置,之后内部子元素采取浮动排列左右位置,符合网页布局第一准则
- 浮动布局注意点
- 浮动和标准流的父盒子搭配:先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置
- 一个元素浮动了,理论上其兄弟元素也要跟着浮动
- 浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流
- 清除浮动:选择器{clear:属性值;}
由于父级盒子很多的情况下,不方便给高度,但是盒子浮动又不占位置最后父级盒子高地为0时,就会影响下面的标准流盒子
本质:清除浮动元素脱离标准文档流造成的影响
-
- 清除浮动之后,父级就会根据浮动的子盒子自动检测高度,不会影响下面的标准流
属性值 | 描述 |
left | 不允许左侧有浮动元素(清除左侧浮动带来的影响) |
right | 不允许右侧有浮动元素(清除右侧浮动带来的影响) |
both | 同时清除左右两侧浮动的影响(实际工作使用) |
-
- 清除浮动的策略是,闭合浮动(只让浮动在父盒子内部影响,不影响父盒子外面的其他盒子)
- 清除浮动的方法:
- 额外标签法(隔墙法):在浮动元素的末尾添加一个空的标签添加清除浮动样式,新添加的标签必须是块级元素
- 父级元素添加overflow属性:将其属性设置为hidden、auto、scroll,缺点是无法显示溢出的部分
- 父级添加after伪元素,缺点照顾低版本浏览器
- 父级添加双伪元素,缺点照顾低版本浏览器
- 清除浮动的方法:
- 清除浮动的策略是,闭合浮动(只让浮动在父盒子内部影响,不影响父盒子外面的其他盒子)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 <style type="text/css"> 7 /* 伪元素清除浮动,伪元素默认是行内元素 */ 8 /** .clearfix:after { 9 content: ""; 10 display: block; 11 height: 0; 12 clear: both; 13 visibility: hidden; 14 } 15 16 .clearfix { 17 /* IE6、7专有 */ 18 /*zoom: 1; 19 } **/ 20 21 /* 双伪元素清除浮动 */ 22 .clearfix::before, 23 .clearfix::after { 24 content: ""; 25 display: table; 26 } 27 28 .clearfix::after { 29 clear: both; 30 } 31 32 .clearfix { 33 *zoom: 1; 34 } 35 36 .box { 37 /* 父级元素添加overflow属性清除浮动 */ 38 width: 800px; 39 border: #000 solid 1px; 40 /* overflow: hidden; */ 41 } 42 43 .left { 44 float: left; 45 height: 200px; 46 width: 200px; 47 background-color: pink; 48 } 49 50 .right { 51 height: 300px; 52 width: 300px; 53 background-color: skyblue; 54 float: left; 55 } 56 57 .cent { 58 height: 300px; 59 background-color: #000000; 60 } 61 62 /* 额外标签法 */ 63 /* .clear { 64 clear: both; 65 } */ 66 </style> 67 </head> 68 <body> 69 <div class="box clearfix"> 70 <div class="left">1</div> 71 <div class="right">2</div> 72 <!-- 额外标签法,新添加的元素必须是块级元素 --> 73 <!-- <div class="clear"></div> --> 74 </div> 75 <div class="cent"></div> 76 </body> 77 </html>
2.CSS定位
定位:将盒子定在某一个位置,所以定位也是在摆放盒子,按照定位的方式移动盒子
定位 = 定位模式 + 边偏移
定位模式用于指定一个元素在文档中的定位方式,边偏移决定了该元素的最终位置
- 定位模式:决定元素的定位方式,它通过CSS的position属性来设置,其值可以分为四个
值 | 语义 |
static | 静态定位 |
relative | 相对定位 |
absolute | 绝对定位 |
fixed | 固定定位 |
- 边偏移:定位的盒子移动到最终的位置,有top、bottom、left、right4个属性(元素相对于父元素的距离)
- 定位
- 静态定位static:静态定位是元素的默认方式,无定位的意思
- 选择器 {pisition: static;}
- 静态定位按照标准流的特性摆放位置,它没有边偏移
- 静态定位在布局时很少使用到
- 相对定位relative(重要):元素在移动位置的时候,是相对于它原来的位置来说的(自恋型)
- 选择器 {position: relative;}
- 移动位置的时候参照点是自己原来的位置
- 原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它(不脱标,仍然保留原来的位置)
- 绝对定位absolute(重要):元素在移动位置的时候,是相对于它的祖先元素来说的
- 选择器 {pisition: absolute;}
- 如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位(Document文档)
- 如果父级有定位,则以父元素为准定位
- 绝对定位不再占有原来的位置(相当于脱离文档流)
- 绝对定位的盒子居中
- 选择器 {left: 50%; margin-left:-width*50%;}(水平居中)
- 选择器 {top: 50%; margin-top:-height*50%;}(垂直居中)
- 子绝父相:子级使用绝对定位,父级则要使用相对定位
- 父级需要占有位置,因此是相对定位,子盒子不需要占有位置,则是绝对定位
- 固定定位fixed(重要):元素固定于浏览器可视区的位置。主要使用场景:可以在浏览器页面滚动式元素的位置不会改变
- 选择器 {position: fixed;}
- 以浏览器的可视窗口为参照点移动元素
- 跟父元素没有任何的关系
- 不随滚动条滚动
- 固定定位小技巧:固定在版心右侧位置
- 让固定定位的盒子left:50%
- 让固定定位的盒子margin-left: 版心宽度的一半距离
- 固定定位小技巧:固定在版心右侧位置
- 固定定位不占有原来的位置
- 粘性定位sticky:可以被认为是相对定位和规定定位的混合(兼容性特别差,IE不支持)
- 选择器: {position:sticky; top: 10px;}
- 以浏览器科室窗口为参照点移动元素(固定定位特点)
- 粘性定位占有原先的位置(相对定位的特点)
- 必须添加top、left、right、bottom其中一个值才有效
- 定位叠放次序z-index
在使用定位布局时,可能会出现盒子重叠的情况。此时,可以使用z-index来控制盒子的前后次序(z轴)
-
- 选择器 {z-index: ;}
- 数值可以是正整数、负整数或0,默认是auto,数值越大,盒子越靠上
- 定位的特殊特性
- 绝对定位和固定定位和浮动类似
- 行内元素添加绝对或者固定定位,可以直接设置高度和宽度
- 块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小就是内容的大小
- 浮动元素、绝对定位(固定定位)元素都不会触发外边距合并的问题
- 绝对定位(固定定位)会完全压住盒子
- 定位的拓展
- 浮动元素不同,只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字(图片)
- 浮动不会压住文字的原因,因为浮动产生的目的最初是为了做文字的环绕效果的,文字会围绕浮动元素
- 绝对定位(固定)定位完全压住盒子(即压住标准流的所有内容)
- 浮动元素不同,只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字(图片)
- 绝对定位和固定定位和浮动类似
- 淘宝焦点图案例
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 <style type="text/css"> 7 * { 8 margin: 0; 9 padding: 0; 10 } 11 12 div { 13 position: relative; 14 height: 300px; 15 width: 450px; 16 margin: 80px auto; 17 } 18 19 div img { 20 width: 450px; 21 } 22 23 .prev, 24 .next { 25 position: absolute; 26 top: 50%; 27 margin-top: -15px; 28 /* 加了绝对定位的盒子可以直接设置高度和宽度 */ 29 height: 30px; 30 width: 20px; 31 background-color: rgba(107,107,107,0.7); 32 color: aliceblue; 33 line-height: 30px; 34 font-size: 20px; 35 text-decoration: none; 36 } 37 38 .prev { 39 left: 0; 40 border-top-right-radius: 15px; 41 border-bottom-right-radius: 15px; 42 } 43 44 .next { 45 /* 如果一个盒子既有left属性又有right属性,则会默认执行left属性 同理top和bottom会执行top */ 46 right: 0; 47 border-top-left-radius: 15px; 48 border-bottom-left-radius: 15px; 49 text-align: right; 50 } 51 52 .pic ul { 53 position: absolute; 54 left: 50%; 55 bottom: 10px; 56 margin-left: -25px; 57 } 58 59 .pic li { 60 display: inline-block; 61 width: 6px; 62 height: 6px; 63 background-color: #CCC; 64 border-radius: 3px; 65 } 66 </style> 67 </head> 68 <body> 69 <div class="pic"> 70 <img src="img/2.jpg" /> 71 <a class="prev" href="javascript:;" ><</a> 72 <a class="next" href="javascript:;" >></a> 73 <ul> 74 <li></li> 75 <li></li> 76 <li></li> 77 <li></li> 78 <li></li> 79 </ul> 80 </div> 81 </body> 82 </html>
- 网页布局总结
- 默认下的排布规则就是标准流(垂直的块级盒子显示就用标准流布局)
- 使得元素脱离标准流的排布规则限制,也就是所谓的浮动脱标(多个块级盒子水平显示就用浮动布局)
- 定位最大的特点就是有层叠的概念,就是可以让多个盒子前后叠压来显示,如果元素自由在某个盒子内移动就用定位布局
3.元素的显示与隐藏
- display:显示隐藏
- display: none 隐藏对象
- display: block 除了转换为块级元素之外,同时还有显示元素的思想
- display隐藏元素后,不再占有原来的位置
- visibility:显示隐藏
- visibility: visible 元素可见
- visibility: hidden 元素隐藏
- visibility隐藏元素之后,继续占有原来的位置
- overflow:溢出显示隐藏(制定了如果内容溢出一个元素的框,即超过其指定高度和宽度)时,会发生什么
属性值 | 描述 |
visible | 不剪切内容也不添加滚动条 |
hidden | 不显示超出对象尺寸的内容 超出部分隐藏掉 |
scroll | 不管内容是否超出,总是显示滚动条 |
auto | 超出自动显示滚动条,不超出不显示滚动条 |
- 土豆案例
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 <style type="text/css"> 7 * { 8 padding: 0; 9 margin: 0; 10 } 11 12 .play { 13 position: relative; 14 width: 450px; 15 margin: 80px auto; 16 } 17 18 .play img { 19 width: 450px; 20 height: 300px; 21 } 22 23 .play:hover .shade { 24 display: block; 25 } 26 27 .shade { 28 display: none; 29 position: absolute; 30 top: 0; 31 left: 0; 32 width: 450px; 33 height: 300px; 34 background-color: rgba(0,0,0,0.4); 35 background-image: url(img/播放.png); 36 background-size: 40px; 37 background-repeat: no-repeat; 38 background-position: center; 39 cursor: pointer; 40 } 41 </style> 42 </head> 43 <body> 44 <div class="play"> 45 <img src="img/2.jpg" > 46 <div class="shade"> 47 </div> 48 </div> 49 </body> 50 </html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律