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

如何用Flex Box填充可用空间 优化小屏幕标题与切换按钮布局

解决方案

一、调整HTML结构,让切换按钮与标题归为同一组

把mat-slide-toggle从表单中移出,和标题放在同一个容器内,确保小屏幕下两者优先保持在同一行,避免不必要的换行。同时保留原表单和工具栏结构,维持筛选控件与导出按钮的布局逻辑。

修改后的HTML:

<header class="grid-header">
  <div class="header-title-actions">
    <h1 class="app-heading-5">Sample Report</h1>
    <div class="header-toggles" [formGroup]="form">
      <mat-slide-toggle
        class="align-self-center"
        formControlName="groupByCountry"
        color="primary"
        [labelPosition]="'before'"
      >
        Country
      </mat-slide-toggle>
      <mat-slide-toggle
        class="align-self-center"
        formControlName="showChart"
        color="primary"
        [labelPosition]="'before'"
      >
        Chart
      </mat-slide-toggle>
    </div>
  </div>
  <div class="grid-toolbar">
    <form class="form" [formGroup]="form">
      <kendo-floatinglabel class="filter-lg" text="Filter by Country...">
        <kendo-multiselect
          fillMode="flat"
          formControlName="country"
          [data]="countries$ | async"
          [filterable]="true"
          [valueField]="'fmsCountryCode'"
          [textField]="'narr'"
          [kendoDropDownFilter]="filterSettings"
        >
        </kendo-multiselect>
      </kendo-floatinglabel>
      <kendo-floatinglabel text="From Yr...">
        <kendo-combobox
          fillMode="flat"
          formControlName="fromYear"
          [data]="expYears$ | async"
          [filterable]="true"
          [kendoDropDownFilter]="filterSettings"
        ></kendo-combobox>
      </kendo-floatinglabel>
      <kendo-floatinglabel text="To Yr...">
        <kendo-combobox
          fillMode="flat"
          formControlName="toYear"
          [data]="expYears$ | async"
          [filterable]="true"
          [kendoDropDownFilter]="filterSettings"
        ></kendo-combobox>
      </kendo-floatinglabel>
      <kendo-floatinglabel class="filter-md" text="Filter by Part Name...">
        <kendo-combobox
          fillMode="flat"
          formControlName="partName"
          [data]="partNames$ | async"
          [filterable]="true"
          [kendoDropDownFilter]="filterSettings"
        ></kendo-combobox>
      </kendo-floatinglabel>
    </form>
    <button
      [disabled]="disableExport$ | async"
      kendoButton
      [primary]="true"
      (click)="exportFromApi()"
      title="Export to Excel"
    >
      Export
      <fa-icon [icon]="faFileExcel" size="lg"></fa-icon>
    </button>
  </div>
</header>

二、优化SCSS布局,实现高效空间填充+响应式适配

  1. 给grid-header添加全局间距,避免小屏幕下元素拥挤;
  2. 让标题与切换按钮的容器强制同行,标题自动占据左侧可用空间;
  3. 表单内的筛选控件设置弹性伸缩属性,既保留最小宽度保证可用性,又能在空间充足时自动扩展填满区域;
  4. 调整工具栏与表单的弹性分配,确保整体空间高效利用。

修改后的SCSS:

.grid-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  padding-block: 0.5rem;
  gap: 1rem;

  .header-title-actions {
    display: flex;
    align-items: center;
    gap: 1rem;
    flex-wrap: nowrap;
    min-width: 0;

    .app-heading-5 {
      flex: 1 0 auto;
      margin: 0;
    }

    .header-toggles {
      display: flex;
      gap: 1rem;
    }
  }

  .grid-toolbar {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 1rem;
    flex: 1 1 auto;

    .form {
      display: flex;
      align-items: center;
      flex-wrap: wrap;
      gap: 1rem;
      flex: 1 1 auto;

      kendo-floatinglabel {
        flex: 1 1 12.5rem;
        min-width: 12.5rem;
      }

      .k-input {
        width: 100%;
      }
    }

    button {
      flex: 0 0 auto;
      align-self: center;
    }
  }
}

关键优化点说明

  • 标题与切换按钮的响应式处理:通过flex-wrap: nowrap强制两者在多数小屏幕下保持同行,仅在空间极度不足时才换行;标题的flex:1属性保证其占据左侧主要空间。
  • 高效空间填充:筛选控件的flex:1 1 12.5rem设置,让控件在空间充足时自动扩展,空间不足时保留最小可用宽度;工具栏和表单的弹性分配确保整体空间被充分利用。
  • 间距控制:使用gap属性替代margin,让布局间距更统一、易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:35:03