HTML中的CSS盒子模型边界(box-model)问题详解

HTML中的元素我们把他分为一个一个的盒子,盒子里面可以再放盒子,也可以放置文本,默认情况下,我们给盒子设置maring、padding和border的时候,不管设置的是什么单位的值,这些值都会计算在盒子的总体面积以内,这虽然是很基础的CSS技术,但是很多编写代码的人却不甚了解,导致网页错位却不知道怎么解决。

HTML中的CSS盒子模型边界(box-model)问题详解

我一直到很不喜欢CSS和填充间距边框的关系,你忙着去定义宽度来满足你的网格布局比例,然后接下来你开始添加文本和设置适量的间距和填充,你发觉你的盒子的布局已经乱了。
假如说我定义一个DIV,他的宽度的200px,然后我给他设置20PX的margin,让他和其他的元素中间有所间距,但是此时,这个DIV的宽度已经不是200px了,而是240px,这是一种糟糕的情况,为了满足之前的布局效果,我不得不在此修改这个div的宽度为160px。

盒子模型边界

CSS中其实有这类设置方法,那就是box-sizing他定义了允许您以特定的方式定义匹配某个区域的特定元素,假如您需要并排放置两个带边框的框,可通过将 box-sizing 设置为 “border-box”。这可令浏览器呈现出带有指定宽度和高度的框,并把边框和内边距放入框中,也就是说一旦给元素设置box-sizing:border-box以后,不管你给这个元素设置多少的填充间距和边框,他的宽度永远不会改变,这在很多的CSS框架中都是这么设定的。

html {
  box-sizing: border-box;
}
*, *:before, *:after {
  box-sizing: inherit;
}

这段代码给元素设置你想要的盒模型,特别是吸顶导航的设计,需要设置宽度为100%,但是左右又需要一定的距离来使内容不至于太靠边了,如果是默认情况下,会出现横向的滑条。

浏览器的支持

由于浏览器的支持,这项建议是只支持IE8及以上的IE浏览器,其他浏览器需要添加浏览器厂商前缀,火狐版本小于28的浏览器需要添加-moz-前缀,安卓手机浏览器需要添加-webkit-前缀,你可以找到更多关于一盒尺寸polyfill IE6和7的信息在html5please.com/#box-sizing。

它安全吗?

可以说,使用这个方法非常的安全,jQuery工程相当大了,如前所述,浏览器支持良好。和一些项目使用默认布局模型,including the WebKit Web Inspector,我听到从荷兰yathura刺前端开发经验:

We’ve been using *{box-sizing: border-box;} in one of my projects (deployed in production, averaging over 1mln visits a month) at work for about a year now, and it seems to be holding up just fine. The project has been tested in IE8 & 9 and the latests Firefox and Chrome versions and we’ve had no problems. All jQuery (+UI) offset calculations and animations run fine, even in any element we’ve displayed as inline-block. As of late we’ve started testing the project on mobile devices (iPhone, iPad and Android) and we’ve had no issues regarding box-sizing with any of them yet, so it seems to work just fine.

我最喜欢的一个用例,边界盒解决了网格布局的问题,我想把我的格50%或20%列,但要加padding通过PX或EM没有CSS的即将到来calc()这是不可能的,除非你使用边界盒是那么容易)另一个很好的运用100%宽度然后想添加一个填充元素。
运行性能
对于这个属性,你可能听说过给所有元素设置,可能会降低其浏览器的渲染效果,增加渲染网页的时间,其实现在的电脑配置和浏览器的提升,你不需要担心这会给你的网页带来多大的烦恼,如果想要提升网页的性能,你只需要压缩你的CSS和js文档,开启网页Gzip压缩,这些方法将更加有效。
希望你会发现这是一个更自然的布局模型。
第三方内容的调整
任何第三方控件添加内容直接进入页面可能需要额外注意。iframe中的任何部件(如Disqus的新主题)是从父页面的布局风格自然绝缘。如果您需要进行调整,第三方内容你可以申请box-sizing: content-box;对部件和它的后代。这可能是不平凡的特别是表单控件的边界框默认情况下,所以你也要考虑到。

时间: 2024-11-07 03:23:10

HTML中的CSS盒子模型边界(box-model)问题详解的相关文章

深入理解CSS盒子模型

