CSS - 盒模型(框模型)

目录

一、盒模型概念

二、盒模型成员介绍

1、content(内容显示区域)

2、border(边框)

- 透明边框(边框颜色 transparent)

3、padding

单边内边距属性

内边距的百分比数值

4、margin(外边距)

- 值复制

- 单边外边距属性

三、border-radius(边界圆角)

四、其他相关属性

1.max、min-width、height

2.display

3.overflow


一、盒模型概念

  • 广义盒模型:文档中所有功能性及内容性标签,及文档中所有显示性标签

  • 侠义盒模型:文档中以块级形式存在的标签(块级标签拥有盒模型100%特性且最常用)

  • 盒模型组成:margin + border + padding + content

二、盒模型成员介绍

1、content(内容显示区域)

  • content控制内容的显示区域

  • 通过设置width与height来规定content(content = width * height)

  • 块级标签可以设置自身宽高,默认宽为父级宽(width=auto)、高为0,高度可以由内容决定

  • 内联标签不可以设置自身宽高,默认宽高均为0,宽高一定由内容决定

2、border(边框)

  • border 边框 组成成员(三部分): border-width(宽度)border-color(颜色)border-style(风格)

  • border 成员:border-left、border-right、border-top、border-bottom

  • border-width 成员:border-left-width(左边框宽度)、border-right-width(右边框宽度)、border-top-width(上边框宽度)、border-bottom-width(下边框宽度)

    p {border-width: 5px;}
    p {border-width: thick;}
    p {border-width: 15px 5px 15px 5px;}
    p {border-width: 15px 5px;}
    ​
    p {
      border-top-width: 15px;
      border-right-width: 5px;
      border-bottom-width: 15px;
      border-left-width: 5px;
      }
     :CSS 没有定义 3 个关键字的具体宽度,所以一个用户代理可能把 thin 、medium 和 thick 分别设置为等于 5px、3px 和 2px,而另一个用户代理则分别设置为 3px、2px 和 1px。
    
  • border-color成员:border-left-color、border-right-color、border-top-color、border-bottom-color

    p {
      border-style: solid;
      border-color: blue rgb(25%,35%,45%) #909090 red;
      }
    p {
      border-style: solid;
      border-color: blue red;
      }
    h1 {
      border-style: solid;
      border-color: black;
      border-right-color: red;
      }

    - 透明边框(边框颜色 transparent)

    我们刚才讲过,如果边框没有样式,就没有宽度。不过有些情况下您可能希望创建一个不可见的边框。

    CSS2 引入了边框颜色值 transparent。这个值用于创建有宽度的不可见边框。请看下面的例子:

    <a href="#">AAA</a>
    <a href="#">BBB</a>
    <a href="#">CCC</a>

    我们为上面的链接定义了如下样式:

    a:link, a:visited {
      border-style: solid;
      border-width: 5px;
      border-color: transparent;
      }
    /*悬浮显示灰色边框*/
    a:hover {border-color: gray;}
  • border-style 成员:border-left-style、border-right-style、border-top-style、border-bottom-style

    p {border-style: solid solid solid none;}
    p {border-style: solid; border-left-style: none;}
    注意:如果要使用第二种方法,必须把单边属性放在简写属性之后。因为如果把单边属性放在 border-style 之前,简写属性的值就会覆盖单边值 none。
风格 解释
solid 实线
dashed 虚线
dotted 点状线
double 双实线
groove 槽状线
ridge 脊线
inset 内嵌效果线
outset 外凸效果线
none 清除边框线

注意:border满足整体设置语法,eg:border: 1px solid red;

