响应式网站文本与表单域无法自动适配视口问题咨询
问题说明
开发适配全屏幕的响应式网站时,已实现大部分内容溢出时自动换行的效果,但页面最后一块内容始终无法正常换行,同时出现不必要的横向滚动条,内容未自动适配屏幕尺寸,截图可见图片顶部存在超出max-width范围的蓝色空白区域。
相关代码
CSS代码
* { margin: 0; padding: 0; box-sizing: border-box; } html { font-size: 62.5%; scroll-behavior: smooth; } body { font-family: 'Courier Prime', monospace; font-size: 1.6rem; color: var(--primary-color); line-height: 1.5; } h2 { font-size: 7rem; margin-bottom: 6rem; text-transform: uppercase; line-height: 1.2; } .bg-circle { background-image: url("/assets/img/bg.svg"); background-size: cover; background-position: center center; color: var(--white-color); } .main-content { max-width: 1200px; margin: 0 auto; padding: 10rem var(--gap); padding: var(--gap); } .section { min-height: 100vh; } .menu-spacing { height: 60px; } .white-bg { background: white; color: black; } .intro-content { position: relative; display: grid; grid-template-columns: 1fr 1.5fr; min-height: 100vh; gap: var(--gap); } .intro-text, .intro-img { display: flex; flex-flow: column wrap; } .intro-img img { max-width: 100%; height: auto; } .top3-content { max-width: 64rem; display: flex; flex-direction: column; flex-wrap: nowrap; justify-content: center; min-height: 100vh; text-align: center; } .grid-intro-content { display: flex; flex-flow: column wrap; justify-content: center; min-height: 100vh; } .grid-intro-content h2 { padding-top: 6rem; } .grid-intro-content h2 { margin-bottom: 2rem; } .description { margin-bottom: 6rem; } .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--gap); counter-reset: gridcounter; } .grid h3 { position: relative; padding-left: 5rem; padding-bottom: 1rem; } .grid h3::before { counter-increment: gridcounter; content: counter(gridcounter); position: absolute; font-size: 7rem; font-style: italic; top: -4.2rem; left: 0; transform: rotate(5deg); } .gallery-img { width: 100%; max-height: 36rem; max-width: 36rem; overflow: hidden; } .gallery-img img { transition: all 300ms ease-in-out; } .gallery-img img:hover { transform: scale(1.2) translate(-3%, -3%) rotate(5deg); } .contact-form { grid-column: span 2; } .contact-form .form-grid { border: none; display: flex; flex-direction: row; flex-wrap: wrap; gap: var(--gap); } .form-group { flex: 1 1 320px; } .form-group label { display: block; } .form-group input, .form-group textarea { border-radius: 10px; padding: 5px; background: white; outline: none; width: 100%; font-size: 1.4rem; } body .full-width { width: 100%; flex: 1 1 100%; } .form-grid legend { text-align: left; font-style: italic; font-size: 1.4rem } .form-group button { border: 0.3rem solid black; background: none; color: black; padding: 1rem 1rem; font-size: 2rem; cursor: pointer; transition: all 300ms ease-in-out; } .form-group button:hover { border: 0.4rem solid #988BC7; color: #988BC7; } .form-group input:focus { border: 3px solid #988BC7; } .form-group textarea:focus { border: 3px solid #988BC7; } .form-group button { justify-content: center; align-items: center; } .footer-content p a { display: flex; justify-content: center; align-items: center; width: 100%; color: inherit; }
HTML代码
<section class="section white-bg" id="contact"> <div class="main-content intro-content"> <div class="intro-text"> <h2>Cadastre-se para ter acesso a mais configurações!</h2> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Numquam placeat ducimus doloribus magni vero non quibusdam explicabo, itaque fugit a tempore culpa totam saepe vitae in corrupti. Nisi, non similique.</p> </div> <div class="intro-img"> <img src="/assets/img/intro-img.svg" alt="Desenho de uma mulher mostrando um aplicativo de telefone"> </div> <div class="contact-form"> <fieldset class="form-grid"> <legend>Contact me</legend> <div class="form-group"> <label for="first-name">First Name</label> <input type="text" name="first-name" id="first-name" placeholder="First name"> </div> <div class="form-group"> <label for="first-name">Last Name</label> <input type="text" name="last-name" id="last-name" placeholder="Last name"> </div> <div class="form-group"> <label for="first-name">Email</label> <input type="email" name="email" id="email" placeholder="Email"> </div> <div class="form-group full-width"> <label for="first-name">Message</label> <textarea name="message" id="message" \ cols="30" rows="10" placeholder="Message"></textarea> </div> <div class="form-group" style="text-align:center"> <button type="submit">Send message</button> </div> </fieldset> </div> </div> </section>
错误表现截图


解决方案
问题根因
问题主要出在.intro-content的网格布局缺少响应式适配:当前.intro-content固定为两列布局,.contact-form设置了grid-column: span 2跨两列展示,小屏幕下两列总宽度+gap的总和超出视口宽度,导致横向滚动条出现。另外大字号的h2、flex表单元素的默认不收缩特性也可能加重溢出问题。
修复步骤
- 新增响应式媒体查询,小屏幕下将网格改为单列布局,同时缩小超大字号避免溢出:
@media (max-width: 768px) { .intro-content { grid-template-columns: 1fr; } .contact-form { grid-column: span 1; } h2 { font-size: 4rem; } }
- 给flex表单元素添加
min-width: 0,覆盖flex元素默认不收缩内容的特性,避免表单元素溢出:
.form-group { flex: 1 1 320px; min-width: 0; }
- 若仍有溢出问题,可添加全局横向溢出隐藏作为兜底:
html, body { overflow-x: hidden; }
内容的提问来源于stack exchange,提问作者Nilton Schumacher F
相关产品推荐
相关产品推荐