深入理解CSS盒子模型 前言:前阵子在做一个项目时,在页面布局方面遇到了一点小问题,于是上stackoverflow上求助.ifaou在帮助我解决我问题的同时,还推荐我阅读一篇有关CSS盒子模型的文章<The CSS Box Model>,阅读之后受益匪浅,才知道自己对盒子模型知识还是如此欠缺.恰逢学期末,项目验收后暂时告一段落,有空闲的时间.于是想把这篇文章翻译出来,一方面再给自己一点挑战和锻炼,另一方面也给大家参考,让更多的人受益. 这篇文章适合初级web设计朋友,让你对盒子模型有更近一步

CSS3灵活的盒子模型(Flexible Box Module)

CSS3 标准里引入了一些新的盒子模型参数,在 CSS2 的基础上,我们将能更灵活地调整页面上各个容器的大小和位置.详细的说明可以看这个文档. 通过学习和测试,我发现这种新的盒子模型布局对建立自适应布局的页面带来很大的好处.在这篇文章中,我的所有例子都基于以下 HTML代码: 以下为引用的内容: <body> <div id="box1">1</div> <div id="box2">2</div> <

CSS盒子模型

CSS盒子模型示意图: 我们在网页设计中的一些常用属性名:内容(content).填充(padding).边框(border).边界(margin),CSS盒子模型均具备这些属性. 例子: html文件内容: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head

[HTML/CSS]盒子模型,块级元素和行内元素

目录 概述 盒子模型 块级元素 行内元素 可变元素 总结 概述 在div+css中,了解块级元素和行内元素还是非常有必要的,比如:对行内元素使用width属性就会失效.虽然自己不是做前端的,但是,在项目中,曾经也弄过从前端布局,也吃过这方面的亏.今天,群里有朋友问起这个,就趁着学习一下,也算是查漏补缺吧,虽然,谈不上精通,但是了解,还是很有必要的. 盒子模型 css盒子模型分为两种,一种是遵循w3c标准的标准盒子模型,另外一种就是IE盒子模型. 标准盒子模型 IE盒子模型 通过上面两张图可以看出

CSS盒子模型实例

实例要求:一个盒子内有多个图片,图片的边距一致,并能自动换行,实现图片橱窗效果.最终效果图见文章结尾. 实现思路: 基本结构: <div> <ul> <li><img src="" /></li> </ul> </div> html文件: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "h

为excel vba中添加、删除模块并插入全过程图文详解

  为excel vba中添加.删除模块并插入全过程图文详解         方法/步骤 1.点按快速启动栏excel 程序图标 进入excel 界面 点击选中任意单元格 然后按alt+f11 进入vbe界面 2.点击菜单栏 插入命令 在弹出的活动菜单中点按模块命令 3.另一种方式插入模块的方法可以在工程资管管理器中鼠标点击空白处 右键单击鼠标 在弹出的快捷菜单中选择插入命令 二级菜单中选择模块命令 4.如图所示模块1.模块2分别是通过菜单栏插入命令 和工程资源管理器点击右键创建的模块 5.如果

Eclipse中改变默认的workspace的方法及说明详解_java

eclipse中改变默然的workspace的方法可以有以下几种: 1.在创建project的时候,手动选择使用新的workspace,如创建一个web project,在向导中的Location选项,取消使用"Use default location",同时在下面选择新的workspace. 2.在file菜单中选择switch workspace项,即可选择一个新的workspace 3.在eclipse安装目录下configuration/.settings目录下的 org.ec

Android中Spinner(下拉框)控件的使用详解_Android

android给我们提供了一个spinner控件,这个控件主要就是一个列表,那么我们就来说说这个控件吧,这个控件在以前的也看见过,但今天还是从新介绍一遍吧. Spinner位于 android.widget包下,每次只显示用户选中的元素,当用户再次点击时,会弹出选择列表供用户选择,而选择列表中的元素同样来自适配器.Spinner是View类得一个子类. 1.效果图 2.创建页面文件(main.xml) <Spinner android:id="@+id/spinner1" and

js中使用使用原型(prototype)定义方法的好处详解_javascript技巧

经常在前端面试或是和其他同行沟通是,在谈到构造在JS定义构造函数的方法是最好使用原型的方式:将方法定义到构造方法的prototype上,这样的好处是,通过该构造函数生成的实例所拥有的方法都是指向一个函数的索引,这样可以节省内存. 当然,这种说法没有任何问题,只是在实现上,并非只有使用prototype的方式才能达到这样的效果,我们可以将方法以函数的形式定义在构造函数之外,然后在构造函数中通过this.method = method的方式,这样生成的实例的方法也都通过索引指向一个函数,具体如下: