# CSS布局入门技术

- Link: https://yjyj.net/learn/3900.html
- Published: 2006-03-30T14:09:06+08:00
- Author: 小 虾

⚡ 生猛大蝦编辑部 · 30 秒核心看点

 * 用 div + CSS 取代表格布局，先搞懂 margin、padding、border 的层次关系。
 * background 可同时定义图片、颜色与重复方式，辅助图片尽量改用背景处理。
 * width 只管内容区，不一定含边距和边框；不同浏览器表现可能有差异。

css布局与传统表格(table)布局最大的区别在于：原来的定位都是采用表格，通过表格的间
距或者用无色透明的gif图片来控制文布局版块的间距；而现在则采用层(div)来定位，通过
层的margin,padding,border等属性来控制版块的间距
 1.定义div 分析一个典型的定义div
例子： #sample{ margin: 10px 10px 10px 10px; padding:20px 10px 10px 20px; border-
right: #ccc 2px solid; border-bottom: #ccc 2px solid; border-left: #ccc 2px solid;
border-top: #ccc 2px solid; background: url(images/bg_poem.jpg) #fefefe no-repeat
right bottom; color: #666; text-align: center; line-height: 150%; width:60%; } 说明
如下： 层的名称为sample，在页面中用

就可以调用这个样式。
 margin是指层的边框以外留的空白，用于页边距或者与其它层制造
一个间距。”10px 10px 10px 10px”分别代表”上右下左”(顺时针方向)四个边距，如果都一样，
可以缩写成”margin: 10px;”。如果边距为零，要写成”margin: 0px;”。注意：当值是零时，
除了rgb颜色值0%必须跟百分号，其他情况后面可以不跟单位”px”。margin是透明元素，不能
定义颜色。 padding是指层的边框到层的内容之间的空白。和margin一样，分别指定上右下
左边框到内容的距离。如果都一样，可以缩写成”padding:0px”。单独指定左边可以写成”padding-
left: 0px;”。padding是透明元素，不能定义颜色。 border是指层的边框，”border-right:#
ccc 2px solid;”是定义层的右边框颜色为”#ccc”，宽度为”2px”，样式为”solid”直线。如果
要虚线样式可以用”dotted”。 background是定义层的背景。分2级定义，先定义图片背景，
采用”url(../images/bg_logo.gif)”来指定背景图片路径；其次定义背景色”#fefefe”。”no-
repeat”指背景图片不需要重复，如果需要横向重复用”repeat-x”,纵向重复用”repeat-y”,重复
铺满整个背景用”repeat”。后面的”right bottom;”是指背景图片从右下角开始。如果没有背景
图片可以只定义背景色background: #fefefe color用于定义字体颜色，上一节已经介绍过。
text-align用来定义层中的内容排列方式，center居中,left居左,right居右。 line-height
定义行高，150%是指高度为标准高度的150%，也可以写作：line-height:1.5或者line-height:
1.5em，都是一样的意思。 width是定义层的宽度，可以采用固定值，例如500px，也可以采用
百分比，象这里的”60%”。要注意的是:这个宽度仅仅指你内容的宽度，不包含margin,border
和padding。但在有些浏览器中不是这么定义的，需要你多试试。 下面是这个层的实际表现:

    ```
    这里是演示内容...
    ```

我们可以看到边框是2px的灰色，背景图片在右下没有重复，内容距离上和左边框20px，内容
居中，一切和预想的一样。hoho，虽然不好看，但它是最基本的，掌握了它，你就已经学会
一半的css布局技术了。就是这样，不算难吧！(另一半是什么？另一半是层与层之间的定位。
我会在后面逐步讲解。)
 2.css2盒模型 自从1996年css1的推出，w3c组织就建议把所有网页
上的对像都放在一个盒(box)中，设计师可以通过创建定义来控制这个盒的属性，这些对像包括
段落、列表、标题、图片以及层 。盒模型主要定义四个区域：内容(content)、边框距(padding)、
边界(border)和边距(margin)。上面我们讲的sample层就是一个典型的盒。对于初学者，经常
会搞不清楚margin，background-color，background-image，padding，content，border之间
的层次、关系和相互影响。这里提供一张盒模型的3d示意图，希望便于你的理解和记忆。

3.辅助图片一律用背景处理
 用xhtml+css布局，有一个技术一开始让你不习惯，应该说是一种
思维方式与传统表格布局不一样，那就是：所有辅助图片都用背景来实现。类似这样： background:
url(images/bg_poem.jpg) #fefefe no-repeat right bottom; 尽管可以用直接插在内容中，
但这是不推荐的。这里的”辅助图片”是指那些不是作为页面要表达的内容的一部分，而仅仅
用于修饰、间隔、提醒的图片。例如：相册中的图片、图片新闻中的图片，上面的3d盒模型
图片都属于内容的一部分，它们可以用元素直接插在页面里，而其它的类似logo，标题图片，
列表前缀图片都必须采用背景方式或者其他css方式显示。 这样做的原因有2点： 将表现与
结构彻底相分离(参考阅读另一篇文章：《理解表现与结构相分离》)，用css控制所有的外观
表现，便于改版。 使页面更具有易用性，更有亲和力。例如：盲人使用屏幕阅读机，用背景
技术实现的图片就不会被朗读出来。

❓ 延伸问答与排错指南（FAQ）

CSS 盒模型里 margin 和 padding 有什么区别？

margin 是元素边框外的空白，用来拉开与外部元素的距离；padding 是边框与内容之间的空白，
用来控制内容内缩。两者都不负责显示颜色，且都可按上右下左四个方向分别设置。

background 属性为什么要分图片和颜色一起写？

因为 background 可以一次性定义背景图、背景色、是否重复以及定位方式。常见写法是先
放图片路径，再给底色兜底，并用 no-repeat、repeat-x、repeat-y 或 repeat 控制平铺效果。

为什么设置了 width，版块看起来还是不对？

因为文中强调 width 只表示内容宽度，不一定包含 margin、border 和 padding。实际显示
会受盒模型和浏览器差异影响，排版时要把边距、边框和内容宽度一起算，必要时多做兼容
测试。

📚 【[招数学习](https://yjyj.net/category/learn)】专栏延伸阅读与热门精选（[全站文章归档](https://yjyj.net/archive)）：

 * [XHTML代码规范](https://yjyj.net/learn/3899.html)
 * [head区的其他设置](https://yjyj.net/learn/3898.html)
 * [css布局实例](https://yjyj.net/learn/3901.html)
 * [一些有用的资料](https://yjyj.net/learn/3902.html)
 * 热门必读[解决: windows 环境下 无法将“git”项识别为 cmdlet、函数、脚本文件或可运行程序的名称](https://yjyj.net/learn/7776.html)
 * 热门必读[DMIT 全线缺货, 只剩搬瓦工了](https://yjyj.net/discover/7787.html)
