(5)css盒子模型

CSS 盒子模型概述

***什么是CSS的盒子模型呢?为什么叫它是盒子?先说说我们在网页设计中常听的属性名:内容(content)、边框(border)、内边距(padding)、外边距(margin), CSS盒子模型都具备这些属性。

***属性我们可以把它转移到我们日常生活中的盒子(箱子)来理解,日常生活中所见的盒子也就是能装东西的一种箱子,也具有这些属性,所以叫它盒子模型。

盒子模型是css控制页面是一个很重要的概念。

所有网页的页面中的元素都可以看成是一个盒子,占据着一定的页面空间。

一个页面由很多这样的盒子组成,这些盒子之间会互相影响,因此掌握盒子模型需要从两方面来理解:第一节、理解一个孤立的盒子模型的内部结构;第二节、理解多个盒子模型之间的相互关系。

一、理解一个孤立的盒子的内部结构

1、“盒子”概念

在将要进行学习盒子模型之前,先向大家介绍排列着的四幅画,如下图:

上图的每幅画都有一个“边框”,称为“border(边框)”;在每个画框中,画和框架之间是有一定的距离,这个距离称为“内边距(padding)”;各幅画之间是不会紧贴着,它们之间的距离称为“外边距(margin)”。

2、“模型”概念:对某种事物的本质特性的抽象。

3、在css中,每个盒子模型都是由内容(content)、边框(border)内边距(padding)、外边距(margin)四个部分组成;

###组成盒子模型的四部分也可以这样理解:

**内容(content)就是盒子里装的东西;

**边框(border)就是盒子本身了;

**内边距(padding)就是怕盒子里装的东西(贵重的)损坏而添加的泡沫或者其它抗震的辅料;

**外边距(margin)就是在有很多盒子摆放的时候不能全部堆在一起,要留一定空隙保持通风,同时也为了方便取出。

将按上-右-下-左的顺序作用(顺时针)

**页面中的每个盒子都是需要精确地排版的,有时候1个像素都不能差。

4、盒子模型属性

(1)设置 边框(border)

设置边框的最简单的方法就是使用 border属性。

边框(border):用于分隔不同元素、会占据空间、有4条边框、可无边框(设置为0)。
    border边框属性,在CSS中可拆分为border-top(顶部边距)、border-bottom(底部边距)、border-left(左边边距)和border-right(右边边距)。
    border 的属性主要有三个: border-width (边框粗细) 、border-style (边框样式)、border-color (边框颜色)

*** border-width 属性值: medium(适中) 、 thin(细) 、thick (粗)、 length(长)。

 medium : 默认值。默认宽度
 thin : 小于默认宽度
 thick : 大于默认宽度
 length : 由浮点数字和单位标识符组成的长度值。不可为负值。

***border-style属性值:none(无)、 hidden (隐藏)、dotted (点线)、dashed(虚线)、 solid(实线)、 double(双线)、 groove(凹槽 )、ridge(突脊)、 inset (内陷)、outset(外凸)。其中none和hidden都不显示border,二者效果完全相同。

边框样式案例:

<!doctype html>
<html >
 <head>
  <title>边框样式</title>
  <style type="text/css">
  div{
  border-width:6px;
  border-color:#000;
  margin:20px;
  padding:5px;
  background-color:#FFC;
  }
  </style>
 </head>
 <body>
 <div style="border-style:dashed">(1)the border-style of dashed.</div>
 <div style="border-style:dotted">(2)the border-style of dotted.</div>
 <div style="border-style:double">(3)the border-style of double.</div>
 <div style="border-style:groove">(4)the border-style of groove.</div>
 <div style="border-style:inset">(5)the border-style of inset.</div>
 <div style="border-style:outset">(6)the border-style of outset.</div>
 <div style="border-style:solid">(7)the border-style of solid.</div>

 </body>
</html>

火狐浏览器效果

IE浏览器效果

两个浏览器中的效果略有区别,可以看到对于groove(凹槽 )、ridge(突脊)、 inset (内陷)、outset(外凸),IE浏览器支持的不够理想。

border属性值简写形式:

如果只提供一个参数值,将用于全部的四条边。
 border-style:solid;     /*实线*/
如果提供两个,第一个用于上-下,第二个用于左-右。

border-color:blue red       /*上下边框颜色为蓝色,左右边框颜色为红色*/

如果提供三个,第一个用于上,第二个用于左-右,第三个用于下。

border-width:4px 5px 6px;         /*上边框宽度为4px、左右边框宽度为5px 、下边框宽度为6px*/

如果提供全部四个参数值,将按上-右-下-左的顺序作用于四个边框(顺时针)。

border-style:solid dashed dotted double       /*将按上-右-下-左的顺序作用(顺时针),分别为实线、虚线、点线、双线*/

**边框(border)属性简写:

同时设置边框的三个属性:

border: 3px solid blue;                 /*3个像素的蓝色实线*/

举个例子,看图就明白:

<!doctype html>
<html>
 <head>
  <title>边框属性值的简写</title>
  <style type="text/css">
  div{
  border-color:blue red;
  border-width:4px 5px 6px;
  border-style:dotted dashed solid double;
  }
  </style>
 </head>
 <body>
 <div >(1)the border-style of dashed.使用css样式设置对象内容color颜色样式,我们可以使用命名CSS类对象设置其颜色样式,还有直接在html标签内设置color样式。以上我们也详细介绍和实践这2种对文字内容设置颜色方法。</div>
   </body>
</html>



(2)设置内边距(padding)

设置内边距的最简单的方法就是使用 padding属性。

padding又称内边距,用于控制内容与边框之间的距离。在边框和内容之间的空白区域是内边距。

和前面介绍的边框(border)属性值简写形式类似

如果只提供一个参数值,将用于全部的四条边。         padding:15px;
如果提供两个,第一个用于上-下,第二个用于左-右。       padding:15px 15px;
如果提供三个,第一个用于上,第二个用于左-右,第三个用于下。
如果提供全部四个参数值,将按上-右-下-左的顺序作用于四个边框(顺时针)。

内边距(padding)属性,在CSS中可拆分为padding-top(顶部内边距)、padding-bottom(底部内边距)、padding-left(左边内边距)和padding-right(右边内边距)。四条内边距可以同时设置,也可以单独设置。

“专门设置某一个方向的内边距”案列:

  <style type="text/css">
 #box{
    width:136px;
    height:136px;
    padding:0 20px 5px;    /*上     左右     下*/
    padding-left:12px;       /*设置左内边距距离为12像素*/
    border:8px gray dashed;
 }

#box img{
   border:1px blue solid;
 }
</style>
 </head>
 <body>
<div id="box"><img src="apple.jpg"></img></div>
 </body>
</html>



(3)设置外边距(margin)

设置外边距的最简单的方法就是使用 margin 属性

外边距(margin)指的是元素(盒子)与元素(盒子)之间的间距。

边框在默认情况下是定位于浏览器窗口的左上角的,但是没紧贴着浏览器窗口的边框,这是因为body本身就是个特殊的盒子。

设置body中的其他盒子不会紧贴着浏览器的边框案列:

<title>设置一个方向的内边距padding</title>
  <style type="text/css">
 #box{
    width:136px;
    height:136px;
    padding:0 20px 5px;    /*上     左右     下*/
    padding-left:12px;
    border:8px gray dashed;
 }

#box img{
   border:1px blue solid;
 }
 body{
border:1px black solid;
background:#c00;
}
  </style>
 </head>
 <body>
<div id="box"><img src="apple.jpg"></img></div>
 </body>
</html>

前面说过body是个特殊的盒子,设置body的背景色会延伸到margin的部分。而设置body里面的盒子的背景色时只会覆盖到“padding+内容”部分。

外边距margin属性,在CSS中可拆分为margin-top(顶部外边距)、margin-bottom(底部外边距)、margin-left(左边外边距)和margin-right(右边外边距),四条外边距可以同时设置,也可以单独设置。




二、理解多个盒子模型之间的相互关系

现在大部分的网页都是很复杂的,原因是一个“给人用的”网页中是可能存在着大量的盒子,并且它们以各种关系相互影响着。

html与DOM的关系

详情了解“DOM” :http://baike.baidu.com/link?url=SeSj8sRDE-JZnTdkIQgh-P2nEMvoYdvis19aXaGJrMVCQCV_r3mA1kJ7vaCam4wpPLAsQ9T3WyhRfbP4Bdi6yrZolr5_bf7sLtTeFOWDMBu

DOM 是 Document Object Model(文档对象模型)的缩写。“一个网页的所有元素组织在一起,就构成一颗DOM树。”

(HTML DOM 节点树)

HTML DOM 将 HTML 文档视作树结构。这种结构被称为节点树:

<html>

<head>

<title>DOM树与盒子模型的关系</title>

</head>

<body>

<h1>DOM树</h1> <a href="****">DOM树结构关系</a> </body> </html>

上图是把一个html文档的内容组织起来,形成了严格的层次结构。

上面所有的节点彼此间都存在关系。

除文档节点之外的每个节点都有父节点。举例,<head> 和 <body> 的父节点是 <html> 节点,文本节点 "DOM树结构关系" 的父节点是 <a> 节点。大部分元素节点都有子节点。

比方说,<head> 节点有一个子节点:<title> 节点。<title> 节点也有一个子节点:文本节点 "DOM树与盒子模型的关系"。

当节点分享同一个父节点时,它们就是同辈(同级节点)。比方说,<h1> 和 <a>是同辈,因为它们的父节点均是 <body> 节点。

