美文网首页
2px引发的血案----box-sizing

2px引发的血案----box-sizing

作者: 赵BW | 来源:发表于2017-04-15 09:27 被阅读0次

今天转牛角尖了,在做项目的时候,为了2px的差异,费了一上午的时间。我来说说事件的经过吧。


本来今天是为了实现一个按钮的样式。我本来可以用div、a标签这些来实现的结果。大脑抽风,选用了button。然后就进坑了。现在想起来好想哭。是蠢得哭。给大家先看看效果。

  <!DOCTYPE html>
  <html>
  <head>
    <meta charset="utf-8">
    <title>button</title>
    <style type="text/css">
        *{
          padding: 0;
          margin: 0;
        }
        .btn{
          width: 300px;
          height: 100px;
        }
    </style>
  </head>
  <body>
      <button type="button" class="btn">Click Me</button>
  </body>
  </html>

代码运行后的效果


button标签

结果出来了。我设置的width:300px,height:100px。然后少了2px。我就奇怪了。当时代码写的复杂,不像现在写的这么简单。我怀疑是前面的样式,可能影响到了。就开始检查。往往没想到啊。就这样浪费了好多时间。


后来我把button的标签换掉了。换成了div。结果又对了。

div标签

我就知道了。可能是盒模型上有什么变化。我简单的回忆下盒模型

标准的盒模型 IE盒模型

我当时就想我的button肯定用了IE的盒模型。但是我用的是谷歌浏览器啊。为什么会是IE的盒模型。我们接着查资料。没事多谷歌


我查到了一个属性可以设置盒模型的类型:box-sizing。

  • box-sizing 属性用于更改用于计算元素宽度和高度的默认的 CSS 盒子模型。可以使用此属性来模拟不正确支持CSS盒子模型规范的浏览器的行为。
正式的语法:

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

content-box

默认值,标准盒子模型。 width 与 height 只包括内容的宽和高, 不包括边框(border),内边距(padding),外边距(margin)。注意: 内边距, 边框 & 外边距 都在这个盒子的外部。 比如. 如果 .box {width: 350px}; 而且 {border: 10px solid black;} 那么在浏览器中的渲染的实际宽度将是370px;

  • 尺寸计算公式:
    width = 内容的宽度,height = 内容的高度。
  • 宽度和高度都不包含内容的边框(border)和内边距(padding)。

border-box

width和height属性包括内容,填充和边框,但不包括边距。这是当文档处于 Quirks模式 时Internet Explorer使用的盒模型。注意,填充和边框将在盒子内 , 例如, .box {width: 350px; border: 10px solid black;}
导致在浏览器中呈现的宽度为350px的盒子。内容框不能为负,并且被分配到0,使得不可能使用border-box使元素消失。这里的维度计算为:
width = border + padding + 内容的 width
height = border + padding + 内容的 height


在html中,button元素的box-sizing属性默认是border-box,大部分其他元素的box-sizing的属性则都是content-box。

结束语

所以我就是踩到box-sizing这个坑了。然后找问题,花费了半天时间。当初发现了2px的差异。本来可以跳过去不管的,心里想的,2px差异不大。结果自己不放过自己。不过以后就有经验了。以后样式初始化。要小心box-sizing

相关文章

网友评论

      本文标题:2px引发的血案----box-sizing

      本文链接:https://www.haomeiwen.com/subject/dghnattx.html