CSS标准盒模型与怪异盒模型:padding、border不为零时,相同width的input与button不等宽

现象

在padding和border不为零时,同width的input与button显示宽度不一致。尝试将如下代码在浏览器中显示出来:

<!DOCTYPE html>
<html lang="zh">

<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<style>
	div {
		width: 100px;
		border: 1px solid red;
	}

	.elem {
		/* 
			input和button均采用本类选择器类的样式: 
			1. 同样的padding
			2. 同样的border
			3. 同样的width
		*/
		padding: 10px;
		border: 2px solid royalblue;
		width: 100%;
	}
</style>

<body>
	<div>
		<input type="text" class="elem" placeholder="文本框" />
		<br>
		<button class="elem">按钮</button>
	</div>
</body>

</html>

如图,在相同的padding、border下,将input和button都设置为100%时,input和button的渲染宽度不一样(input会超出div的宽度):
在这里插入图片描述

原因

因为两者的盒模型不同:

其中:input默认使用标准盒模型

设置的width是内容的宽度,增加padding和border会使得渲染出来的input占用的实际宽度变大。
如图:
在这里插入图片描述

其中:button默认使用怪异盒模型

设置的width是左右边框相距的宽度,增大padding和border会挤压内容的宽度。
如图:
在这里插入图片描述

解决办法

将两者的盒模型改成相同的模式,

  • 要么就将input改为怪异盒模型,即给input增加CSS样式:
box-sizing: border-box; 
  • 要么就将button改为标准盒模型,即给button增加CSS样式:
box-sizing: content-box; 

统一为标准盒模型

设置相同的如下CSS样式,实际渲染出来两者一样长(但是超出了div):

.elem {
		/* 
			input和button均采用本类选择器类的样式: 
			1. 同样的padding
			2. 同样的border
			3. 同样的width
			4. 都改为标准盒模型
		*/
		padding: 10px;
		border: 2px solid royalblue;
		width: 100%;
		box-sizing: content-box;
	}

在这里插入图片描述

统一为怪异盒模型:

设置相同的如下CSS样式,实际渲染出来两者一样长(但是都未超出div):

.elem {
		/* 
			input和button均采用本类选择器类的样式: 
			1. 同样的padding
			2. 同样的border
			3. 同样的width
			4. 都改为怪异盒模型
		*/
		padding: 10px;
		border: 2px solid royalblue;
		width: 100%;
		box-sizing: border-box;
	}

在这里插入图片描述

还有一个不是办法的办法

将左右padding和左右border都设置为0

.elem {
		/* 
			input和button均采用本类选择器类的样式: 
			1. padding清除
			2. 左右border清除
			3. 同样的width
		*/
		padding: 0px;
		border-left: 0px;
		border-right: 0px;
		border-bottom: 1px solid royalblue;
		width: 100%;
	}

在这里插入图片描述

高度同理

因为两者盒模型不同,所以对于高度也会发生这种相同padding-top、padding-bottom、border-top、border-bottom、height但是实际在浏览器中渲染出来高度不一致的问题。此时也是一样的处理方式:

  • 方式一:统一盒模型
  • 方式二:清除padding-top、padding-bottom、border-top、border-bottom
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值