CSS基础深入之细说盒子模型

摘要:
每个框都配备了一个标准边距,在中文中称为外边距或外填充,例如文本或框(无论是内联还是块)。拿一个栗子<边距示例;UL{背景;}LI{颜色;背景;边距;填充;列表样式;边框颜色;}<我没有边框<S我有边框<

Html任何一个元素(element)都可以当成一个盒子(box)来看待,可以结合现实中的盒子来理解下文,下文其中一些单词应该是通俗易懂的需要记录的单词。

基本情况

每一个盒子都有一个内容区域(content area),例如盒子里的一堆文字或者一张图片的边界,其周围是具有一定宽度的padding area,border area,和margin area,还有cotent area(类似于下图中线条的中间跑道部分)。

每个area都是具有一定宽度或高度的,譬如在上下方的就是占用高度,在两侧的就是占用宽度。其边缘我们称之为edge(类似于下图中的线条部分,其实是没有占空间的,类似于area的最外层意思)。content area的边缘称之为content edge 或者 inner edge,padding area的边缘称之为padding edge,Border area的边缘称之为border edge,Margin area的边缘称之为margin edge or outer edge。

每个盒子标配margin-中文称之为外边距或外补白,padding内边距内补白,border边框三道,最里头才是我们的内容区域啦,比较形象的说明可见下图:

Image illustrating the relationship between content, padding, borders, and margins.

盒子的margin,padding,border可以分成四个方向,上,下,左,右,如上图,LM代表Left Margin,LB代表Left Border,LP代表Left Padding.

以上就是一个盒子模型的基本常识,也是页面CSS布局的基本单元,Margin,Padding,Border默认不占空间,其值由用户设定,比较简单,最重要的莫过于Content Area内容区域宽高的计算,Content Area的高度Content Area Height称之Content Height,响应宽度称之Content Wdith,不仅关乎自己占多大地盘,也关乎子孙后代是否有足够的地盘去发挥展示,影响其最终结果的主要有以下几因素:

自身Width 和 Height属性,我们所说的一般的Width和Height就是Content Width,Content Height,注意一点的是即使用户Css没指定其值,它也有自己的初始值auto,这是最基本的一点。

是否包含子元素内容,如文本或者还是一个box(不管是inline还是block),也就是子元素的可能宽高计算会影响到父元素;

自身display属性值类型,譬如table类型,如果inline类型的计算规则跟block的也不一样;

等等,关于这块的计算不在本文的范围内,这块也比较复杂,后期会进行专门讲解,名字暂定,any box之其宽高计算。

另外需要注意一点的是,Background的设置只会影响到Border area,Padding Area,Content Area,至于Margin Area的背景总是透明的。

举个栗子

CSS基础深入之细说盒子模型第2张CSS基础深入之细说盒子模型第3张
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
  <HEAD>
    <TITLE>Examples of margins, padding, and borders</TITLE>
    <STYLE type="text/css">
      UL { 
        background: yellow; 
        margin: 12px 12px 12px 12px;
        padding: 3px 3px 3px 3px;
      }
      LI { 
        color: white;                
        background: blue;            
        margin: 12px 12px 12px 12px;
        padding: 12px 0px 12px 12px; 
        list-style: none            
      }
      LI.withborder {
        border-style: dashed;
        border-width: medium;      
        border-color: lime;
      }
    </STYLE>
  </HEAD>
  <BODY>
    <UL>
      <LI>我没有border
      <LI class="withborder">S我有border
    </UL>
  </BODY>
</HTML>
View Code

Chrome下会是这个样子:

CSS基础深入之细说盒子模型第4张

