CSS3总结四:盒模型(box)

  • 盒模型:标准盒模型、混杂盒模型

  • 什么时候会触发混杂模式?
  • 为什么要混杂模式渲染规则盒模型?
  • box-sizing:content-box、border-box
  • 关于盒模型的一些其他样式和属性值

一、盒模型:标准渲染规则盒模型、混杂模式渲染规则盒模型

标准渲染模式盒模型的渲染规则:DOM.width = border-left-width + padding-left + width(content-width) + padding-right + border-right-width;(dom.width=边框+内边距+width)

混杂渲染模式盒模型的渲染规则:DOM.width = width = border-left-width + padding-left + content-width + padding-right + border-right-width;(dom.width=width=边框+内边距+content)

简单的来说就是在标准盒模型中,元素的实际宽度等于边框宽度、内边距宽度、内容宽度(css的width值)之和。

但是在混杂模式下的盒模型,元素的宽度就是css的width的值,在这种模式下css的with属性的值包含了边框和内边距的宽度。

什么时候会触发混杂渲染模式?

如果来严格的来回答这个问题的话会比较复杂,这里我仅仅以我个人的理解来简单的解释这个问题。混杂渲染模式通俗的说就是HTML文档未按照标准文档模型解析渲染,导致这一原因的可能性有:

1.浏览器内核不支持的标签和css属性,主要出现在老版本的浏览器时代和内核中。

2.文档声明类型无法解析,出现这种情况的主要有两种:DOCTYPE声明书写错误,或者浏览器内核无法解析该版本的DOCTYPE声明(在HTML5标准之前浏览器内核遇到不支持的标记语言的文档声明)。

触发混杂模式的原因简单的来说,就是浏览器遇到不认识的标签或者样式属性,无法正常解析采用的一种默认解析方式,这种解析会导致页面渲染不出预期的页面布局和渲染效果,就像是上图中浏览器混杂模式下解析DOM时宽度的计算方式与标准模式下解析DOM时的宽度计算不相同的情况。

关于浏览器的混杂模式的更多可以参考一下内容:

为什么要了解混杂模式渲染规则盒模型?

在IE6的内核中,采用的盒模型解析规则就是混杂模式,虽然现在的开发中已经几乎不会考虑兼容IE6,但是并不代表混杂模式下盒模型解析方式就不好的,相反,这个模式被CSS3定义到了标准中,可以使用CSS3属性box-sizing:border-box来实现。这个属性的默认值是content-box,也就是标准渲染模式盒模型。

假设有需求是元素的内容宽度不确定,但又要有相对确定的元素宽度,这时候采用标准盒模型就会显得捉襟见肘了,而采用混杂模式渲染规则盒模型就非常方便来解决这个问题。下面通过具体的一些示例来了解混杂模式渲染规则盒模型,也就是CSS3中的box-sizing:border-box的具体示例:

box-sizing:content-box、border-box

IE8就开始支持了,兼容性问题就不大了,下面来看示例:

abc

abc

代码:

 1 <div class="warpper">
 2     <div class="content">abc</div>
 3     <div class="content">abc</div>
 4 </div>
 5 <!--css-->
 6 /* 父级宽度不固定、两个子元素为块级元素横排展示
 7  * 子元素内边距固定为5px、内容宽度不固定
 8  */
 9 .warpper{
10     width: 300px;/*假设宽度受其他内容或行为发生动态变化*/
11     height: 100px;
12     border: 1px solid #000;
13 }
14 .warpper::after{
15     content: "";
16     clear: both;
17     display: block;
18 }
19 .content{
20     width: 50%;
21     height: 100%;
22     background-color: red;
23     float: left;
24     padding: 5px;
25
26     box-sizing: border-box;
27 }
28 .content:first-of-type{
29     background-color: #ffa;
30 }

这样当warpper的大小动态变化时就不需要计算子级元素的宽高了,减少了js操作DOM的样式属性,提高了性能。box-sizing:border-box用来解决输入框的宽度刚好等于容器的宽度,并且设置适当的内边距,就是最佳选择。

关于盒模型的一些其他样式和属性值?

  • overflow:scroll/auto;

html\css\javascripthtml\css\javascripthtml\css\javascripthtml\css\javascripthtml\css\javascripthtml\css\javascripthtml\css\javascripthtml\css\javascripthtml\css\javascripthtml\css\javascripthtml\css\javascript

html\css\javascripthtml\css\javascripthtml\css\javascripthtml\css\javascripthtml\css\javascripthtml\css\javascripthtml\css\javascripthtml\css\javascripthtml\css\javascripthtml\css\javascripthtml\css\javascript

 1 <div class="scroll">
 2 <div></div>
 3 <div></div>
 4 </div>
 5 <!--css-->
 6 /*
 7 * 内容超出部分采用滚动条呈现
 8 * overflow:scroll;
 9 * overflow:auto;--与scroll几乎无差异
10 */
11 .scroll{
12     width: 200px;
13     height: 150px;
14     overflow: scroll;
15     /* overflow: auto; */
16 }
17 .scroll>div{
18     width: 300px;
19 }

overflow可以拆分成overflow-x和overflow-y,只要设置了任意一个值为非visible(默认值),另一个的值就会默认为auto;

原文地址:https://www.cnblogs.com/ZheOneAndOnly/p/10847577.html

时间: 2024-08-01 18:01:25

CSS3总结四:盒模型(box)的相关文章

CSS3伸缩布局盒模型 - Flexbox基础知识

