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

CSS row类引发底部导航栏偏移问题排查及布局优化咨询

问题:添加row类后底部导航栏被挤出可视区域

为实现两个元素并排,给元素添加row类后,底部导航栏被挤到可视区域外,必须滚动才能查看:
导航栏被挤出的页面

未使用row类的页面中,导航栏能完美固定在底部,页面可滚动但布局不符合需求——绿色框和编辑、删除按钮本该上下排列,用row类修正布局就触发了导航栏偏移的bug:
未用row类的正常导航栏页面

目标设计效果:
目标设计效果

需要找出row类导致bug的原因,以及能避免该问题的元素并排布局方案。


相关代码

问题CSS代码

.row {
    display: flex;
    align-items: center;
    border-bottom: 1px solid #bdbdbd;
    font-family: 'Montserrat', sans-serif;
}

.CheckButton {
    margin-left: 30px;
    width: 60px;
    height: 80px;
}

.ReminderDescription {
    flex-grow: 1;
    font-weight: bold;
    margin-right: 80px;
}

引发问题的HTML片段

{% block content %}
  {% for reminderInstance in Reminders %}
  <div class="row">
    <div class="CheckButton">
      <form action="{{ url_for('reminder', Plant_id = reminderInstance.Plant_id) }}">
        <button class="NewButton NewButton1"></button>
      </form>
    </div>
    <div class="ReminderDescription "> Give {{ reminderInstance.Plant_name }} water {{ reminderInstance.TimeSinceWaterNeeded }} days ago </div>
  </div>
  {% endfor %}
{% endblock %}

完整Reminders页面HTML

<!DOCTYPE html>
<html>
    <head>
        <title> Reminders </title>
        <meta name="viewport" content="width=devide-width, initial-scale=1.0">
        <meta charset="utf-8">
        <link rel="shortcut icon" href="/assets/favicon.ico">
        <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
        <link rel= "stylesheet" type= "text/css" href= "{{ url_for('static',filename='src/nav.css') }}">
        <link rel= "stylesheet" type= "text/css" href= "{{ url_for('static',filename='src/Collection.css') }}">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
    </head>
    <body>
        <nav class="nav">
          <a href="{{ url_for('collection') }}" class="nav__link">
            <span class="nav__text">Collection</span>
          </a>
          <a href="{{ url_for('index') }}" class="nav__link">
            <span class="nav__text">Home</span>
          </a>
          <a href="{{ url_for('reminders') }}" class="nav__link nav__link--active">
            <span class="nav__text">Reminders</span>
          </a>
        </nav>
    </body>
</html>

{% block content %}
  {% for reminderInstance in Reminders %}
  <div class="row ">
    <div class="CheckButton ">
      <form action="{{ url_for('reminder', Plant_id = reminderInstance.Plant_id) }}">
        <button class="NewButton NewButton1"></button>
      </form>
    </div>
    <div class="ReminderDescription "> Give {{ reminderInstance.Plant_name }} water {{ reminderInstance.TimeSinceWaterNeeded }} days ago </div>
  </div>
  {% endfor %}
{% endblock %}

导航栏CSS

body {
    margin: 0 0 55px 0;
}

.nav {
    position: fixed;
    bottom: 0;
    width: 100%;
    height: 55px;
    box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);
    background-color: #4ea662;
    display: flex;
    overflow-x: auto;
}

.nav__link {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    flex-grow: 1;
    min-width: 50px;
    overflow: hidden;
    white-space: nowrap;
    font-family: 'Montserrat', sans-serif;
    font-weight: bold;
    font-size: 15px;
    color: #ffffff;
    text-decoration: none;
    -webkit-tap-highlight-color: transparent;
    transition: background-color 0.1s ease-in-out;
}

.nav__link:hover {
    background-color: #eeeeee;
}

.nav__link--active {
    padding: 2px 4px;
    border: none;
    text-align: center;
    border-radius:5px;
    background-color: #468454;
    color: #ffffff;
}

问题原因

你引入了Bootstrap 3样式,它默认给.row类设置了margin-left: -15px和margin-right: -15px的负边距,这个样式会让你的.row元素超出父容器宽度,触发页面横向滚动,同时破坏了body底部margin预留导航栏空间的布局平衡,导致导航栏被挤出可视区域。


解决方案

方案1:修改自定义类名避免冲突

把自定义的.row改成专属类名,比如.reminder-row:

.reminder-row {
    display: flex;
    align-items: center;
    border-bottom: 1px solid #bdbdbd;
    font-family: 'Montserrat', sans-serif;
    /* 可选:添加左右内边距避免内容贴边 */
    padding: 0 15px;
}

对应HTML替换类名:

<div class="reminder-row">
  <!-- 内部元素保持不变 -->
</div>

方案2:覆盖Bootstrap的.row默认样式

如果不想改类名,直接在自定义CSS中覆盖Bootstrap的负边距:

.row {
    display: flex;
    align-items: center;
    border-bottom: 1px solid #bdbdbd;
    font-family: 'Montserrat', sans-serif;
    /* 覆盖Bootstrap负边距 */
    margin-left: 0;
    margin-right: 0;
    /* 可选:添加内边距优化布局 */
    padding: 0 15px;
}

方案3:直接使用Bootstrap栅格系统

既然已经引入Bootstrap,利用它自带的栅格布局实现并排,避免自定义冲突:

{% block content %}
  {% for reminderInstance in Reminders %}
  <div class="row">
    <div class="col-xs-2"> <!-- 调整列宽适配按钮 -->
      <div class="CheckButton">
        <form action="{{ url_for('reminder', Plant_id = reminderInstance.Plant_id) }}">
          <button class="NewButton NewButton1"></button>
        </form>
      </div>
    </div>
    <div class="col-xs-10">
      <div class="ReminderDescription "> Give {{ reminderInstance.Plant_name }} water {{ reminderInstance.TimeSinceWaterNeeded }} days ago </div>
    </div>
  </div>
  {% endfor %}
{% endblock %}

可根据需求调整.CheckButton的margin-left等样式,适配栅格布局。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:45:43