zoukankan      html  css  js  c++  java
  • CSS盒模型

    上图便是经典的盒模型的图。文档的每个元素被构造成文档布局内的一个矩形框,框每层的大小都可以使用一些特定的CSS属性调整。

    1.1      width/ height

    width 和 height 设置内容框(content box)的宽度和高度。内容框是框内容显示的区域(包括框内的文本内容,以及表示嵌套子元素的其它框)。还有其他属性可以更巧妙地处理内容的大小(设置大小约束而不是绝对的大小),这些属性包括min-width、max-width、min-height 和 max-height。

    1.2      padding

    padding 表示一个 CSS 框的内边距(这一层位于内容框的外边缘与边界的内边缘之间)。该层的大小可以通过简写属性padding 一次设置所有四个边,或用 padding-top、padding-right、padding-bottom 和 padding-left 属性一次设置一个边。

    1.3      border

    CSS 框的边界(border)是一个分隔层,位于内边距的外边缘以及外边距的内边缘之间。边界的默认大小为0(从而让它不可见),不过我们可以设置边界的厚度、风格和颜色让它出现。 border 简写属性可以让我们一次设置所有四个边,例如  border: 1px solid black; 但这个简写可以被各种普通书写的更详细的属性所覆盖:

    border-top, border-right, border-bottom, border-left: 分别设置某一边的边界厚度/风格/颜色。

    border-width, border-style, border-color: 分别仅设置边界的厚度/风格/颜色,并应用到全部四边边界。

    你也可以单独设置某一个边的三个不同属性,如 border-top-width, border-top-style, border-top-color等。

    1.4      margin

    外边距(margin)代表 CSS 框周围的外部区域,称为外边距,它在布局中推开其它 CSS 框。其表现与 padding 很相似;简写属性为 margin,单个属性分别为 margin-top、margin-right、margin-bottom 和 margin-left。

    注意: 外边距有一个特别的行为被称作外边距塌陷(margin collapsing):当两个框彼此接触时,它们的间距将取两个相邻外边界的最大值,而非两者的总和。

    1.5      需要注意的地方

    1、默认情况下background-color/background-image 延伸到了边界的边沿(the edge of the border)。背景色和背景图不会延伸到margin区域。

    2、如果内容框变得比示例输出的窗口大,它将从窗口溢流,然后滚动条将会出现允许你滚动窗口来查看盒子剩余的内容 。你可以使用overflow属性来控制溢流。

    3、盒的高度不监视百分比的长度;框的高度总是采用框内容的高度,除非指定一个绝对的高度(如:px 或者em),它会比在页面上默认是100%高度更实用。

    4、边界也忽略百分比宽度设置。

    5、使用百分比设置margin或padding的值(border不能根据百分比设置),是按照父元素的宽度为基数来设置的。

    6、盒子的outline属性是一个看起来像是边界但又不属于盒模型的东西。它的行为和边界差不多,但是并不改变盒的尺寸(更准确的说,轮廓被勾画于在框边界之外,外边距区域之内)。而boder属性会改变盒的尺寸。

    7、框的总宽度是width, padding-right, padding-left, border-right, 以及 border-left 属性之和。在一些情况下比较恼人(例如,假使你想要一个框占窗口宽度的50%,但边界和内边距是用像素来表示时该怎么办?),为了避免这种问题,有可能使用属性box-sizing来调整盒模型。使用值border-box,它将框模型更改成这个新的模型:

     

    1.6      盒类型

    之前我们说的所有对于盒的应用都表示的是块级元素的,然而CSS还有一些表现不同的其他盒类型。盒类型应用通过指定display属性,这个属性有很多的属性值,下面介绍三个最普遍的类型:block, inline, and inline-block。

    块框( block box)是定义为堆放在其他框上的框(例如:其内容会独占一行),而且可以设置它的宽高,之前所有对于框模型的应用适用于块框 ( block box)

    行内框( inline box)与块框是相反的,它随着文档的文字(例如:它将会和周围的文字和其他行内元素出现在同一行,而且它的内容会像一段中的文字一样随着文字部分的流动而打乱),对行内盒设置宽高无效,设置padding, margin 和 border都会更新周围文字的位置,但是对于周围的的块框( block box)不会有影响。

    行内块状框(inline-block box) 像是上述两种的集合:它不会重新另起一行但会像行内框( inline box)一样随着周围文字而流动,而且他能够设置宽高,并且像块框一样保持了其块特性的完整性,它不会在段落行中断开。(在下面的示例中,行内块状框会放在第二行文本上,因为第一行没有足够的空间,并且不会突破两行。然而,如果没有足够的空间,行内框会在多条线上断裂,而它会失去一个框的形状。)

    关于上述介绍的例子:

    <!DOCTYPE html>

    <html lang="en">

    <head>

    <meta charset="UTF-8">

    <title>盒模型的display</title>

    <style>

        p {

            padding : 1em;

            border  : 1px solid black;

        }

     

        span {

            padding : 0.5em;

            border  : 1px solid green;

     

            /* That makes the box visible, regardless of its type */

            background-color: yellow;

        }

     

        .inline       { display: inline;       }

        .block        { display: block;        }

        .inline-block { display: inline-block; }

    </style>

    </head>

    <body>

    <p>

        Lorem ipsum dolor sit amet, consectetur adipiscing elit.

        <span class="inline">Mauris tempus turpis id ante mollis dignissim.</span>

        Nam sed dolor non tortor lacinia lobortis id dapibus nunc.

    </p>

     

    <p>

        Lorem ipsum dolor sit amet, consectetur adipiscing elit.

        <span class="block">Mauris tempus turpis id ante mollis dignissim.</span>

        Nam sed dolor non tortor lacinia lobortis id dapibus nunc.

    </p>

     

    <p>

        Lorem ipsum dolor sit amet, consectetur adipiscing elit.

        <span class="inline-block">Mauris tempus turpis id ante mollis dignissim.</span>

        Nam sed dolor non tortor lacinia lobortis id dapibus nunc.

    </p>

    <script src="./index.js"></script>

    </body>

    </html>

  • 相关阅读:
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_5_InvalidClassException异常_原理
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_4_transient关键字_瞬态关键字
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_3_对象的反序列化流_ObjectInputStream
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_2_对象的序列化流_ObjectOutputStream
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_5_InputStreamReader介绍&代码实现
    Linux启动流程
    静态库和动态库的区别
    uboot各种目录下的文件作用
    编译选项含义
    C++转换构造函数与类型转换构造函数
  • 原文地址:https://www.cnblogs.com/ndos/p/8322397.html
Copyright © 2011-2022 走看看