我们知道在CSS2中,可以使用“浮动”和“定位”来改变盒子在文档流中的显示方式.这两种方式也是目前广泛使用的布局方式,但是在实践过程中会发现有些特殊的布局没法或者很难通过这两种方式来实现.在CSS3中映入了伸缩布局盒模型的概念,这样可以使得某些难以实现的布局变得非常轻松. 使用Flexbox(Flexible Box)可以很好解决以下问题: 1,作为容器的盒子的宽度.高度等可以被其子元素改变.主要体现在改变子元素的宽高来填充可用空间或者防止溢出父元素 2,可以改变子元素的布局方向或者顺序. Fl

盒模型Box Model(浮动)

一.标准盒模型的大小:border+padding+content(width) 怪异盒模型大小:padding+border 二.display inline  默认,且变为行由内容撑开 block  变为块元素,前后会自带有换行符 none  不会显示元素(只是隐藏掉,但还在布局中) inline-block  不设置宽度,有内容撑开:行标签会实现宽高到校:块标签已不是独占一行 table  以表格的表现显示 三.float(浮动)用来在一定宽度中实现一行输出多个块 除非添加margin,否

IT兄弟连 HTML5教程 CSS3属性特效 盒模型阴影

除了为文字添加阴影,我们还可以为盒模型添加阴影.盒模型阴影的属性名称为box-shadow,此属性与text-shadow一样有4个值,前两个值分别表示水平方向位移距离和垂直方向的位移距离,第三个值表示阴影的模糊半径(包含0及以下的值均表示无模糊),最后一个则是阴影的颜色.前Chrome 16+,FireFox8+,Opera11.6+,Safari5.1+以及IE9+均可直接使用box-shadow,而不需要-webkit-诸如此类的前缀. 语法格式如下所示: box-shadow:[inse

css盒模型 Box Model

属性:内容(content).内边距(padding).边框(border).外边距(margin), CSS盒子模式都具备这些属性. CSS盒子模型就是在网页设计中经常用到的CSS技术所使用的一种思维模型. 盒子的分类:不同的元素产生的盒子类型可能不同, 一个元素,产生什么样的盒子,取决于它CSS的display属性 display:none:不生成盒子 display:inline:行盒 display:block:块盒 盒子组成: Margin(外边距) - 清除边框外的区域,外边距是透明

学习css3的弹性盒模型

Flexbox通常能让我们更好的操作他的子元素布局,例如: 如果元素容器没有足够的空间,我们无需计算每个元素的宽度,就可以设置他们在同一行: 可以快速让他们布局在一列: 可以方便让他们对齐容器的左.右.中间等: 无需修改结构就可以改变他们的显示顺序: 如果元素容器设置百分比和视窗大小改变,不用提心未指定元素的确切宽度而破坏布局,因为容器中的每个子元素都可以自动分配容器的宽度或高度的比例. 亮点: 宽度自适应.开发比table 和 float 方便快捷多很多. 注意兼容性: .nav{     d

css3中 弹性盒模型布局之box-flex

box-flex:也就是让子容器针对父容器的宽高属性按照一定的规则来划分 Eg: html代码: <div class="wrap"> <div class="box1">01</div> <div class="box2">02</div> <div class="box3">03</div> </div> CSS样式: <

使用css3的flex盒模型来实现两栏布局(左侧固定宽度,右侧自适应宽度)

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <style> .parent{ height:500px; border:1px solid #222; display:flex;/*设为伸缩容器*/ flex-flow:row;/*伸缩项目单行排列*/ } .stable{ width:200px;/*固定宽度*/ border:1px solid #ccc; ma

CSS3伸缩布局盒模型 - 新版本Flexbox的使用

Flexbox是一个相当优秀和新颖的布局方式,因此会碰到很多兼容性问题.Flexbox的规范工作也进行了很多年了,不同浏览器对不同版本的实现程度也不一致.但是大体可以分为旧版本和新版本两个版本(混合版本仅支持IE10,不予考虑),对于这两个版本的支持情况可以参照下图 更多详细的兼容性情况可以参照“Can I use”上的情况,戳这里 如果仅仅只用于移动端设计的话,基本上可以不用考虑兼容性问题,在Android和IOS上基本上也可以完美支持.新版本的Flexbox并没有什么布局上的改进,只是语法和

CSS3中的弹性流体盒模型技术详解(二)

在上一篇文章<CSS3中的弹性流体盒模型技术详解(一)>里,我给大家列出了,从css1到css3各版本中盒子模型的基本元素.本篇我会把余下的属性进行详细讲解. box-pack 作用:用来规定子元素在盒子内的水平空间分配方式 box-pack 语法:box-pack: start | end | center | justify; start 对于正常方向的框,首个子元素的左边缘吸附在盒子的左边框显示 对于相反方向的框,最后子元素的右边缘吸附在盒子的右边框显示 end 对于正常方向的框,最后子

CSS3实战开发: 弹性盒模型之响应式WEB界面设计

各位网友大家好,如果你已经阅读过我先前写的关于CSS3弹性盒模型的实例演示,相信你对CSS3弹性盒模型属性知识点应该已经有了一个非常深刻的映像. 从本篇文章开始,我将带领大家,手把手地教大家如何来开发一个适合移动端浏览器的弹性盒模型的响应式页面.同时实战开发中的案例代码可以作为你项目中的精简框架了. 当你学习完成<CSS3实战开发: 弹性盒模型之响应式WEB界面设计>这个系列教程之后,相信你对目前比较流行的前端轻量级框架 Bootstrap等会有一个深刻的认识. Bootstrap(弹性流体布