CSS盒子模型及属性细节详解

目录

一.  CSS盒子模型

1. 简介

2. 组成

3. 定位

二.  属性细节

1. 元素的宽度和高度

2. box-sizing 属性

3. CSS边框属性(border)

4. CSS边距(margin)

5. CSS填充(padding)

6. 浏览器的兼容性问题


一. CSS盒子模型

1. 简介

        CSS (Cascading Style Sheet)可译为“层叠样式表 ”或“级联样式表”,它定义如何显示HTML 元素,用于控制Web页面的外观。通过使用CSS实现页面的内容与表现形式分离,极大提高了工作效率。CSS 假定所有的HTML 文档元素都生成了一个描述该元素在HTML文档布局中所占空间的矩形元素框,可以形象地将其看作是一个盒子。CSS 围绕这些盒子产生了一种“盒子模型”概念,通过定义一系列与盒子相关的属性,可以极大地丰富和促进各个盒子乃至整个HTML文档的表现效果和布局结构。对于是盒子的元素,如果没有特殊设置,其默认总是占独立的一行,宽度为浏览器窗口的宽度,在其前后的元素不管是不是盒子,都只能排列在它的上面或者下面,即上下累加着进行排列。HTML文档中的每个盒子都可以看成是由从内到外的四个部分构成,即内容区(content)、填充(padding)、边框(border)和空白边(margin)。 CSS 为四个部分定义了一系列相关属性,通过对这些属性的设置可以丰富盒子的表现效果。

2. 组成

        内容区(content)

        内容区是盒子模型的中心,它呈现了盒子的主要信息内容,这些内容可以是文本、图片等多种类型。内容区有三个属性,width、height 和overflow。使用width和height属性可以指定盒子内容区的高度和宽度,当内容信息太多,超出内容区所占范围时,可以使用overflow 溢出属性来指定处理方法。当overflow 属性值为hidden时,溢出部分将不可见;为visible时,溢出的内容信息可见,只是被呈现在盒子的外部;当为scroll时,滚动条将被自动添加到盒子中,用户可以通过拉动滚动条显示内容信息;当为auto时,将由浏览器决定如何处理溢出部分。

        填充(padding)

        填充是内容区和边框之间的空间。填充的属性有五种 ,即padding -top、padding -bottom、padding -left、padding-right 以及综合了以上四种方向的快捷填充属性padding。使用这五种属性可以指定内容区信息内容与各方向边框间的距离。设置盒子背景色属性时,可使背景色延伸到填充区域。

        边框(border)

        边框是环绕内容区和填充的边界。边框的属性有border-style、border-width和border-color 以及综合了以上三类属性的快捷边框属性 border。border-style 属性是边框最重要的属性,如果没有指定边框样式,其他的边框属性都会被忽略,边框将不存在。CSS规定了dotted(点线)、dashed(虚线)、solid(实线)等九种边框样式。使用border-width属性可以指定边框的宽度,其属性值可以是长度计量值,也可以是CSS规定的thin、medium 和thick。使用border-color属性可以为边框指定相应的颜色,其属性值可以是RGB值,也可以是CSS 规定的17个颜色名 。在设定以上三种边框属性时,既可以进行边框四个方向整体的快捷设置,也可以进行四个方向的专向设置,如border: 2px solid green 或border-top-style: solid、border-left-color: red等。设置盒子背景色属性时,在IE中背景不会延伸到边框区域,但在FF等标准浏览器中,背景颜色可以延伸到边框区域,特别是单边框设置为点线或虚线时能看到效果 [1]  。

        空白边(margin)

        空白边位于盒子的最外围,是添加在边框外周围的空间。空白边使盒子之间不会紧凑地连接在一起,是CSS 布局的一个重要手段。空白边的属性有五种 ,即margin-top、margin-bottom、margin- left、margin-right以及综合了以上四种方向的快捷空白边属性margin,其具体的设置和使用与填充属性类似。对于两个相邻的(水平或垂直方向 )且设置有空白边值的盒子,他们邻近部分的空白边将不是二者空白边的相加,而是二者的并集。若二者邻近的空白边值大小不等,则取二者中较大的值。同时,CSS 容许给空白边属性指定负数值,当指定负空白边值时,整个盒子将向指定负值方向的相反方向移动,以此可以产生盒子的重叠效果。采用指定空白边正负值的方法可以移动网页中的元素,这是CSS 布局技术中的一个重要方法。