属性 描述
border 简写属性,用于把针对四个边的属性设置在一个声明。
border-style 用于设置元素所有边框的样式,或者单独地为各边设置边框样式。
border-width 简写属性,用于为元素的所有边框设置宽度,或者单独地为各边边框设置宽度。
border-colo 简写属性,设置元素的所有边框中可见部分的颜色,或为 4 个边分别设置颜色。
border-bottom 简写属性,用于把下边框的所有属性设置到一个声明中。
border-bottom-color 设置元素的下边框的颜色。
border-bottom-style 设置元素的下边框的样式。
border-bottom-widt 设置元素的下边框的宽度。
border-left 简写属性,用于把左边框的所有属性设置到一个声明中。
border-left-color 设置元素的左边框的颜色。
border-left-style 设置元素的左边框的样式。
border-left-width 设置元素的左边框的宽度。
border-right 简写属性,用于把右边框的所有属性设置到一个声明中。
border-right-color 设置元素的右边框的颜色。
border-right-style 设置元素的右边框的样式。
border-right-width 设置元素的右边框的宽度。
border-top 简写属性,用于把上边框的所有属性设置到一个声明中。
border-top-color 设置元素的上边框的颜色。
border-top-style 设置元素的上边框的样式。
border-top-width 设置元素的上边框的宽度。

3、padding

  • padding成员:padding-left、padding-right、padding-top、padding-bottom

  • padding整体设置

值得个数 方位
1个 -- >> h1 {padding: 10px;} 上下左右
2个 -->> h1 {padding: 10px 2ex;} 上下 | 左右
3个 -->> h1 {padding: 10px 0.25em 2ex;} 上 | 左右 | 下
4个 -->> h1 {padding: 10px 0.25em 2ex 20%;} 上 | 右 | 下 | 左

单边内边距属性

也通过使用下面四个单独的属性,分别设置上、右、下、左内边距:

  • padding-top
  • padding-right
  • padding-bottom:
  • padding-left

下面的规则实现的效果与上面的简写规则是完全相同的:

h1 {
  padding-top: 10px;
  padding-right: 0.25em;
  padding-bottom: 2ex;
  padding-left: 20%;
  }

内边距的百分比数值

可以为元素的内边距设置百分数值。
百分数值是相对于其父元素的 width 计算的,这一点与外边距一样。所以,如果父元素的 width 改变,它们也会改变。

下面这条规则把段落的内边距设置为父元素 width 的 10%

p {padding: 10%;}

例如:如果一个段落的父元素是 div 元素,那么它的内边距要根据 div 的 width 计算。

<div style="width: 200px;">
<p>This paragragh is contained within a DIV that has a width of 200 pixels.</p>
</div> 

注意:上下内边距与左右内边距一致;即上下内边距的百分数会相对于父元素宽度设置,而不是相对于高度。

4、margin(外边距)

  • margin成员:margin-left、margin-right、margin-top、margin-bottom

  • margin 的默认值是 0,所以如果没有为 margin 声明一个值,就不会出现外边距。

  • 在实际中,浏览器对许多元素已经提供了预定的样式,外边距也不例外。 例如,在支持 CSS 的浏览器中,外边距会在每个段落元素的上面和下面生成“空行”。因此,如果没有为 p 元素声明外边距,浏览器可能会自己应用一个外边距。当然,只要你特别作了声明,就会覆盖默认样式。

  • margin整体设置(值复制概念)

赋值个数 方位
1个 -->> h1 {margin : 0.25px;} 上下左右
2个 -->> h1 {margin: 0.5em 1em;} 上下 | 左右
3个 -->>h1 {margin: 0.25em 1em 0.5em;} 上 | 左右 | 下
4个 -->>h1 {margin : 10px 0px 15px 5px;} 上 | 右 | 下 | 左

- 值复制

p {margin: 0.5em 1em 0.5em 1em;}  
/*等价于*/
p {margin: 0.5em 1em;}

CSS 定义了一些规则,允许为外边距指定少于 4 个值。规则如下:

  • 如果缺少左外边距的值,则使用右外边距的值。

  • 如果缺少下外边距的值,则使用上外边距的值。

  • 如果缺少右外边距的值,则使用上外边距的值。

下图提供了更直观的方法来了解这一点:

  1. 如果为外边距指定了 3 个值,则第 4 个值(即左外边距)会从第 2 个值(右外边距)复制得到。

  2. 如果给定了两个值,第 4 个值会从第 2 个值复制得到,第 3 个值(下外边距)会从第 1 个值(上外边距)复制得到。

  3. 如果只给定一个值,那么其他 3 个外边距都由这个值(上外边距)复制得到。

