盒子模型(CSS重点)
盒子模型(Box Model)
盒子模型有元素的内容、边框(border)、内边距(padding)、和外边距(margin)组成。
盒子里面的文字和图片等元素是内容区域
盒子的厚度我们成为盒子的边框
盒子内容与边框的距离是内边距(类似单元格的cellpadding)
盒子与盒子之间的距离是外边距(类似单元格的cellspacing)
标准盒子模型
盒子边框(border)
语法:
border : border-width ll border-style ll border-color
边框的样式:
none:没有边框即忽略所有边框的宽度(默认值)
solid:边框为单实线(最为常用的)
dashed:边框为虚线
dotted:边框为点线
边框综合设置
border : border-width ll border-style ll border-color
盒子边框写法总结表
表格的细线边框
通过表格的ce1lspacing=“O”,将单元格与单元格之间的距离设置为0,
但是两个单元格之间的边框会出现重叠,从而使边框变粗
通过css属性:
table{ border-co1lapse:co1lapse; }
collapse单词是合并的意思
border-collapse:collapse;表示相邻边框合并在一起。
**<style>
table{
width: 500px;
height: 300px;
border: 1px solid red;
}
td{
border: 1px solid red;
text-align: center;
}
table,td{
border-co1lapse: co1lapse; /*合并相邻边框*/
}
</style>
内边距(padding)![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/21fec820f0257a4d2b3ea80ddcf3b38c.png#pic_center)
padding属性用于设置内边距。是指边框与内容之间的距离。
设置
内盒尺寸计算(元素实际大小)
宽度
Element Height = content height + padding + border(Height为内容高度)
高度
Element Width = content width + padding + border (Width为内容宽度)
盒子的实际的大小=内容的宽度和高度+内边距+边框
padding不影响盒子大小情况
如果没有给一个盒子指定宽度,此时,如果给这个盒子指定padding,则不会撑开盒子。
外边距(margin)
margin属性用于设置外边距。margin就是控制盒子和盒子之间的距离
margin值的简写(复合写法)代表意思跟padding完全相同。
块级盒子水平居中
可以让一个块级盒子实现水平居中必须:
盒子必须指定了宽度(width)
然后就给左右的外边距都设置为auto,
实际工作中常用这种方式进行网页布局,示例代码如下:
.header{ width:960px; margin:0 auto;}
常见的写法,以下下三种都可以。
margin-left: auto;margin-right: auto;
margin: auto;
margin: 0 auto;
文字居中和盒子居中区别
1、盒子内的文字水平居中是text-align:center,而且还可以让行内元素和行内块居中对齐
2、块级盒子水平居中 左右margin改为auto
插入图片和背景图片区别
1.插入图片我们用的最多比如产品展示类移动位置只能靠盒模型padding margin
⒉背景图片我们一般用于小图标背景或者超大背景图片背景图片只能通过background-position
清除元素的默认内外边距(重要)
注意:
行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距。
外边距合并
使用margin定义块元素的垂直外边距时,可能会出现外边距的合并。
(1).相邻块元素垂直外边距的合并
当上下相邻的两个块元素相遇时,如果上面的元素有下外边距margin-bottom
下面的元素有上外边距margin-top,则他们之间的垂直间距不是margin-bottom与margin-top之和
取两个值中的较大者这种现象被称为相邻块元素垂直外边距的合并(也称外边距塌陷)。
(2).嵌套块元素垂直外边距的合并(塌陷)
对于两个嵌套关系的块元素,如果父元素没有上内边距及边框
父元素的上外边距会与子元素的上外边距发生合并
合并后的外边距为两者中的较大者
浮动(float)
CSS 布局的三种机制
1.普通流(标准流)
块级元素会独占一行,从上向下顺序排列;
常用元素: div、hr、p、h1~h6、ul、ol、dl、form、table
行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行;
常用元素: span、a、i、em等
⒉.浮动
让盒子从普通流中浮起来,主要作用让多个块级盒子一行显示。
3.定位
将盒子定在浏览器的某一个位置——CSS离不开定位,特别是后面的js特效。
为什么需要浮动?
虽然我们前面学过行内块(inline-block)但是他却有自己的缺陷:
1.它可以实现多个元素一行显示,但是中间会有空白缝隙,不能满足以上第一个问题。
2.它不能实现以上第二个问题,盒子左右对齐
因为一些网页布局要求,标准流不能满足我们的需要了,因此我们需要浮动来完成网页布局。
什么是浮动(float)
概念:元素的浮动是指设置了浮动属性的元素会
1.脱离标准普通流的控制
2.移动到指定位置。
作用
1.让多个盒子(div)水平排列成一行,使得浮动成为布局的重要手段。
2.可以实现盒子的左右对齐等等…
3.浮动最早是用来控制图片,实现文字环绕图片的效果。
语法
在CSS中,通过float中文,浮漏特属性定义浮动,语法如下:
选择器{ float:属性值;}
float属性会让盒子漂浮在标准流的上面,所以第二个标准流的盒子跑到浮动盒子的底下了。
浮动――特性float属性会改变元素display属性。
任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素。生成的块级框和我们前面的行内块极其相似。
注意:浮动的元素互相贴靠一起的,但是如果父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐
浮动(float)小结
浮动(float)的应用(重要)
浮动和标准流的父盒子搭配
我们知道,浮动是脱标的,会影响下面的标准流元素,此时,我们需要给浮动的元素添加一个标准流的父亲,这样,最大化的减小了对其他标准流的影响。
浮动(float)的扩展
1).浮动元素与父盒子的关系
子盒子的浮动参照父盒子对齐
2)浮动元素与兄弟盒子的关系
在一个父级盒子中,如果前一个兄弟盒子是:
·浮动的,那么当前盒子会与前一个盒子的顶部对齐;
普通流的,那么当前盒子会显示在前一个兄弟盒子的下方。
浮动只会影响当前的或者是后面的标准流盒子,不会影响前面的标准流。
建议
如果一个盒子里面有多个子盒子,如果其中一个盒子浮动了,其他兄弟也应该浮动。防止引起问题
清除浮动
为什么要清除浮动
因为父级盒子很多情况下,不方便给高度,但是子盒子浮动就不占有位置,最后父级盒子高度为O,就影响了下面的标准流盒子。
总结:
由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排版产生影
准确地说,并不是清除浮动,而是清除浮动后造成的影响
清除浮动本质
清除浮动主要为了解决父级元素因为子级浮动引起内部高度为0的问题。清除浮动之后,父级就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了
清除浮动的方法
在CSS中,clear属性用于清除浮动,在这里,我们先记住清除浮动的方法,具体的原理,等我们学完css会再回头分析。
·语法:
选择器{clear:属性值;}clear清除
1).额外标签法(隔墙法)
是w3c推荐的做法是通过在浮动元素末尾添加一个空的标签例如
优点:通俗易懂,书写方便
缺点:添加许多无意义的标签,结构化较差。
2).父级添加overflow属性方法
可以给父级添加:overflow为hidden/ auto| scro17都可以实现。
优点:代码简洁
缺点:内容增多时候容易造成不会自动换行导致内容被隐藏掉,无法显示需要溢出的元素。
3).使用after伪元素清除浮动
:after方式为空元素额外标签法的升级版,好处是不用单独加标签了
使用方法:
.clearfix:after {content: "";display: block; height: 0; clear: both;
visibility: hidden;}
.clearfix {*zoom:1;}/*IE6、7专有*/
优点:符合闭合浮动思想结构语义化正确
缺点:由于IE6-7不支持:after,使用zoom:1触发hasLayout。
代表网站:百度、淘宝网、网易等
4).使用双伪元素清除浮动
使用方法:
.clearfix:before,.clearfix:after {
content: "";
display:table;
}
.clearfix:after {
clear:both;
}
.clearfix {
*zoom:1;
}
优点:代码更简洁
缺点:由于IE6-7不支持:after,使用zoom:1触发hasLayout.
代表网站:小米、腾讯等
清除浮动总结
1.父级没高度
2.子盒子浮动了
3.影响下面布局了,我们就应该清除浮动了。