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

响应式网站文本与表单域无法自动适配视口问题咨询

问题说明

开发适配全屏幕的响应式网站时,已实现大部分内容溢出时自动换行的效果,但页面最后一块内容始终无法正常换行,同时出现不必要的横向滚动条,内容未自动适配屏幕尺寸,截图可见图片顶部存在超出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>

错误表现截图

错误截图1
错误截图2

解决方案

问题根因

问题主要出在.intro-content的网格布局缺少响应式适配:当前.intro-content固定为两列布局,.contact-form设置了grid-column: span 2跨两列展示,小屏幕下两列总宽度+gap的总和超出视口宽度,导致横向滚动条出现。另外大字号的h2、flex表单元素的默认不收缩特性也可能加重溢出问题。

修复步骤

  1. 新增响应式媒体查询,小屏幕下将网格改为单列布局,同时缩小超大字号避免溢出:
@media (max-width: 768px) {
  .intro-content {
    grid-template-columns: 1fr;
  }
  .contact-form {
    grid-column: span 1;
  }
  h2 {
    font-size: 4rem;
  }
}
  1. 给flex表单元素添加min-width: 0,覆盖flex元素默认不收缩内容的特性,避免表单元素溢出:
.form-group {
  flex: 1 1 320px;
  min-width: 0;
}
  1. 若仍有溢出问题,可添加全局横向溢出隐藏作为兜底:
html, body {
  overflow-x: hidden;
}

内容的提问来源于stack exchange,提问作者Nilton Schumacher F

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:24:04