You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

设置html、body、#root宽高100%为什么会溢出出现滚动条?

滚动条出现原因

出现不需要的横向、纵向滚动条的核心原因是浏览器自带的默认用户代理样式表给body元素设置了默认外边距,目前主流浏览器默认给body设置的外边距为8px。

你给html、body、#root设置的width: 100%、height: 100%使用的是默认标准CSS盒模型规则,宽高百分比仅相对于父元素的内容区尺寸计算,不会包含元素自身的外边距。因此body的实际总占据尺寸为:

  • 总宽度:100% + 8px(左外边距) + 8px(右外边距)
  • 总高度:100% + 8px(上外边距) + 8px(下外边距)
    超出了html元素对应的视口尺寸,就会触发滚动条。
解决方案

最简修复

直接清除body的默认外边距即可,在CSS中新增如下规则:

body {
  margin: 0;
}

通用最佳实践

实际项目开发中通常会做全局样式重置,一次性消除所有元素的默认边距差异,同时统一盒模型规则,避免同类问题反复出现:

/* 全局样式重置 */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html {
  color: #ffffff;
  background: #000000;
}

html,
body,
#root {
  height: 100%;
  width: 100%;
}

其中box-sizing: border-box的作用是将元素的内边距、边框纳入宽高计算范围,后续给元素加padding、border时不会额外撑大元素尺寸,减少布局溢出问题。

相关理论参考
  • 用户代理样式表:浏览器出厂自带的默认样式表,会给p、body、ul等所有常见元素设置默认的margin、padding、字体大小等属性,不同浏览器的默认样式存在细微差异,样式重置的目的就是抹平这类默认差异,保证不同浏览器下的布局表现一致。
  • CSS盒模型:
    • 标准盒模型(默认值box-sizing: content-box):元素总宽度 = 设定width + padding + border + margin,总高度 = 设定height + padding + border + margin
    • 怪异盒模型(box-sizing: border-box):设定的width、height已经包含了padding和border,总宽度仅额外加上margin
  • 百分比宽高计算规则:默认情况下,块级元素的百分比宽高是相对于父元素的内容区尺寸计算的,不会包含父元素的padding、border、margin。

内容的提问来源于stack exchange,提问作者Clive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:24:05