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

今天转牛角尖了,在做项目的时候,为了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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,790评论 1 92
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,327评论 0 11
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 1,788评论 0 2
  • 1、属性选择器:id选择器 # 通过id 来选择类名选择器 . 通过类名来选择属性选择器 ...
    Yuann阅读 1,655评论 0 7
  • 阅读目录移动开发基本知识点 calc基本用法box-sizing的理解及使用理解display:box的布局理解f...
    张宪宇阅读 1,558评论 0 1