width:100%和width:auto有啥区别

项目中使用了with属性,突然好奇auto 和 100% 的区别,特地搜索实践总结了一下观点

  • [一、 width属性介绍](#一、 width属性介绍)
  • [二、 代码带入](#二、 代码带入)
  • [三、 分析比较](#三、 分析比较)
  • [四、 总结](#四、 总结)

一、 width属性介绍

width 属性用于设置元素的宽度。width 默认设置内容区域的宽度,但如果 box-sizing 属性被设置为 border-box,就加上边框区域的宽度

二、 代码带入

html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <style>
    div {
      color: #fff;
      font-size: 2rem;
      text-align: center;
    }
    .parent {
      width: 600px;
      height: 600px;
      background-color: blue;
      border: 10px solid black;
      padding: 20px;
    }

    .child {
      background-color: red;
      border: 10px solid grey;
      margin: 20px;
      height: 100px;
    }

    .auto{
      width: auto;
    }
    
    .hundred-percent{
      width: 100%;
    }
  </style>

  <body>
    <div class="parent">
      parent
      <div class="child auto">child1:  width:auto</div>
      <div class="child hundred-percent">child2:  width:100%</div>
    </div>
  </body>
</html>

三、 分析比较

我们给parent设置了padding:20px 内边距,给两个child都设置了margin:20px的外边距。child1的width属性是auto,child2的width属性是100%。

明显地看到两个child的不同表现,child1的宽度是可以适应的,不会溢出其父元素

child1 最终宽度为

600px - 20px(外边框)* 2 - 0px(内边距)* 2 - 10px (边框宽度)* 2 = 540px

而child2的宽度则是和父元素一样大最终溢出了其父元素。

child2 最终宽度为 600px

四、 总结

  1. width:100% : 子元素的 content 撑满父元素的content,如果子元素还有 padding、border等属性,或者是在父元素上设置了边距和填充,都有可能会造成子元素区域溢出显示;
  2. width:auto : 是子元素的 content+padding+border+margin 等撑满父元素的 content 区域。
  3. 所以,在开发中尽量还是选择 width:auto ,因为当从边距、填充或边框添加额外空间时,它将尽可能努力保持元素与其父容器的宽度相同。
    而width:100% 将使元素与父容器一样宽。额外的间距将添加到元素的大小,而不考虑父元素。这通常会导致问题。
相关推荐
兆子龙1 分钟前
万字解析 OpenClaw 源码架构:从入门到精通
前端·javascript
@大迁世界2 分钟前
精通 React 面试:从零到中高级
前端·javascript·react.js·面试·前端框架
Mr Xu_16 分钟前
巧用多背景图层打造精美 CSS 背景 —— 基于 SVG 的视觉合成技巧
前端·css
lichenyang45334 分钟前
虚拟 DOM、Diff 算法与 Fiber
前端·javascript·面试
angerdream1 小时前
最新版vue3+TypeScript开发入门到实战教程之学会vue3真正的响应式数据
javascript·vue.js
全栈老石2 小时前
再见 Moment.js!浏览器原生支持的新一代时间库 Temporal 来了
前端·javascript
叫我一声阿雷吧2 小时前
JS 入门通关手册(13):DOM 基础入门:用 JavaScript 操作网页元素,让页面 “活” 起来!
javascript·dom操作·js入门·零基础学前端·网页交互
我命由我123452 小时前
React - React 初识、创建虚拟 DOM 的两种方式、jsx 语法规则、React 定义组件
前端·javascript·react.js·前端框架·html·html5·js
青青家的小灰灰2 小时前
深入理解 JavaScript 箭头函数:从语法糖到核心机制
前端·javascript·面试
怪侠_岭南一只猿2 小时前
爬虫阶段一实战练习题:爬取豆瓣电影 Top250 复盘
css·经验分享·爬虫·python·学习·正则表达式