节点也可以拥有后代,后代指某个节点的所有子节点,或者这些子节点的子节点,以此类推。比方说,所有的文本节点都是 <html>节点的后代,而第一个文本节点是 <head> 节点的后代。

节点也可以拥有先辈。先辈是某个节点的父节点,或者父节点的父节点,以此类推。比方说,所有的文本节点都可把 <html> 节点作为先辈节点。

标准文档流(Normal Document Stream),简称:标准流。

标准流指的是在不使用其他的与排列和定位相关的特殊CSS规则时,各种元素的排列规则。

HTML文档中的元素可以分为两大类:行内元素和块级元素。

1、行内元素不占据单独的空间,依附于块级元素,行内元素没有自己的区域。它同样是DOM树中的一个节点,在这一点上行内元素和块级元素是没有区别的。
比如<span>与</span>、<strong>与</strong>标记
2、块级元素
总是以块的形式表现出来,并且跟同级的兄弟块依次竖直排列,左右自动伸展,直到包含它的元素的边界,在水平方向不能并排。比如:<div>与</div>标记
3、标准流就是css规定的默认的块级元素和行内元素的排列方式

在用css排版的页面中经常使用到<span>和<div>标记,利用这俩个标记,加上css对其样式的控制,可以很方便地实现各种效果。
<span>标记与<div>标记都是视作为容器标记而被广泛应用在html语言中。
<span>标记与标记的区别在于:
        <div>是一个块级元素,可以包含段落、标题、表格,乃至诸如章节、摘要和备注等,div包围的元素会自动换行。
<span>是一个行内元素,在SPAN 的前后是不会换行的,它没有结构的意义,纯粹是应用样式,当其他行内元素都不合适时,可以使用SPAN。


代码:
<!doctype html>
<html >
 <head>  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>div与span的区别</title>
 </head>
 <body>
 <p>div标记自动换行</p>
 <div> 第一章</div>
 <div> 第二章</div>
 <div> 第三章</div>
  <p>span标记同一行</p>
  <span> 第四章</span>
  <span> 第五章</span>
  <span> 第六章</span>
  <hr/>
 <p>div标记自动换行</p>
 <div> <img src="apple.jpg"></div>
 <div> <img src="apple.jpg"></div>
 <div> <img src="apple.jpg"></div>
  <p>span标记同一行</p>
  <span> <img src="apple.jpg"></span>
  <span> <img src="apple.jpg"></span>
  <span> <img src="apple.jpg"></span>
 </body>

效果图:

4、盒子在标准流中的定位原则若想精确地控制盒子的位置,那么必须深入了解margin元素;margin元素是用于调整不同盒子之间的位置关系。
(1)、行内元素之间的水平margin当两个行内元素紧邻时,他们之间的距离是第一个行内元素的margin-right加上第二个行内元素的margin-left。
代码:
<!doctype html>
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>两个行内元素的margin</title>
  <style type="text/css">
  span{
    background-color:red;
    text-align:center;
    font-family:Arial,宋体 ;
    font-size:18px;
    padding:14px;
   }
 span.left{
    margin-right:25px;
    background-color:green;
   }
 span.right{
    margin-left:35px;
    background-color:yellow;
 }
</style>
 </head>
 <body>
 <span class="left">行内元素1</span>
 <span class="right">行内元素2</span>
  </body>
</html>
效果图:


(2)、块级元素之间的竖直margin两个元素的之间的距离不是margin-bottom加margin-top的总和,而是两者中的较大者。代码:
<!doctype html>
<html lang="en">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>两个块级元素之间的竖直margin</title>
  <style type="text/css">
  div{
    background-color:red;
    text-align:left;
    font-family:Arial,sans-serif ;
    font-size:12px;
    padding:10px;
    }
  </style>
 </head>
 <body>
    <div style="margin-bottom:40px;">第一个块级元素</div>
    <div style="margin-top:20px;">第二个块元素</div>

 </body>
</html>

效果图:

(3)、嵌套盒子之间的margin
 当一个<div>块包含在另一个<div>块中时,便形成了典型的父子关系。其中儿子块的margin将以父块的内容为参考。

 在标准流中,一个块级元素的盒子水平方向的宽度会自动延伸,直至上一级盒子的限制位置。

 案例:
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>父子块的margin</title>
<style type="text/css">
div.father{
  background-color:red;
  text-align:center;
  font-family:Arial, Helvetica, sans-serif;
  font-size:12px;
  padding:20px;
  border:1px solid green;
  }
div.son{
  background-color:gray;
  margin-top:30px;
  padding:15px;
  border:1px dashed #000000;
}
</style>
</head>
<body>
<div class="father">
<div class="son">子div</div>
</div>
</body>
</html>
效果图:以上第二节所介绍的是标准流中的盒子排列方式。以上内容部分来自http://www.artech.cn。
时间: 2024-07-30 10:07:16