3. 定位

        网页默认的布局方式

        文档流指文档中能够明确显示对象在排列时所占用的具体方位。文档流不但是盒子模式定位的基础所在,它也是HTML中默认的网页布局模式,在没有特殊要求的情况下,页面中的块状元素呈现自上而下的动态分布形式,内联元素则是按照从左到右的方式存在。如果我们想要改动某一汉字或是符号在网页中的具体方位,只能有一种方式可以选择,就是通过操作网页结构中汉字或是符号的先后位置和分布位置来实现自己的目的和想法。

        浮动

        所谓浮动就是让设置的标签产生漂浮效果,脱离原来在页面本应出现的空间位置,不再占用任何文档流空间。元素设置为浮动以后,会生成一个块级元素,而不论它本身是何种元素。且要指明一个宽度,否则它会尽可能地窄;另外当可供浮动的空间小于浮动元素时,它会跑到下一行,直到拥有足够放下它的空间。

        Position定位

        页面布局使用最多的是相对定位和绝对定位。

        相对定位:这种定位方式下元素不脱离文档流,仍然保持其未定位前的形态并且保留它原来所占空间。偏移时以自身位置的左上角作为参照物,通过left、top、right和bottom四个方向的属性来定义偏移的位置。下面通过比较定位前和定位后的两种状态来分析相对定位的效果。

        绝对定位:这种定位方式下元素将脱离文档流,不占据空间,文档流中的后续元素将填补它留下的空间。下面通过比较定位前和定位后的两种状态来分析绝对定位的效果 [2]  。

二. 属性细节

1. 元素的宽度和高度

        元素宽度:总元素的宽度=宽度+左填充+右填充+左边框+右边框+左边距+右边距

        元素高度:总元素的高度=高度+顶部填充+底部填充+上边框+下边框+上边距+下边距

        示例:下面的例子中的元素的总宽度为 300px

width: 250px;        
padding: 10px;        
border: 5px solid gray;        
margin: 10px;

2. box-sizing 属性

        属性定义及使用说明
        box-sizing 属性允许你以某种方式定义某些元素,以适应指定区域。

        例如,假如您需要并排放置两个带边框的框,可通过将 box-sizing 设置为 "border-box"。这可令浏览器呈现出带有指定宽度和高度的框,并把边框和内边距放入框中。

        语法
        box-sizing:border-box

        指定宽度和高度(最小/最大属性)确定元素边框。也就是说,对元素指定宽度和高度包括了 padding 和 border 。通过从已设定的宽度和高度分别减去边框和内边距才能得到内容的宽度和高

        区别:

         1.标准盒模型

                设置的width和height是指内容的宽和高。增加内边距与边框会影响盒子的真实尺寸,但不会影响内容区域的大小。

        2.IE盒模型(怪异盒模型)、

                设置的width和height是指盒子的真实尺寸。增加内边距与边框会影响内容区域的大小,但不会影响盒子的真实尺寸。

3. CSS边框属性(border)

        元素的边框 (border) 是围绕元素内容和内边距的一条或多条线。

        CSS border 属性允许你规定元素边框样式、宽度和颜色。

border-style边框样式
border-width边框宽度
border-color边框颜色

        3.1 CSS 边框样式(border-style)

        border-style属性用来定义边框的样式是边框最重要的一个方面,这不是因为样式控制着边框的显示,而是因为如果没有样式,将根本没有边框。

