【CSS】盒子模型

  • [width 宽度 、height 高度 、padding 内边距 、margin 外边距 ( 外边距合并、子元素外边距塌陷问题 )](#width 宽度 、height 高度 、padding 内边距 、margin 外边距 ( 外边距合并、子元素外边距塌陷问题 ))
  • [border 边框](#border 边框)
  • [border-radius 圆角](#border-radius 圆角)
  • [box-shadow 阴影](#box-shadow 阴影)
  • [overflow 溢出](#overflow 溢出)
  • [float 浮动 ( 父元素塌陷问题 )](#float 浮动 ( 父元素塌陷问题 ))

盒子模型(Box Model )是指在网页设计中,用于描述和布局元素的一种模型。它将每个元素看作是一个具有四个边界的矩形盒子,包括内容区域(content)、内边距(padding)、边框(border)和外边距(margin)

width 宽度 、height 高度 、padding 内边距 、margin 外边距 ( 外边距合并、子元素外边距塌陷问题 )

margin / padding 说明 margin / padding 说明
1个值 四方相同 2个值 上下 左右
3个值 上 左右 下 4个值 上 右 下 左

浏览器会自带 8px 的 margin 外边距

html 复制代码
<style>
	div{
		/* 内容区域 */
		width: 200px;
		height: 200px;
		/*
			padding-方位名词  margin-方位名词

			设置元素水平居中(margin: x auto;)
		*/
		margin: 10px 20px 30px 40px;
		padding: 20px;

		/* 盒子尺寸 = 内容尺寸 + border尺寸 + 内边距尺寸 */
		border: 1px solid red;

		/* 防止盒子撑大方法:(1)手动减法 border/padding 的尺寸(2)内减模式 box-sizing:border-box 自动去计算占据的宽高 */
		box-sizing: border-box;
	}
</style>
<div></div>

效果:

外边距合并问题

垂直排列的兄弟元素,上下 margin 合并两个 margin 中较大值生效;左右则会相加

html 复制代码
<style>
	.one,.two,.three,.four{ width: 200px;height: 50px; float: left;}
	.clear::after{
		content: "";
		display: block;
		clear: both;
	}
	.one{
		background-color: #145eff;
		margin-right: 20px;
	}
	.two{
		background-color: #ffec00;
		margin-left: 30px;
	}
	.three{
		background-color: #09c90c;
		margin-right: 40px;
	}
	.four{
		background-color: #ee00ff;
		margin-left: 60px;
	}
	.div1{
		margin-bottom: 30px;
	}
	.div2{
		 margin-top: 20px;
	 }
</style>
<div class="clear div1">
	<div class="one"></div>
	<div class="two"></div>
</div>
<div class="clear div2">
	<div class="three"></div>
	<div class="four"></div>
</div>

效果:

子元素外边距塌陷问题

html 复制代码
<style>
	/*
		父子级的标签;子元素 margin-top 会将值传递给父元素产生塌陷问题,导致父
		级一起向下运动;子元素 margin-bottom 会将值给传递使父元素产生下外边距
	*/
	.one,.four{ width: 180px;height: 50px;}
	.one{ background-color: #0067ff; }
	.four{ background-color: #ff0000; }
	.two{
		background-color: #fdf10d;width: 100px;height: 100px;
		margin-top: 20px; /* 导致父元素下拉 */
	}
	.three{
		background-color: #ed0dfd;width: 100px;height: 100px;
		margin-bottom: 20px; /* 使父元素产生下外边距 */
	}
	.fu{
		width: 180px;background-color: #00b905;
		/* 解决方法:
					1.给父元素加边框
					2.给父元素设置 overflow: hidden(也能触发BFC)
					3.给父元素通过 ::before 或 ::after 添加子元素(推荐)
						.clear::after,.clear::before{
							content: "";
							display: table;
							clear: both;
						}
					4.设置内边距(方法1,方法4会将元素扩大)

		*/
		/*overflow: hidden;*/
		/*border: 1px solid red;*/
		/*padding: 10px 0;*/
	}
	.clear::after,.clear::before{
		content: "";
		display: table;
		clear: both;
	}
</style>
<div class="one"></div>
<div class="fu clear">
	<div class="two"></div>
	<div class="three"></div>
</div>
<div class="four"></div>

效果:

border 边框

none:无边框; solid:实线边框,默认; double:双线边框; dashed:虚线边框; dotted:点线边框。允许单独对某一方向的边框线: top bottom left right

html 复制代码
<style>
	body{
		display: flex;
	}
	div{
		width: 200px;height: 100px;
		margin-left: 20px;
	}
	div:nth-of-type(1){
		border: 10px double #0048ff;
	}
	div:nth-of-type(2){
		border-top: 10px double #ffea00;
		border-bottom: 10px dashed #0fa612;
		border-left: 10px dotted #ff00dd;
		border-right: 10px solid #ff0000;
	}
</style>
<div></div>
<div></div>

效果:

border-radius 圆角

个数 说明 个数 说明
1个 四个角相同 2个 左上+右下 左下+右上
3个 左上 右上+左下 右下 4个 左上 右上 右下 左下
html 复制代码
<style>
	body{
	display: flex;align-items: center;flex-wrap: wrap;
	}
	div{
		width: 120px;height: 120px;border: 1px solid red;margin: 0 20px 20px 0;
	}
	div:nth-of-type(1){
		border-radius: 30px;
	}
	div:nth-of-type(2){
		border-radius: 50%;
	}
	div:nth-of-type(3){
		width: 150px;height: 70px;
		border-radius: 50px;
	}
	div:nth-of-type(4){
		border-radius: 5px 50% 50% 50%;
	}
	div:nth-of-type(5){
		border-radius: 50% 0% 0% 50%;
	}
	div:nth-of-type(6){
		border-radius: 10% 100% 10% 0%;
	}
</style>
<div></div><div></div><div></div>
<div></div><div></div><div></div>

效果:

box-shadow 阴影

属性值:x轴偏移量γ轴偏移量模糊半径扩散半径颜色内 \ 外阴影。可以设置多个阴影效果,每个阴影效果之间用逗号分隔

html 复制代码
<style>
	div{
		width: 100px;height: 100px;border: 1px solid red;margin: 20px;float: left;
	}
	#div1{
		/*
			x轴偏移量(必写)
			γ轴偏移量(必写)
			模糊半径(值越大阴影越模糊)
			扩散半径(阴影的半径大小,值越大阴影越大)
			颜色
			内外阴影(外阴影默认;内阴影inset,而且扩散半径数值越大阴影往内扩散越大,直到铺满盒子)
		*/
		box-shadow: 10px -10px 5px 2px red;
	}
	#div2{
		box-shadow: -10px 10px 5px 2px #46b5ff;
	}
	#div3{
		box-shadow: -10px -10px 20px 2px #ffda4a inset;
	}
	#div4{
		box-shadow: 10px 10px 5px 2px #67ff38 inset;
	}
	#div5{
		box-shadow: -10px 5px 8px 30px #b3ff07 inset;
	}
	#div6{
		box-shadow: -10px 5px 8px 20px #ffb8f3;
	}
	#div7{
		box-shadow: 10px 5px 8px 7px #6fffe5,
		25px 5px 8px 15px #db8fff;
	}
</style>
<div id="div1"></div>
<div id="div2"></div>
<div id="div3"></div>
<div id="div4"></div>
<div id="div5"></div>
<div id="div6"></div>
<div id="div7"></div>

效果:

overflow 溢出

html 复制代码
<style>
	div{
		width: 200px;height: 200px;border: 1px solid red;

		/* 
			visible:默认值      hidden:溢出隐藏(有清除浮动、清除margin-top塌陷的功能)
			scroll:溢出滚动(无论是否溢出,均显示滚动条位置)     auto:溢出滚动(溢出才显示滚动条位置)
		*/
		overflow-y: scroll;
	}
</style>
<div>
	<h6>文字1</h6>
	<h6>文字2</h6>
	<h6>文字3</h6>
	<h6>文字4</h6>
	<h6>文字5</h6>
	<h6>文字6</h6>
</div>

效果:

float 浮动 ( 父元素塌陷问题 )

left:左对齐,right:右对齐。浮动元素会脱离标准流 (脱标),不再保留原先的位置。浮动的元素会具有行内块元素的特性,此时不会有行内块元素间隙问题。浮动元素一行显示且顶端对齐排列,超出父级宽度就换行。父元素一般不设置高度而由内容决定,内容浮动后就会造成塌陷问题

html 复制代码
<style>
	.one div{
			width: 100px;height: 100px;
			float: left;
			/*
				1.给塌陷的父元素最后添加一个没有意义的儿子元素(不推荐)
							.clearDiv{ clear: both; }

				2.给父元素设置overflow: hidden,能够解决因为触发了BFC(BFC是一种块
				级格式化文档,是一种网页的隐藏格式,默认渲染页面是不会触发)

				3.谁塌陷就给谁加 class="clear"(推荐)
			*/
	}
	.clear::after{
		content: "";
		display: block;
		clear: both;
	}
	.one{
		overflow: hidden;
	}
	.one div:nth-of-type(1){ background-color: #0fa612;}
	.one div:nth-of-type(2){ background-color: #ffec00;}
	.one div:nth-of-type(3){ background-color: #145eff;}
	.one div:nth-of-type(4){ background-color: #d655ff;}
</style>
<div class="one clear">
	<div>块1</div>
	<div>块2</div>
	<div>块3</div>
	<div>块4</div>
</div>

效果:

相关推荐
y先森2 小时前
CSS3中的伸缩盒模型(弹性盒子、弹性布局)之伸缩容器、伸缩项目、主轴方向、主轴换行方式、复合属性flex-flow
前端·css·css3
前端Hardy2 小时前
纯HTML&CSS实现3D旋转地球
前端·javascript·css·3d·html
susu10830189112 小时前
vue3中父div设置display flex,2个子div重叠
前端·javascript·vue.js
IT女孩儿3 小时前
CSS查缺补漏(补充上一条)
前端·css
吃杠碰小鸡4 小时前
commitlint校验git提交信息
前端
虾球xz5 小时前
游戏引擎学习第20天
前端·学习·游戏引擎
我爱李星璇5 小时前
HTML常用表格与标签
前端·html
疯狂的沙粒5 小时前
如何在Vue项目中应用TypeScript?应该注意那些点?
前端·vue.js·typescript
小镇程序员5 小时前
vue2 src_Todolist全局总线事件版本
前端·javascript·vue.js
野槐5 小时前
前端图像处理(一)
前端