(5)css盒子模型的相关文章

理解CSS盒子模型

什么是CSS的盒子模式呢?为什么叫它是盒子?先说说我们在网页设计中常听的属性名:内容(content).填充(padding).边框(border).边界(margin), CSS盒子模式都具备这些属性. 这些属性我们可以把它转移到我们日常生活中的盒子(箱子)上来理解,日常生活中所见的盒子也具有这些属性,所以叫它盒子模式.那么内容就是盒子里装的东西:而填充就是怕盒子里装的东西(贵重的)损坏而添加的泡沫或者其它抗震的辅料:边框就是盒子本身了:至于边界则说明盒子摆放的时候的不能全部堆在一起,要留一定

深入理解CSS盒子模型

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

【CSS】Css盒子模型

盒子模型解释 元素在页面中显示成一个方块,类似一个盒子,CSS盒子模型就是使用现实中盒子来做比喻,帮助我们设置元素对应的样式.盒子模型示意图如下: 把元素叫做盒子,设置对应的样式分别为:盒子的宽度(width).盒子的高度(height).盒子的边框(border).盒子内的内容和边框之间的间距(padding).盒子与盒子之间的间距(margin). 设置宽高 width:200px; /* 设置盒子的宽度,此宽度是指盒子内容的宽度,不是盒子整体宽度(难点) */ height:200px;

2015.12.1CSS3转换、过渡、动画效果及css盒子模型

css3转换 1.元素偏移 tranlate 通过translate()的方法元素从当前位置移动到给定的left (x坐标)和top(y坐标)位置参数 代码如下: div{ transform:translate(50px,100px): -ms-transform:translate(50px,100px): /*IE9*/ -webkit-transform:translate(50px,100px): /*谷歌苹果*/ -o-transform:translate(50px,100px):

CSS盒子模型的理解

标准的CSS盒子模型包括:内容(content).填充(padding).边框(border).边界(margin) 这些属性,可以把它转移到我们日常生活中的盒子(箱子)上来理解,日常生活中所见的盒子也就是能装东西的一种箱子,也具有这些属性,所以叫它盒子模式.那么内容(CONTENT)就是盒子里装的东西:而填充(PADDING)就是怕盒子里装的东西(贵重的)损坏而添加的泡沫或者其它抗震的辅料:边框 (BORDER)就是盒子本身了:至于边界(MARGIN)则说明盒子摆放的时候的不能全部堆在一起,要

我给女朋友讲编程CSS系列(4) CSS盒子模型

什么是CSS盒子模型?如何学习CSS的盒子模型? 这篇文章,以 [分享 + 结论]  的方式来写. 1,  看w3school的[CSS 框模型概述] 网址为: http://www.w3school.com.cn/css/css_boxmodel.asp 接着把[CSS内边距],[CSS外边距],[CSS外边距合并]看看. 小结: (1)    一般,在样式表中,都会先把所有元素的外边距和内边距设置为0 * {   margin: 0;  padding: 0;  } * 是通配符,就是一个符

详细认识一下CSS盒子模型

定义 CSS把每个元素看成是一个个单独的框,这里就叫它"元素框"吧.而CSS 盒子模型 (Box Model) 可以理解成一种规范,它规定了元素框处理其"最里边的内容区域(例如文本,图像等)"."内容周围填充的区域"."边框" 和"边界区域"的方式. PS: 为了方便区分概念,通常也会把"填充"叫做"内边距",把"边界"叫做"外边距&qu

[CSS3] 学习笔记--CSS盒子模型

1.CSS盒子模型概述 盒子模型的内容范围包括:margin(外边距).border(边框).padding(内边距).content(内容)部分组成. 2.内边距 内边距在content外,border内,属性有5个: padding:设置所有边距 padding-bottom:设置底边距 padding-left:设置左边距 padding-right:设置右边距 padding-top:设置上边距 3.边框 我们可以创建效果出色的边框,并且可以应用于任何元素.边框的样式为border-st

前端基础——CSS盒子模型

现在许多网页都是由许多个"盒子"拼接.嵌套而成,所以多少接触过网页设计的朋友一定都对CSS盒子模型有所了解. 为了更好的说明,先举个通俗的例子:在一个仓库中放了10个纸箱,每个纸箱之间有一定距离,每个纸箱内放的是一台电脑并且纸箱和电脑之间都有一层泡沫来隔绝防震(这里假设纸箱和电脑都是正方体),以这个例子为背景接着说盒子模型. 其实一张图片就可以把CSS盒子模型形象地表述出来,网上一搜一大堆: 正如上图所示:CSS中的盒子模型通常由四部分组成:内容(content).填充(padding