none 默认无边框
dotted 定义一个点线边框
dashed 定义一个虚线边框
solid 定义实线边框
double 定义两个边框。 两个边框的宽度和 border-width 的值相同
groove 定义3D沟槽边框。效果取决于边框的颜色值
ridge 定义3D脊边框。效果取决于边框的颜色值
inset 定义一个3D的嵌入边框。效果取决于边框的颜色值
outset 定义一个3D突出边框。 效果取决于边框的颜色值

        3.2 CSS 边框宽度(border-width)  

        您可以通过 border-width 属性为边框指定宽度。

        为边框指定宽度有两种方法:可以指定长度值,比如 2px 或 0.1em(单位为 px, pt, cm, em 等),或者使用 3 个关键字之一,它们分别是 thick 、medium(默认值) 和 thin。

        注意: CSS 没有定义 3 个关键字的具体宽度,所以一个用户可能把 thick 、medium 和 thin 分别设置为等于 5px、3px 和 2px,而另一个用户则分别设置为 3px、2px 和 1px。

        3.3 CSS 边框颜色(border-color

        border-color属性用于设置边框的颜色。可以设置的颜色:

        name - 指定颜色的名称,如 "red"

        RGB - 指定 RGB 值, 如 "rgb(255,0,0)"

        Hex - 指定16进制值, 如 "#ff0000"

        您还可以设置边框的颜色为"transparent"。

        注意: border-color单独使用是不起作用的,必须得先使用border-style来设置边框样式。

CSS边框属性总结:

属性描述
border简写属性,用于把针对四个边的属性设置在一个声明。
border-style用于设置元素所有边框的样式,或者单独地为各边设置边框样式。
border-width简写属性,用于为元素的所有边框设置宽度,或者单独地为各边边框设置宽度。
border-color简写属性,设置元素的所有边框中可见部分的颜色,或为 4 个边分别设置颜色。
border-bottom简写属性,用于把下边框的所有属性设置到一个声明中。
border-bottom-color设置元素的下边框的颜色。
border-bottom-style设置元素的下边框的样式。
border-bottom-width设置元素的下边框的宽度。
border-left简写属性,用于把左边框的所有属性设置到一个声明中。
border-left-color设置元素的左边框的颜色。
border-left-color设置元素的左边框的样式。
border-left-width设置元素的左边框的宽度。
border-right简写属性,用于把右边框的所有属性设置到一个声明中。
border-right-color设置元素的右边框的颜色。
border-right-style设置元素的右边框的样式。
border-right-width设置元素的右边框的宽度。
border-top简写属性,用于把上边框的所有属性设置到一个声明中。
border-top-color设置元素的上边框的颜色。
border-top-style设置元素的上边框的样式。
border-top-width设置元素的上边框的宽度。

4.  CSS边距(margin)

CSS margin(外边距)属性定义元素周围的空间。

        接收的数值:

说明
auto设置浏览器边距。
这样做的结果会依赖于浏览器
length定义一个固定的margin(使用像素,pt,em等)
%定义一个使用百分比的边距

        简写属性

        为了缩短代码,有可能使用一个属性中margin指定的所有边距属性。

        margin:25px 50px 75px 100px;

        上边距为25px
        右边距为50px
        下边距为75px
        左边距为100px
        


        margin:25px 50px 75px;

        上边距为25px
        左右边距为50px
        下边距为75px


        margin:25px 50px;

        上下边距为25px
        左右边距为50px


        margin:25px;

        所有的4个边距都是25px

CSS边距属性总结:

属性描述
margin简写属性。在一个声明中设置所有外边距属性。
margin-bottom设置元素的下外边距。
margin-left设置元素的左外边距。
margin-right设置元素的右外边距。
margin-top设置元素的上外边距。

5. CSS填充(padding)

CSS padding(填充)是一个简写属性,定义元素边框与元素内容之间的空间,即上下左右的内边距。

当元素的 padding(填充)内边距被清除时,所释放的区域将会受到元素背景颜色的填充。

单独使用 padding 属性可以改变上下左右的填充。

        接收的数值:

说明
length定义一个固定的填充(像素, pt, em,等)
%使用百分比值定义一个填充

                

        简写属性
        为了缩短代码,它可以在一个属性中指定的所有填充属性。

                padding:25px 50px 75px 100px;

                上填充为25px
                右填充为50px
                下填充为75px
                左填充为100px


                padding:25px 50px 75px;

                上填充为25px
                左右填充为50px
                下填充为75px


                padding:25px 50px;

                上下填充为25px
                左右填充为50px


                padding:25px;

                所有的填充都是25px

CSS填充属性总结:

属性说明
padding使用简写属性设置在一个声明中的所有填充属性
padding-bottom设置元素的底部填充
padding-left设置元素的左部填充
padding-right设置元素的右部填充
padding-top设置元素的顶部填充

6. 浏览器的兼容性问题

        一旦为页面设置了恰当的 DTD,大多数浏览器都会按照上面的图示来呈现内容。然而 IE 5 和 6 的呈现却是不正确的。根据 W3C 的规范,元素内容占据的空间是由 width 属性设置的,而内容周围的 padding 和 border 值是另外计算的。不幸的是,IE5.X 和 6 在怪异模式中使用自己的非标准模型。这些浏览器的 width 属性不是内容的宽度,而是内容、内边距和边框的宽度的总和。

        虽然有方法解决这个问题。但是目前最好的解决方案是回避这个问题。也就是,不要给元素添加具有指定宽度的内边距,而是尝试将内边距或外边距添加到元素的父元素和子元素。

        IE8 及更早IE版本不支持设置填充的宽度和边框的宽度属性。

        解决IE8及更早版本不兼容问题可以在HTML页面声明 <!DOCTYPE html>即可。

        

特别声明:

本文是由个人学习笔记加上参考自清欢灬的博客_CSDN博客-JS,笔记,点名册领域博主

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值