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

    1.概述

    1.1前言

    css盒子模型具备的属性:内容(content)、填充(padding)、边框(border)、边界(margin);而日常生活中所见的盒子也就是能装东西的一种箱子,也具有这些属性,所以用盒子模式来理解。

    生活中的盒子说明:

    内容(content):盒子里装的东西。

    填充(padding):怕盒子里装的东西(贵重的)损坏而添加的泡沫或者其他抗震的辅料。

    边框(border):盒子本身。

    边界(margin):盒子摆放的时候不能全部堆在一起,留一些空隙保持通风,同时也为了方便取出。

    网页中的盒子说明:

    内容(content):文字、图片等元素(一张图片里不能放东西,它自己就是自己的内容,故不是盒子),也可以是小盒子(div嵌套)。

    填充(padding):像素填充,可有可无。

    边框(border):像素展示,可有可无。

    边界(margin):像素填充,可有可无。

    两种盒子的差异:生活中的盒子中东西一般不能大于盒子,否则盒子会被撑坏。而css盒子具有弹性,里边的东西大过盒子本身最多把它撑大,但它不会损坏。

    1.2 组成结构

     以Chrome浏览器中盒子模型为例:

    content:内容区域,文本、图片出现的位置。CSS中的width、height属性直接作用的区域。

    padding:内边距区域,存在于content 和 border 之间的区域。可使用CSS的属性有padding-top、padding-right、padding-bottom、padding-left以及padding。

    border:边框区域,存在于padding 和 margin 之间的区域。在默认布局中border的宽度会设置为0,从而不显示元素的边框。

    margin:外边距区域,控制其他元素与当前元素的边距距离。可使用CSS的属性有margin-top、margin-right、margin-bottom、margin-left以及margin。

    1.2.1 示例

    说明:样式宽度和真实占有宽度,不是同一内容

    2.盒子模型

    标准盒子模型与IE盒子模型差异说明:

    • 在CSS盒子模型(Box Model)规定了属性为:内容(content)、内边距(padding)、边框(border)、外边距(margin)
    • 在CSS的标准盒子模型中,width和height指的是内容区域的宽度和高度。增加内边距、边框和外边距不会影响内容区域的尺寸,但是会增加元素框的总尺寸。IE盒子模型中,width和height指的是内容区域+边框(左右或上下之和)+内边距(左右或上下之和)的宽度和高度。 

    2.1 标准盒子模型

    2.2 IE盒子模型

     

    2.3 盒子说明【标准盒子模型】

    内容:width、height

    盒子样例(真实占有宽高都为:302*302):

    .box1{
             100px;
            height: 100px;
            padding: 100px;
            border: 1px solid red;
       }
    /*盒子真实占有宽度 = 左border + 左padding + width + 右padding + 右border  盒子真实占有高度 = 上border + 上padding + height + 下padding + 下border*/
    .box2{
             250px;
            height: 250px;
            padding: 25px;
            border: 1px solid red;
        }

    盒子模型:

                 

    总结:

    如果想保持一个盒子的真实占有高宽不变,那么加width/height的时候,就要减相应的padding。加padding的时候就要减相应的width/height。因为盒子变胖是灾难性的,会把别的盒子挤下去

    3.元素的宽与高

    默认情况下,CSS中width、height属性是指content(内容)区域的宽高。

    在DOM中,获取元素高宽有以下属性:clientWidth/clientHeight、offsetWidth/offsetHeight、scrollWidth/scrollHeight。

    3.1 clientWidth、clientHeight

    说明:对象内容的可视区的宽度、高度;包含内边距、内容区域的宽度、高度,不包滚动条等边线。

    公式:

    element.clientWidth = padding-left + width + padding-right
    element.clientHeight = padding-top + height + padding-bottom

    示例:

    3.2 offsetWidth、offsetHeight

    说明:对象整体的实际宽度、高度;包含了边框、内边距、内容区域以及滚动条等范围的宽度、高度;

    公式:

    element.offsetWidth = border-left + padding-left + width + padding-right + border-right
    element.offsetHeight = border-top + padding-top + height + padding-bottom + border-bottom

     示例:

    3.3 scrollWidth、scrollHeight

    说明:与clientWidth、clientHeight类似(包含内边距、内容区域,但不包括滚动条),不同的是scrollWidth、scrollHeight与元素的overflow样式属性息息相关:

    当块级元素的内容超出元素大小时,其内容会根据overflow设定的值出现滚动条或内容溢出,scrollWidth、scrollHeight包含了这些不可见的内容区域。

    示例:

    4. box-sizing

    在默认情况下,CSS中的width和height属性的值只会应用到元素的content(内容区域),而box-sizing属性可修改此默认范围。

    box-sizing的值有content-box(默认值)和border-box

    4.1 box-sizing:content-box

    说明:表示CSS中的width和height属性的值只会应用到元素的内容区域。

    如设置一个元素的width为200px,那么只是这个元素的内容区域宽度有200px。

    4.2 box-sizing:border-box

    说明:表示元素的边框和内边距的范围包含在CSS中的width、height内。

    如设置一个元素的width为200px,那么此元素内容区域的宽度 = 200 - border - padding。

    5. jQuery中元素宽度(高度)

    jQuery提供了以下几种获取元素的宽度方法:

    $(element).width():获取元素content(内容)区域的宽度。若元素的含有 box-sizing: border-box ,会减去相应的padding、boder。

    $(element).innerWidth():获取元素 content区域 + padding 的宽度。

    $(element).outerWidth():获取元素  content区域 + padding + boder 的宽度。

    $(element).outerWidth(true):获取元素  content区域 + padding + boder + margin 的宽度。

    示例图

  • 相关阅读:
    JavaBean递归拷贝工具类Dozer
    SpringMVC自定义视图Excel视图和PDF视图
    CentOS7使用firewalld打开关闭防火墙与端口[转]
    区分JS中的undefined,null,"",0和false
    环比同比
    JavaScript 浮点数陷阱及解法
    一致性哈希算法(Consistent Hash)的黑科技
    Lua与C交互简明教程
    Twitter-Snowflake,64位自增ID算法详解
    Hystrix使用入门手册(中文)
  • 原文地址:https://www.cnblogs.com/ajuan/p/9568180.html
Copyright © 2011-2022 走看看