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

ReactJS:文本框导致页面底部出现多余滚动条问题

ReactJS:文本框导致页面底部出现多余滚动条问题

嘿,我明白你遇到的麻烦了——想让textarea刚好占满屏幕剩余高度,只有内容超了才滚动,但现在页面却莫名出现多余滚动条对吧?我来帮你梳理下问题出在哪,以及怎么解决。

首先,咱们先看看你当前代码里的几个潜在问题:

  • 你给entry-input用了height: calc(100vh - 5rem),但忽略了父元素.journal-page的上下4rem padding,这会让textarea加上父元素的padding后,总高度直接超过视口,自然就出现页面滚动条了。
  • 浏览器默认给html和body加了margin,这也会额外占用视口空间,导致整体高度溢出。

接下来咱们一步步调整,保证解决问题:

第一步:重置根元素的默认样式

先把html和body的默认边距去掉,同时禁止页面本身滚动,把滚动权限只交给textarea:

html, body {
  margin: 0;
  padding: 0;
  overflow: hidden;
  background-color: #FAF3E0; /* 把全局背景色移到这,避免*选择器的不合理覆盖 */
}

你之前用*选择器给所有元素加背景色,其实容易导致样式冲突,把背景色放在html/body上更规范。

第二步:调整父容器.journal-page的布局

用flex布局来控制容器内的元素高度,确保它刚好占满视口,同时padding不会让它溢出:

.journal-page {
  box-sizing: border-box; /* 关键!padding不会增加元素总高度 */
  padding: 4rem 22%;
  height: 100vh;
  display: flex;
  flex-direction: column;
}

box-sizing: border-box会让元素的padding和border都包含在设定的height里,不会额外撑开元素;flex-direction: column让子元素垂直排列,方便后面让textarea填充剩余空间。

第三步:优化textarea的样式

去掉原来固定的height,改用flex-grow:1让它自动填充容器里除了标题之外的所有空间,同时设置overflow-y:auto确保内容超了才滚动:

.entry-input {
  font-size: 1.125rem;
  width: 100%;
  border: none;
  outline: none;
  resize: none;
  background-color: white;
  flex-grow: 1; /* 自动填充剩余高度 */
  overflow-y: auto; /* 内容超出时显示垂直滚动条 */
  margin: 0; /* 确保没有多余边距干扰 */
}

你的.date-title样式可以保留,它的margin-bottom:1.25rem刚好能和textarea保持合适的间距。

为什么你之前的尝试没生效?

  • 用height:auto的话,textarea只会根据内容高度撑开,不会主动占满屏幕剩余空间;
  • 动态调整高度的JS方案,如果你没考虑父容器的padding和根元素的默认边距,也会计算出错;
  • 直接加overflow:hidden会把超出的内容隐藏,而不是让textarea内部滚动,所以得用overflow-y:auto。

按照上面的步骤调整后,textarea应该就能刚好填满屏幕剩余高度,只有当输入内容超过它的高度时,才会在textarea内部出现滚动条,页面本身不会再有多余的滚动条啦!

备注:内容来源于stack exchange,提问作者kurwaquery

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 10:38:13