ReactJS:文本框导致页面底部出现多余滚动条问题
ReactJS:文本框导致页面底部出现多余滚动条问题
嘿,我明白你遇到的麻烦了——想让textarea刚好占满屏幕剩余高度,只有内容超了才滚动,但现在页面却莫名出现多余滚动条对吧?我来帮你梳理下问题出在哪,以及怎么解决。
首先,咱们先看看你当前代码里的几个潜在问题:
- 你给
entry-input用了height: calc(100vh - 5rem),但忽略了父元素.journal-page的上下4rempadding,这会让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
相关产品推荐
相关产品推荐

