CSS

盒子模型

字号+ 编辑: Snake 修订: SyncLWT 来源: 慕课网 2023-09-11 我要说两句(0)

CSS中有一种基础设计模式叫盒模型,盒模型定义了Web页面中的元素中如何来解析。CSS中每一个元素都是一个盒模型,包括html和body标签元素。

7、盒子模型

CSS中有一种基础设计模式叫盒模型,盒模型定义了Web页面中的元素中如何来解析。CSS中每一个元素都是一个盒模型,包括html和body标签元素。在盒模型中主要包括width、height、border、background、padding和margin这些属性,而且他们之间的层次关系可以相互影响,盒模型的3D展示图:

 图片16.png

从图中可以看出padding属性和content属性层叠background-image属性,层叠background-color属性,这个是存在的,它们四者之间构成了Z轴(垂直屏幕的坐标)多重层叠关系。但是border属性margin属性、padding属性三者之间应该是平面上的并级关系,并不能构成Z轴的层叠关系

box-sizing:

在CSS中盒模型被分为两种,第一种是w3c的标准模型,另一种是IE的传统模型,它们相同之处都是对元素计算尺寸的模型,具体说不是对元素的width、height、padding和border以及元素实际尺寸的计算关系,它们不同之处是两者的计算方法不一致,原则上来说盒模型是分得很细的,这里所看到的主要是外盒模型和内盒模型,如下面计算公式所示:

  •  W3C标准盒模型

外盒尺寸计算(元素空间尺寸)

element空间高度=内容高度+内距+边框+外距

element空间宽度=内容宽度+内距+边框+外距

内盒尺寸计算(元素大小)

element空间高度=内容高度+内距+边框(heigth为内容高度)

element空间宽度=内容宽度+内距+边框(width为内容宽度)

  • IE传统下盒模型(IE6以下,不包含IE6版本或”QuirksMode下IE5.5+”)

外盒尺寸计算(元素空间尺寸)

element空间高度=内容高度+外距(height包含了元素内容宽度、边框、内距)

element空间宽度=内容宽度+外距(width包含了元素内容宽度、边框、内距)

内盒尺寸计算(元素大小)

element空间高度=内容高度(height包含了元素内容宽度、边框、内距)

element空间宽度=内容宽度(width包含了元素内容宽度、边框、内距)

在CSS3中新增加了box-sizing属性,能够事先定义盒模型的尺寸解析方式。

语法规则:

box-sizing: content-box | border-box | inherit

取值说明:

属性值属性值说明
content-box默认值,其让元素维持W3C的标准盒模型,也就是说元素的宽度和高度(width/height)等于元素边框宽度(border)加上元素内距(padding)加上元素内容宽度或高度(content width/height),也就是element width/hieght=border + padding + content width/hieght
border-box重新定义CSS2.1中盒模型组成的模式,让元素维持IE传统的盒模型(IE6一下版本和IE6-7怪异模式),也就是会所元素的宽度或高度等于元素内容的宽度或高度。从上面盒模型介绍可知,这里的内容宽度或高度包含了元素的border、padding、内容的宽度或高度(此处的内容宽度或高度=盒子的宽度或高度-边框-内距)。
inherit使元素继承父元素的盒模型模式

最为关键的是box-sizing中content-box和border-box两者的区别,他们之间的区别可以通过下图来展示,其对盒模型的不同解析:

index.html代码:

<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>盒子模型</title>
        <link href="style.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <div id="header">
            <h1>Header Content</h1>
        </div>
        <div id="page">
            <div class="main">
                <h1>Main Content</h1>
            </div>
            <div class="sidebar">
                <h1>Siderbar Content</h1>
            </div>
        </div>
        <div id="footer">
            <h1>Footer Content</h1>
        </div>
    </body>
</html>

style.css代码:

h1{
    font-size:20px;
    margin:0;
    color:#fff;
}
#page:after,
#page:before{
    content:"";
    display:table;
}
#page:after{
    clear:both;
    overflow:hidden;
}
#page{
    margin-bottom:20px;
}
#header{
    width:100%;
    background:green;
    margin-bottom:10px;
    padding:20px;
}
.margin{
    width:60%;
    padding:20px;
    background:orange;
    float:left;
}
.sidebar{
    width:38%;
    float:right;
    background:#f36;
    padding:20px;
}
#footer{
    width:100%;
    background:#36f;
    padding:20px;
    clear:both;
}
#header,
.main,
.sidebar,
#footer{
    -webkit-box-sizing:border-box;
    -moz-box-sizing:border-box;
    -o-box-sizing:border-box;
    box-sizing:border-box;
}

阅完此文,您的感想如何?
  • 有用

    0

  • 没用

    0

  • 开心

    0

  • 愤怒

    0

  • 可怜

    0

1.如文章侵犯了您的版权,请发邮件通知本站,该文章将在24小时内删除;
2.本站标注原创的文章,转发时烦请注明来源;
3.交流群: PHP+JS聊天群

相关课文
  • 多个高度相同, 属性inline-block的div,有的div没有内容而有的div有内容,有内容的会下沉?

  • 让整个网页全局变成黑白色调的css代码

  • CSS生成内容

  • CSS3外轮廓属性

我要说说
网上宾友点评
沙发已空