CSS学习 Day03

一、盒子模型

1、盒子模型概述

CSS 盒子模型 (Box Model) 规定了元素框处理元素内容、内边距、边框和外边距的方式。

2、边框(border)

属性

描述

border-color

transparent:默认,透明

边框颜色

border-style

none:无边框

dotted:点线

dashed:虚线

double:双实线

solid:实线

边框样式

border-width

thin:细边框

medium:默认,中等边框

thick:粗边框

length(px,em):自定义长度

边框宽度

border-collapse

separate:默认值。边框会被分开。

collapse:细线表格

表格边框

border-radius

length,%

圆角边框

border

none

取消边框

常用写法 border: 1px solid #ccc;

3、内边距(padding)

padding的取值可以是1-4个 h1 {padding: 10px 0.25em 2ex 20%;} 一个值:上下左右 两个值:上下、左右 三个值:上、左右、下 四个值:上、右、下、左(顺时针)

注意:行内元素里面不要写上下padding,左右可以

4、外边距(margin)

外边距不会对盒子本身的大小造成影响,一般是移动盒子本身或者影响其他的盒子

        margin-top、margin-left 移动盒子本身

        margin-right、margin-bottom 影响的是右边和下边的盒子

  1. margin的取值方式和padding一样
  2. margin的大小只会移动盒子的位置,并不会对盒子的大小造成影响(特殊情况例外)
  3. 行内元素也不要给上下的margin
  4. 特殊值:auto margin:0 auto; 可以让一个块级元素水平居中

前提条件:必须是块级元素 同时必须有固定的width

text-align是控制盒子内部的文字或者内部的行内块水平居中

margin:0 auto控制的是盒子本身的水平居中

5、清除内外边距

很多标签天生自带边距,而且不同的浏览器对应的边距有所不同。

(1) body 标签: 自带 margin: 8px; 的属性

(2) p 标签: 默认带有 margin: font-size 0; 的值

(3) h 标签: 也默认带有 margin-top 和 margin-bottom

(4) ul标签: ul 标签默认带有上下的 margin, 和 padding-left

为了在不同的浏览器中显示的结果都是一样的,所以需要将所有的标签身上自带的边距设置为0

* { padding: 0; margin: 0; }

6、外边距的BUG

1、相邻块元素垂直外边距的合并

当上下相邻的两个块元素相遇时,如果上面的元素有下外边距margin-bottom, 下面的元素有上外边距margin-top,则他们之间的垂直间距不是margin-bottom与margin-top之和 而是两者中的较大者。这种现象被称为相邻块元素垂直外边距的合并(也称外边距塌陷)。

解决方案: 避免

2、嵌套块元素垂直外边距的合并

对于两个嵌套关系的块元素,如果父元素没有上内边距及边框, 则父元素的上外边距会与子元素的上外边距发生合并, 合并后的外边距为两者中的较大者, 即使父元素的上外边距为0,也会发生合并

解决方案

1. 可以为父元素定义1像素的上边框或上内边距。 2. 可以为父元素添加overflow:hidden。

7、盒子模型的计算

(1)内减

我们在实际工作中量到的都是盒子的实际大小,我们会把这个实际大小直接给到盒子的width和height

在后续如果需要添加border或者padding,需要在width和height的基础上减去border和padding的大小

(2)CSS3的盒子模型

box-sizing: border-box;

自动内减:不需要我们在手动去计算多出来的border和padding值

(3)不需要手动减去padding和border的情况

①当盒子的宽度是继承过来的时候 添加padding和border不需要内减

②当用text-indent控制文字的缩进的时候 也不需要内减

③直接使用box-sizing:border-box去实现盒子的内减

猜你喜欢

转载自blog.csdn.net/qq_39176732/article/details/81232494
今日推荐