CSS基础深入之细说盒子模型
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边框三道,最里头才是我们的内容区域啦,比较形象的说明可见下图:

盒子的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的背景总是透明的。
举个栗子
<!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>
Chrome下会是这个样子:

解读这个结果:
- 每一个li box(Html学科称element/node,css学科称box)的content area
- 第一个li box的margin-bottom和第二个的margin-top的margin发生了margin合并现象,只有在同一个BFC环境下而且是上下margin才会发生margin合并。
- 可以看到margin的背景色是透明的,如果其在另一个content area下且此area有背景色的话,那看到的它就是这个颜色。
- 实际一个盒子的宽高,不仅仅只是Content Height,还包括其它,Box Height=Content Height+Top Padding Height+Top Margin Height+Top Border Height,宽度同理。譬如一条Css{width:100px;margin:1px;border:1px,padding:1px;},box其实际占用的宽度是103px而不是100.这是一个容易引起误解的地方,这点一定需要注意。
CSS如何使用
Margin
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 */
说明:一个是简写代表的含义还有就是CSS具有优先级,最终上面的与下面效果等效:
body {
margin-top: 1em;
margin-right: 2em;
margin-bottom: 3em;
margin-left: 2em; /* copied from opposite side (right) */
}
需要注意的一点是,同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基础深入之细说盒子模型的更多相关文章
- CSS学习篇核心之——盒子模型
概述 关于CSS的一些基础知识我们在前面文章中已经有所了解,这篇文章我们主要来学习下CSS中的核心知识盒子模型的知识. 盒子模型 元素框的最内部分是实际的内容(element),直接包围内容的是内边距 ...
- CSS设计指南之理解盒子模型
原文:CSS设计指南之理解盒子模型 一.理解盒模型 每一个元素都会在页面上生成一个盒子.因此,HTML页面实际上是由一堆盒子组成的.默认情况下,每个盒子的边框不可见,背景也是透明的,所以我们不能直接看 ...
- CSS魔法(一) 盒子模型
序言 盒子模型(橘子橘子皮) 一个盒子,包括:外边距(margin).边框(border).内边距(padding)以及最中间的内容(content). margin.padding <styl ...
- CSS初识- 选择器 &背景& 浮动& 盒子模型
# CSS初识-目标: > 1. 学会使用CSS选择器 > 2. 熟记CSS样式和外观属性 > 3. 熟练掌握CSS各种基础选择器 > 4. 熟练掌握CSS各种复合选择器 &g ...
- jQuery CSS操作及jQuery的盒子模型
jQuery CSS-jQuery CSS方法 jQuery CSS-jQuery盒子模型
- CSS的W3C标准的盒子模型和低版本IE浏览器的盒子模型
CSS中盒子模型的组成由内容区(content).内边距(padding).边框(border).外边距(margin)组成.内边距可细分为 padding-top.padding-right.pad ...
- css中的f弹性盒子模型的应用案例
案例1: <!doctype html> <html> <head> <meta charset="utf-8"> <meta ...
- CSS(六):盒子模型
一.什么是盒子模型 盒子模型是css中一个重要的概念,理解了盒子模型才能更好的排版. 从上图可以看到标准的盒子模型范围包括margin(外边距).border(边框).padding(内边距).con ...
- CSS 样式、布局、盒子模型
Css内容: 常用样式: 字体 颜色 背景 布局: 浮动 定位 标签特性 标签盒子模型: 边距 边框 动画: 旋转 渐变 注意:Css引路径从css文件里找 Html和js ...
随机推荐
- 特定用户QQ群聊天记录导出的实现
一.把QQ群的聊天记录txt格式导出 消息管理器 -> 选择要导出的群 -> 右击.导出 这里要注意 : 导出之后的 文本是 unicode 编码的,需要转换 ==|| 之前不知道,搞 ...
- linux下使用sqlplus使用上下键显示历史命令
在linux下使用sqlplus没有在windows下方便,既不好用习惯的退格键,也无法通过上键来显示上一条的命令,这里我们使用rlwrap来解决. 1.安装rlwrap [root@toughhou ...
- frame 之间访问
index.asp代码 <frameset rows="50,*,20" cols="*" frameborder="no" bord ...
- 【BZOJ 2321】 [BeiJing2011集训]星器
Description Magic Land上的时间又过了若干世纪…… 现在,人们谈论着一个传说:从前,他们的祖先来到了一个位于东方的岛屿,那里简直就是另外一个世界.善于分析与构造的Magic Lan ...
- Microsoft .NET Framework 4.0安装时发生严重错误 无法安装
前几天安装Axure,电脑提示没有安装.NET Framework4.0,然后下载安装,又提示如下图所示情况: 在网上找了好多方法,大多都是打开cmd,输入net stop WuAuServ,修改注册 ...
- 1041: [HAOI2008]圆上的整点 - BZOJ
Description 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数.Input rOutput 整点个数Sample Input4Sample Output4HINT n ...
- Extjs4.2——Panel
一.Panel的border属性: 示例: Ext.create('Ext.panel.Panel', { title: 'Hello', width: 200, height:100, border ...
- CSS样式表引用方式
最近讲课中,有些学员对调用样式表老是有含糊不清?大体说来有四种方式: 1.外部文件引用方式;(推荐使用) 2.使用@import引用外部CSS文件; 3.内部文档头方式也叫内嵌法调用; 4.直接插入式 ...
- 论MOBA类游戏五号位的重要性
观众朋友们,也许你对题目很好奇,才打开这篇文章.为什么技术圈中会出现游戏类的软文?如果时间充足,可以继续往下看. MOBA 类游戏的兴起,逐渐吞噬游戏市场,以病毒式的扩张方式肆意改变着游戏玩家内心对游 ...
- Side by Side Assembly介绍--manifest文件的使用
什么是Side-by-Side Assembly? Side-by-Side Assembly(建称SxS)是微软在Visual Studio 2005(Windows 2000?)中引入的技术,用来 ...