利用这个简单的机制,您只需指定必要的值,而不必全部都应用 4 个值,例如:

h1 {margin: 0.25em 1em 0.5em;}  /*(上,左右,下)等价于 0.25em 1em 0.5em 1em */
h2 {margin: 0.5em 1em;}     /*(上下,左右)等价于 0.5em 1em 0.5em 1em */
p {margin: 1px;}            /* (上下左右)等价于 1px 1px 1px 1px */

假设希望把 p 元素的上外边距和左外边距设置为 20 像素,下外边距和右外边距设置为 30 像素。在这种情况下,必须写作:

p {margin: 20px 30px 30px 20px;}

这样才能得到您想要的结果。遗憾的是,在这种情况下,所需值的个数没有办法更少了。

如果希望除了左外边距以外所有其他外边距都是 auto(左外边距是 20px):

p {margin: auto auto auto 20px;}

同样的,这样才能得到你想要的效果。问题在于,键入这些 auto 有些麻烦。如果您只是希望控制元素单边上的外边距,请使用单边外边距属性

- 单边外边距属性

单边外边距属性:为元素单边上的外边距设置值。 假设您希望把 p 元素的左外边距设置为 20px。不必使用 margin(需要键入很多 auto),而是可以采用以下方法:

p {margin-left: 20px;}

您可以使用下列任何一个属性来只设置相应上的外边距,而不会直接影响所有其他外边距

  • margin-top

  • margin-right

  • margin-bottom

  • margin-left
    常用值: auto--浏览器设置的右外边距,自定义数字值

一个规则中可以使用多个这种单边属性,例如:

h2 {
  margin-top: 20px;
  margin-right: 30px;
  margin-bottom: 30px;
  margin-left: 20px;
  }

当然,对于这种情况,使用 margin 可能更容易一些:

p {margin: 20px 30px 30px 20px;}

一般来说,如果希望为多个边设置外边距,使用 margin 会更容易一些。

注意:

  1. Netscape 和 IE 对 body 标签定义的默认边距(margin)值是 8px

  2. 而 Opera 相反,Opera 将内部填充(padding)的默认值定义为 8px,因此如果希望对整个网站的边缘部分进行调整,并将之正确显示于 Opera 中,那么必须对 body 的 padding 进行自定义。

三、border-radius(边界圆角)

  • border-radius成员

成员 解释
border-top-left-radius 左上 方位
border-top-right-radius 右上 方位
border-bottom-left-radius 左下 方位
border-bottom-right-radius 右下 方位
  • 单方位(指定单角)设置

赋值个数(值类型:长度 | 百分比) 解释
1 --->> border-top-left-radius: 100px; 单角 横纵
2 --->> border-top-left-radius: 100px 50px; 单角 横 | 纵
  • 按角整体设置

赋值个数(值类型:长度 | 百分比) 解释
左上&右上&左下&右下
2   左上&右下,右上&左下
左上 ,右上& 左下 , 右下
4 左上,右上, 右下, 左下
  • 分向整体设置

格式 解释
1 / 1  --- >> border-radius: 10px 100px 50px / 50px; 横向/ 纵向
 
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>边界圆角</title>
	<style type="text/css">
		.box {
			width: 200px;
			height: 200px;
			background-color: orange;
		}
		/*单角设置*/
		.box {
			/*一个固定值: 横纵*/
			border-top-left-radius: 100px;
			/*两个固定值:横 纵*/
			border-top-left-radius: 100px 50px;
			/*百分比赋值*/
			border-top-left-radius: 100%;
		}

		/*整体赋值*/
		.box {
			/*不分方位(横纵)*/
			/*左上为第一个角,顺时针,不足找对角*/
			/*border-radius: 10px 100px 50px;*/

			/*区分横纵*/
			/*1./前控制横向,后控制纵向*/
			/*2.横向又可以分为1,2,3,4个值,纵向毅然*/
			border-radius: 10px 100px 50px / 50px;
			/*左上横10 右上横100 右下横50 左下横100 / 纵向全为50*/
			/*所有最多可以赋值8个值*/
		}
	</style>
