一 .盒模型概念 :
属性:
width 内容的宽度
height 内容的高度
margin 外边距 一个盒子到另一个盒子的距离
前提条件是 :标准文档流下
奇技淫巧 margin 垂直方向塌陷问题 水平方向上不会出现问题
避免方式 : 只设置一个方向
非标准文档流下:
不管水平还是垂直方向 , 都不会出现任何问题
margin 描述的是兄弟标签7
padding 内边距 内容到边框之间的距离
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .container{ width: 200px; height: 200px; background-color: darkgoldenrod; /*一个值代表四个方向都是这个值*/ /*padding: 30px;*/ /*两个值 先上下 后左右*/ /*padding: 20px 30px;*/ /*三个值 上 左右 下 顺时针*/ /*padding: 30px 20px 40px;*/ /*四个值 上 右 下 左 顺时针方向*/ /*padding: 20px 30px 40px 50px;*/ /*该写法 与上述写法一样*/ padding-top : 20px; padding-bottom : 30px; padding-left : 40px; padding-right : 50px; } </style> </head> <body> <div class="container"></div> </body> </html>
border 1px solid blue 盒子的边框
三要素 线条粗细, 线条样式(实线 虚线 双线 点划线), 线条颜色.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .box{ width: 300px; height: 300px; background-color: darkgoldenrod; /*根据方向来设置属性*/ border-left: 1px solid darkred; border-right: 5px dotted darkblue; border-top: 10px double darkslateblue; border-bottom: 1px dashed red; /*根据三要素*/ /*线条粗细*/ /*border- 5px 10px 1px;*/ /*边框类型 实线 双划线 虚线 点画线*/ /*border-style: solid double dashed dotted;*/ /*根据颜色选择*/ /*border-color: red blue green yellow;*/ } </style> </head> <body> <!--三要素 粗细 线型样式 颜色--> <div class="box">alex</div> </body> </html>
需求 做一个302*302的盒子
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> /*第一种方法*/ .box{ width: 200px; height: 200px; padding: 50px; border: 1px solid red; background-color: darkslateblue; } </style> </head> <body> <div class="box"></div> </body> </html>
盒模型的计算
如果保证盒子模型不变加padding 就要对盒模型宽或高减 保证盒子模型不变 即保证数据加和起来还是原来的数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .box{ width: 200px; height: 200px; padding: 50px; background-color: red; border: 1px solid blue; margin-left: 30px; } </style> </head> <body> <!--在标准文档流下 :块级标签和行内--> <div class="box">alex</div> <div class="box">alex</div> </body> </html>
通过padding 能调整字内容的位置 padding能将内容进行移位 对于padding来说 通常描述的就是父子之间的距离
margin : 外边距的意思. 表示边框到最近盒子的距离
在水平方向不会有任何问题 两个行内的块对接可能会产生中间有一条缝隙现象 将两个块级标签排到一行就行了 中间不要留任何空格就没有了
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .top{ /*块级元素和行内元素的互换 display属性 即显示模式*/ /*将top类的行内元素轻质转换成行内元素的块元素 这样既可以给这个span设置宽度和高度(块的属性) 又可以和别人并排(行内元素的属性)*/ display:inline-block; width: 200px; height: 200px; background-color: red; margin-left: 30px; } .header{ display:inline-block; width: 300px; height: 300px; background-color: yellow; margin-right: 50px; } </style> </head> <body> <span class="top"></span><span class="header"></span> </body> </html>
但是 垂直之间会有塌陷现象:垂直之间塌陷的原则是以两盒子最大的外边距为准。
塌陷产生的条件: 两个块级标签垂直排布 并且上边的向下margin 下边的向上margin两个标签的margin有交合(交互重合 不知道这样描述对不对)时才会有塌陷现象 如果没有交互 即同向上或同向下 或者上边的向上 下边的向下都没有影响.
margin 描述的是兄弟标签之间的距离 即块级标签的距离
padding 描述的是父子标签
做一个三角形图标: 利用线宽交合在一起产生
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .triangle{ width: 0; height: 0; border-left: 40px solid transparent; border-bottom: 40px solid green; border-right: 40px solid transparent; } </style> </head> <body> <div class="triangle"></div> </body> </html>
结果如图:
标准文档流:宏观的讲:web页面和ps等设计软件有本质区别 web的制作 是一个流 从上而下 ,像织毛衣 . 即标准文档流 而设计软件想在哪里画东西就在哪里画东西.
微观现象:
1 .空白折叠现象 : 多个空格会被合并成一个空格显示到浏览器页面中
2 .高矮不齐 底边对齐 主要是指文字和图片并列 因高度不同产生的现象.
3 .自定换行
版心设置 设置一个块级标签 封装行内标签并有序排列?:
浮动: 实现元素并排
float 默认none效果
现象 : 脱标(脱离标准文件流)
收缩效果 (块级元素 隐式的转换成行内)
字围效果
如果标签一旦浮动 就不区分行内标签还是块级标签 都可以任意设置宽高
贴边现象 如果父元素有足够的空间 那么前后之间的块级标签相互紧紧依靠着
如果空间不足 最右边的会靠着与它相隔的那个标签 如果相隔的那个没有足够的空间给它靠 会继续往边靠直到靠到最左边的父类边为止
浮动带来的问题 : 如果父盒子没有设置高度 子盒子都设置为浮动(脱标了 不在文档上占位置)撑不起父盒子的高度
浮动 不会给父盒子一个高度 那么浮动子元素不会填充父盒子高度,那么此时第二个父盒子就会跑到第一个位置上 影响页面布局 虽然浮动能实现页面元素并排的效果 但是还是带来了页面布局的极大混乱 所以要清除浮动
清除方法:
1 . 给父盒子设置高度
2 .内墙法
在浮动的元素后面添加一个空的块级标签 并且设置该标签的属性 clear:both 重置所有元素设置.
3 .伪元素清除法
给浮动的父辈盒子加
.clearfix{
clear:both;
content:'.';
display:block;
visibility:hidden;
heght:0;}
4 .overflow:hidden
BFC:
浮动带来的好处:
对于布局非常有用 flask()
压盖现象,不用浮动做压盖 要浮动一起浮动 , 有浮动清除浮动
想压盖 用定位