zoukankan      html  css  js  c++  java
  • [转载]css3属性box-sizing:border-box的作用

    http://jastate.com/css3-properties-box-sizingborder-box.html

    定义和用法

    按照w3c school的说法,box-sizing:border-box就是box-sizing 属性允许您以特定的方式定义匹配某个区域的特定元素

    那么这句话是什么意思呢?

    按照常规CSS2来说,我们定义了一个div,那么它的padding+border+本身内容高度=整个DIV高度

    现在box-sizing给了我们一个新的定义,某些情况下,我们不希望padding+border把整个DIV的容器撑大,那么我们可以给DIV一个 高度,假如30px(而实际上我们内容的高度只有20px),那么此时如果有padding或者border,容器将不会被撑大(当然,如果你的 padding+maring+内容高度 超过了30px还是会把容器撑大的)。

    看一个简单的例子:

    有一个input,他的高度是30px,上下4px的padding,还有1px的border

    .controls .tokenfield {
        min-height: 30px;
        padding: 4px 12px;
    }

    但是我们实际的内容呢?

    高度只有20px。

    却别就在这里了,30px=4+4+1+1+20,如果去掉 box-sizing:border-box 属性的话,实际高度应该是30+4+4+1+1=40px

    w3c官方的介绍 点击查看

    CSS3教程:box-sizing属性的理解

    说到 IE 的 bug,一个臭名昭著的例子是它对于“盒模型”的错误解释:在 IE5.x 以及 Quirks 模式的 IE6/7 中,将 border 与 padding 都包含在 width 之内。这为前端工程师的工作平添了不少麻烦,几户每个需要定义尺寸的 box 都要思量一下:是否触发了“盒模型 bug”?

    同时,由于另一撮浏览器对标准的遵从,我们在精确定义一个在有限空间内显示的 box 时,也需要计算一下:留给它的空间只有那么大,刨去 border 和 padding,我们该把它的 width 写成多少呢?

    这种情况在 CSS3 时代有了改善,得益于这个叫做 box-sizing 的属性,它具有“content-box”和“border-box”两个值。

    定义 box-sizing: content-box; 时,浏览器对盒模型的解释遵从我们之前认识到的 W3C 标准;

    定义 box-sizing: border-box; 时,浏览器对盒模型的解释与 IE6 相同;

    为什么说这个属性“迟来”呢?IE 对于盒模型的解释固然不符合 W3C 的规范,但是也有它的好处:无论如何改动 border 与 padding 的值,都不会导致 box 总尺寸发生变化,也就不会打乱页面整体布局。而在 Firefox 等现代浏览器下,如果我们要改变一下 padding 的值,就不得不重新计算 box 的 width。现在 IE6 寿终正寝,这个 CSS 属性未免有些姗姗来迟。

    试用这个新属性,Firefox 请使用 -moz-box-sizing,Safari / WebKit 请使用 -webkit-box-sizing,Opera 直接用 box-sizing 即可。

  • 相关阅读:
    用 Go 实现一个 LRU cache
    【转】入行软件测试,零基础拿OFFER
    【转】IntelliJ idea 高效使用教程,一劳永逸!
    python连接Oracle报错DPI1047
    【转】Pycharm快捷键设置(鼠标滚动控制字体大小)
    【转】Ubuntu:命令行安装可视化界面
    【转】Windows 如何在cmd命令行中查看、修改、删除与添加环境变量
    VAR多变量预测
    windows进程管理
    git关闭filemode
  • 原文地址:https://www.cnblogs.com/Benoly/p/3975458.html
Copyright © 2011-2022 走看看