解读这个结果:

  1. 每一个li box(Html学科称element/node,css学科称box)的content area
  2. 第一个li box的margin-bottom和第二个的margin-top的margin发生了margin合并现象,只有在同一个BFC环境下而且是上下margin才会发生margin合并。
  3. 可以看到margin的背景色是透明的,如果其在另一个content area下且此area有背景色的话,那看到的它就是这个颜色。
  4.  实际一个盒子的宽高,不仅仅只是Content Height,还包括其它,Box Height=Content Height+Top Padding Height+Top Margin Height+Top Border Height,宽度同理。譬如一条Css{100px;margin:1px;border:1px,padding:1px;},box其实际占用的宽度是103px而不是100.这是一个容易引起误解的地方,这点一定需要注意。

CSS如何使用

  Margin

CSS基础深入之细说盒子模型第5张CSS基础深入之细说盒子模型第6张
body { margin: 2em }         /* all margins set to 2em */
body { margin: 1em 2em }     /* top & bottom = 1em, right & left = 2em */
body { margin: 1em 2em 3em } /* top=1em, right=2em, bottom=3em, left=2em */
View Code

  说明:一个是简写代表的含义还有就是CSS具有优先级,最终上面的与下面效果等效:

CSS基础深入之细说盒子模型第7张CSS基础深入之细说盒子模型第8张
body {
  margin-top: 1em;
  margin-right: 2em;
  margin-bottom: 3em;
  margin-left: 2em;        /* copied from opposite side (right) */
}
View Code

  需要注意的一点是,同width,height属性一样,margin-top和margin-bottom不能应用于span类非可替换行内块级别的box上,即应用不起作用,

  其它属性如margin-right,padding,border不受限制。

  Padding

    简写顺序与margin同,其它没啥可说的

  Border

    没啥可说的

神奇的Margin合并效果

 

Margin或Padding,如何选择?


如果有border插一脚,包含Border的话,其实还是很好选择的,不同的选择,渲染出来的模样也会不一样。

Margin可以负值,可以实现类似于position定位的功能,能带着内容一起去旅游,Padding只能是不小于0。

Margin没背景,而Padding有,受盒子的Background属性影响。

Margin会发生合并现象,Padding不会。

这俩有时候的确能达到一样的效果,有一条原则是如果是涉及到跟其它box打架争地盘,还得靠Margin,如果想让自己的孩子过得好,显得不那么挤得慌,那就用Padding。

免责声明:文章转载自《CSS基础深入之细说盒子模型》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【可视化】DataV接入ECharts图表库 可视化利器强强联手Spring Security 实现记住我下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

微信小程序跑步计时器

firstStep:run.wxml <view style="flex-direction:row;"> <image src="http://t.zoukankan.com/resources/joyrun.png" mode="aspectFill"/> <button bindtap="openLocation"...

python操作Excel模块openpyxl

1、 安装 pip install openpyxl 想要在文件中插入图片文件,需要安装pillow,安装文件:PIL-fork-1.1.7.win-amd64-py2.7.exe · font(字体类):字号、字体颜色、下划线等 · fill(填充类):颜色等 · border(边框类):设置单元格边框 · alignment(位置类):对齐方式 · ...

实用的css3小实例---1、卡片效果

实用的css3小实例---1、卡片效果 一、总结 一句话总结: 卡片效果主要是使用box-shadow属性: box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); 1、box-shadow属性的语法及实例? 语法:box-shadow: h-shadow...

CSS样式大全

字体属性:(font) 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX、PD 样式 {font-style: oblique;}(偏斜体) italic;(斜体) normal;(正常) 行高 {line-height: normal;}(正常) 单位:PX、PD、EM 粗细...

如何解决PC端和移动端自适应问题?

   做网页时,我们通常需要考虑到不同电脑屏幕尺寸,以及不同手机屏幕大小等问题,解决样式发生改变的情况,那么如何解决呢?现在主要是采用自适应来解决高度,宽度的,以及图片自适应问题,下面就PC端和移动端来总结一下,通常进行自适应高度和宽度,图片时,一般与页面的布局存在关系。 1、最小尺寸分辨率1024*768(传统17寸显示器),则可以采用940px、960...

Jquery学习笔记(7)--京东导航菜单

主要是几个模块的浮动和定位不好处理,另外还缺少右侧导航,及幻灯片。 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title>...