width/height与padding,margin,border-width探讨

本文通过实验探讨CSS中div元素的width和height属性如何仅作用于内容区域而不包含padding、margin及border-width。作者通过创建一个简单的div并逐步添加样式来展示这些属性是如何影响元素的实际尺寸。

之前一直认为设置的width和height是包含了padding和border-width的,直到最近做了一个简易的日历突然发现不是那么回事,于是做了个实验。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge"> 
  <title>test</title>
  <style>
    body div {
    margin:0;
    padding:0;
    }

    #div1 {
      width:500px;
      height: 200px;
      color: #fff;
      background-color: #ccc;
    }
  </style>
</head>

<body>
  <div id="div1">断剑重铸之日,骑士归来之时。</div>
</body>
</html>

效果如下图:

这里可以看到div的width是500px,height为200px,和设置的一样。

然后我添加了padding为10px,

结果是:

 

这里的width是520,加上了padding-left和padding-right的宽度,height也是。

background-color不止覆盖了内容区,也是覆盖到了padding部分。

接下来再设置border-width:

结果如下图:

width也加上了border-left和bord-right的宽度,height也一样。

然后添加margin:

这里显示width和height却没有变。

经过实验得出:

设置的width的宽度只是内容区的,并不包括padding,margin,border-width,在浏览器里width不包含margin。height同样也是如此。

 

转载于:https://www.cnblogs.com/Z-Imp/p/7389680.html

<think>我们注意到用户提供的CSS代码中存在一些问题,例如重复的`}`和未闭合的规则,以及一些多余的规则(如单独出现的`px`和未使用的`.custom-box`等)。我们将首先清理代码,然后实现自定义长宽功能。 目标: 1. 清理无效代码 2. 实现自定义长宽功能(通过CSS变量) 3. 保持原有的响应式设计 修改思路: - 将`.custom-box`作为自定义长宽的基本元素,使用CSS变量控制长宽 - 修复代码结构错误(如多余的`}`) - 保留原有的响应式设计(媒体查询) 修改后的CSS代码: ```css .container { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); /* 自动补位关键设置 */ gap: 20px; padding: 0 20px; box-sizing: border-box; width: 100%; justify-items: center; /* 内容居中 */ } .custom-box { /* 使用CSS变量定义长宽,默认值为200px和150px */ width: var(--box-width, 200px); height: var(--box-height, 150px); background: #743939; /* 背景色 */ border: 1px solid #ccc; /* 边框 */ border-radius: 5px; /* 圆角 */ display: flex; justify-content: center; align-items: center; } /* 图片容器 */ .img-container { /* 使用CSS变量定义长宽,但这里我们不需要,因为图片容器在.custom-box内,我们可以让图片容器继承.custom-box的尺寸 */ width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; overflow: hidden; /* 防止图片溢出 */ } /* 图片自适应 */ .img-container img { max-width: 100%; max-height: 100%; object-fit: contain; /* 保持比例 */ } /* 小屏幕适配 */ @media (max-width: 320px) { .container { padding: 0 5px; gap: 5px; } .custom-box { font-size: 14px; padding: 8px; /* 在小屏幕时,可以调整自定义长宽的默认值,或者通过媒体查询覆盖变量 */ width: var(--box-width-sm, var(--box-width, 180px)); /* 如果提供了--box-width-sm则使用,否则用原来的变量,没有则用默认180px */ height: var(--box-height-sm, var(--box-height, 130px)); } .img-container { transform: scale(0.9); /* 图片整体缩放 */ } } /* 大屏幕适配 */ @media (min-width: 768px) { .container { max-width: 1200px; /* 增大容器宽度 */ margin: 0 auto; gap: 40px; padding: 0 20px; } .custom-box { max-width: var(--box-max-width, 300px); /* 限制最大宽度 */ } } ``` ### 使用说明: 1. **自定义长宽**:通过内联样式设置CSS变量 ```html <div class="custom-box" style="--box-width: 250px; --box-height: 180px;"> <div class="img-container"> <img src="image.jpg" alt="示例"> </div> </div> ``` 2. **响应式自定义**:在媒体查询中我们为小屏幕提供了额外的变量`--box-width-sm`和`--box-height-sm`,可以在内联样式中覆盖: ```html <div class="custom-box" style="--box-width: 250px; --box-height: 180px; --box-width-sm: 200px; --box-height-sm: 140px;"> ... </div> ``` ### 注意事项: - 原代码中有一个多余的`}`和一段未使用的`.box`选择器(已被移除) - 原代码中有一个单独的`px`,已移除 - 原代码中有一个未闭合的`}`和一段未完成的规则(如` } } display: flex; ...`),已修复 §§相关问题§§ 1. 如何确保自定义长宽元素在网格布局中保持等宽比? 2. 当自定义长宽元素内部包含动态内容时,如何防止内容溢出? 3. 如何通过JavaScript批量修改页面中多个自定义长宽元素的尺寸? 4. 在响应式设计中,如何为不同断点设置不同的长宽比例?</think>以下是根据您的要求修改后的 CSS 代码,实现了自定义长宽功能并修复了原始代码中的问题: ```css .container { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 20px; padding: 0 20px; box-sizing: border-box; width: 100%; justify-items: center; } /* 自定义尺寸元素 - 使用CSS变量控制长宽 */ .custom-box { --box-width: 200px; /* 默认宽度 */ --box-height: 150px; /* 默认高度 */ width: var(--box-width); height: var(--box-height); background: #743939; border: 1px solid #ccc; border-radius: 5px; display: flex; justify-content: center; align-items: center; } /* 图片容器 - 支持自定义尺寸 */ .img-container { --img-width: 150px; /* 默认图片容器宽度 */ --img-height: 200px; /* 默认图片容器高度 */ width: var(--img-width); height: var(--img-height); display: flex; justify-content: center; align-items: center; overflow: hidden; } /* 图片自适应 */ .img-container img { max-width: 100%; max-height: 100%; object-fit: contain; } /* 响应式适配 */ @media (max-width: 320px) { .container { padding: 0 5px; gap: 5px; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); } .custom-box { --box-width: 140px; --box-height: 100px; font-size: 14px; } .img-container { --img-width: 120px; --img-height: 160px; } } @media (min-width: 768px) { .container { max-width: 1200px; margin: 0 auto; gap: 40px; } .custom-box { max-width: 300px; } } ``` ### 主要改进: 1. **自定义尺寸功能**: - 使用 CSS 变量 `--box-width` 和 `--box-height` 控制元素尺寸 - 添加了图片容器尺寸变量 `--img-width` 和 `--img-height` - 默认值已设置,可通过内联样式覆盖 2. **修复问题**: - 移除了多余的 `}` 和无效的 `px` 行 - 删除了重复的 `display: flex` 规则 - 修复了媒体查询中的 `.box` 选择器(改为 `.custom-box`) 3. **响应式优化**: - 小屏幕下网格列宽调整为 `minmax(140px, 1fr)` - 媒体查询中更新了自定义尺寸变量的默认值 - 保持图片自适应功能不变 ### 使用示例: ```html <!-- 自定义元素尺寸 --> <div class="custom-box" style="--box-width: 250px; --box-height: 180px"> 自定义尺寸元素 </div> <!-- 自定义图片容器尺寸 --> <div class="img-container" style="--img-width: 180px; --img-height: 240px"> <img src="your-image.jpg" alt="示例图片"> </div> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值