</head>
<body>
	<div class="box"></div>
</body>
</html>

四、其他相关属性

1.max、min-width、height

2.display

描述
inline 内联
block 块级
inline-block 内联块

块(block):

  1. 独行显示

  2. 支持宽高,宽默认适应父级,高默认由子级或内容撑开

  3. 设置宽高后,一定采用设置的宽高

内联(inline):

  1. 同行显示

  2. 不支持宽高

内联块(inline-block):

  1. 同行显示,之间有间距

  2. 支持宽高,宽高由内容撑开

  3. 设置宽高后,一定采用设置的宽高

  4. 若设置宽高中其一,另一个会根据内容等比缩放

嵌套规则:

  1. 块可以嵌套所有类型

  2. 内联一般只嵌套内联

  3. 内联块一般只作为最内层级

<!DOCTYPE html>
<html lang="zh-cn">
<head>
	<meta charset="UTF-8">
	<title>display</title>
	<!-- 默认值 -->
	<style type="text/css">
		div {
			/*块*/
			display: block;
			/*自适应父级可用content的宽度*/
			/*width: auto;*/
			/*默认0*/
			/*height: 0px;*/
		}
		span {
			/*内联*/
			display: inline;
			/*不支持宽高*/
		}
		img {
			/*内联块*/
			display: inline-block;
			width: auto;
			height: auto;
		}
	</style>
	<!-- 验证宽高设置 -->
	<style>
		.sup {
			width: 300px;
			/*height: 100px;*/
			background-color: orange
		}
		.sub {
			/*width: 200px;*/
			/*height: 200px;*/
			background-color: cyan
		}
		.s1, .s2 {
			/*width: 200px;
			height: 200px;*/
			background-color: brown
		}
		img {
			/*width: 350px;*/
			/*height: 350px;*/
		}
	</style>
</head>
<body>
	<!-- 块 -->
	<div></div>
	<!-- 内联 -->
	<span></span>
	<!-- 内联块 -->
	<!-- 同行显示,之间有间距 
		支持宽高,宽高由内容撑开  -->
	<img src="./img/icon.jpg" alt="">
	<img src="./img/icon.jpg" alt="">
	
	<!-- 橘色块 -->
	<div class="sup">
		<!-- 蓝色块 未设定宽高:默认父宽,内容高-->
		<div class="sub">111</div>
	</div>
	
	<!-- 内联 不支持设置宽高 -->
	<span class="s1">123</span>
	<span class="s2">456</span>

</body>
</html>

3.overflow

描述
visible 默认值。内容不会被修剪,会呈现在元素框之外。
hidden 内容会被修剪,并且其余内容是不可见的。
scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。
auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
inherit 规定应该从父元素继承 overflow 属性的值。
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>voerflow</title>
	<!-- 显示区域只能由父级大小决定 -->
	<style type="text/css">
		/*子级区域大于父级*/
		.sup {
			width: 100px;
			height: 100px;
			/*默认值*/
			/*border: 3px none black;*/
			/*清除边框*/
			/*border: 0;*/
			/*border: none;*/
			/*最简单的设置*/
			border: solid;
		}
		.sub {
			width: 200px;
			height: 200px;
			background-color: red
		}
		/*对父级进行overflow设置*/
		.sup {
			/*以滚动的方式允许子级所有内容显示*/
			overflow: auto;
			/*overflow: scroll;*/

			/*只运行子级在父级所在区域的部分显示,超出的部分影藏*/
			/*overflow: hidden;*/
		}
	</style>
</head>
<body>
	<!-- display: block大环境下 -->
	<!-- <div class="sup">
		<div class="sub"></div>
	</div> -->
	<div class="sup">
		呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿 哈哈 呼呼 呵呵 嘻嘻 嘿嘿
	</div>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_33961117/article/details/82839545