CSS 框模型 (Box Model) 规定了元素框处理元素内容、内边距、边框 和 外边距 的方式。
所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。
CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。
盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。
- Margin(外边距) - 清除边框外的区域,外边距是透明的。
- Border(边框) - 围绕在内边距和内容外的边框。
- Padding(内边距) - 清除内容周围的区域,内边距是透明的。
- Content(内容) - 盒子的内容,显示文本和图像。
1. 内边距(padding 属性)
- CSS padding 属性定义元素的内边距。padding 属性接受长度值或百分比值,但不允许使用负值。
h1 {padding: 10px 0.25em 2ex 20%;}
- 也通过使用下面四个单独的属性,分别设置上、右、下、左内边距:
- padding-top
- padding-right
- padding-bottom
- padding-left
2. 边框(border属性)
在 HTML 中,我们使用表格来创建文本周围的边框,但是通过使用 CSS 边框属性,我们可以创建出效果出色的边框,并且可以应用于任何元素。
元素外边距内就是元素的的边框 (border)。元素的边框就是围绕元素内容和内边据的一条或多条线。
2.1 边框的样式(border-style 属性)
- none: 定义一个没有边框
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>点线边框</title>
<style>
p.none {border-style:none;}
</style>
</head>
<body>
<p class="none">无边框。</p>
</body>
</html>
- dotted: 定义一个点线边框
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>虚线边框</title>
<style>
p.dotted {border-style:dotted;}
</style>
</head>
<body>
<p class="dotted">点线边框。</p>
</body>
</html>
- dashed: 定义一个虚线边框
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>虚线边框</title>
<style>
p.dashed {border-style:dashed;}
</style>
</head>
<body>
<p class="dashed">虚线边框。</p>
</body>
</html>
- solid: 定义实线边框
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>实线边框</title>
<style>
p.solid {border-style:solid;}
</style>
</head>
<body>
<p class="solid">实线边框。</p>
</body>
</html>
- double: 定义两个边框。 两个边框的宽度和 border-width 的值相同
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>两个边框</title>
<style>
p.double {border-style:double;}
</style>
</head>
<body>
<p class="double">双边框。</p>
</body>
</html>
- groove: 定义3D沟槽边框。效果取决于边框的颜色值
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>3D沟槽边框</title>
<style>
p.groove {border-style:groove;}
</style>
</head>
<body>
<p class="groove"> 3D沟槽边框</p>
</body>
</html>
- ridge: 定义3D脊边框。效果取决于边框的颜色值
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>3D脊边框</title>
<style>
p.ridge {border-style:ridge;}
</style>
</head>
<body>
<p class="ridge">3D脊边框</p>
</body>
</html>
- inset:定义一个3D的嵌入边框。效果取决于边框的颜色值
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>3D的嵌入边框</title>
<style>
p.inset {border-style:inset;}
</style>
</head>
<body>
<p class="inset">嵌入边框。</p>
</body>
</html>
- outset: 定义一个3D突出边框。 效果取决于边框的颜色值
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>3D的嵌入边框</title>
<style>
p.outset {border-style:outset;}
</style>
</head>
<body>
<p class="outset">外凸边框。</p>
</body>
</html>
- hidden:定义一个隐藏边框
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>隐藏边框</title>
<style>
p.hidden {border-style:hidden;}
</style>
</head>
<body>
<p class="hidden">隐藏边框。</p>
</body>
</html>
下面这条规则为类名为 aside 的段落定义了四种边框样式:实线上边框、点线右边框、虚线下边框和一个双线左边框。
p.aside {border-style: solid dotted dashed double;}
我们又看到了这里的值采用了 top-right-bottom-left 的顺序,讨论用多个值设置不同内边距时也见过这个顺序。
- 定义单边样式
- border-top-style
- border-right-style
- border-bottom-style
- border-left-style
代码示例
p {border-style: solid solid solid none;}
p {border-style: solid; border-left-style: none;}
2.2 边框的宽度(border-width 属性)
您可以通过 border-width 属性为边框指定宽度。
为边框指定宽度有两种方法:可以指定长度值,比如 2px 或 0.1em(单位为 px, pt, cm, em 等),或者使用 3 个关键字之一,它们分别是 thick 、medium(默认值) 和 thin。
注意:CSS 没有定义 3 个关键字的具体宽度,所以一个用户可能把 thick 、medium 和 thin 分别设置为等于 5px、3px 和 2px,而另一个用户则分别设置为 3px、2px 和 1px。
p.one
{
border-style:solid;
border-width:5px;
}
p.two
{
border-style:solid;
border-width:medium;
}
2.3 边框的颜色(border-color 属性)
border-color属性用于设置边框的颜色。可以设置的颜色:
- name - 指定颜色的名称,如 "red"
- RGB - 指定 RGB 值, 如 "rgb(255,0,0)"
- Hex - 指定16进制值, 如 "#ff0000"
您还可以设置边框的颜色为"transparent",透明边框。
注意: border-color单独使用是不起作用的,必须得先使用border-style来设置边框样式。
p.one
{
border-style:solid;
border-color:transparent;
}
p.two
{
border-style:solid;
border-color:#98bf21;
}
2.4 外边距(margin 属性)
- margin 属性接受任何长度单位,可以是像素、英寸、毫米或 em。
- 外边距合并
- 外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。
- 合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>外边距</title>
<style>
p
{
background-color:yellow;
}
p.margin
{
margin:100px 50px;
}
</style>
</head>
<body>
<p>这是一个没有指定边距大小的段落。</p>
<p class="margin">这是一个指定边距大小的段落。</p>
</body>
</html>
网友评论