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

基于列布局(含aria role grid)的类看板Web应用布局改造问询

Got it, let's convert your nested list kanban layout into an accessible, column-based grid with proper ARIA roles. Here's a complete implementation that balances visual layout, semantics, and accessibility:

1. Accessible HTML Structure

We'll replace the nested <ul>s with a structure that maps to ARIA grid roles, while keeping your swimlane/item hierarchy intact:

<div role="grid" aria-label="Kanban Board">
  <!-- Swimlane A -->
  <div role="rowgroup" aria-label="Swimlane A">
    <div role="row">
      <div role="gridcell">Item a1</div>
    </div>
  </div>

  <!-- Swimlane B -->
  <div role="rowgroup" aria-label="Swimlane B">
    <div role="row">
      <div role="gridcell">Item b1</div>
    </div>
    <div role="row">
      <div role="gridcell">Item b2</div>
    </div>
    <div role="row">
      <div role="gridcell">Item b3</div>
    </div>
  </div>

  <!-- Swimlane C -->
  <div role="rowgroup" aria-label="Swimlane C">
    <div role="row">
      <div role="gridcell">Item c1</div>
    </div>
    <div role="row">
      <div role="gridcell">Item c2</div>
    </div>
  </div>
</div>

Key ARIA Role Explanations:

  • role="grid": Marks the entire container as an interactive grid component, critical for screen readers to recognize the layout as a kanban board
  • role="rowgroup": Groups rows (your kanban items) together under a single swimlane/column—this helps assistive tech identify each vertical column as a distinct section
  • role="row": Represents a single row in the grid (each kanban item is its own row within its swimlane)
  • role="gridcell": The individual content cell for each kanban item
  • aria-label attributes: Provide descriptive labels for the grid and each swimlane, ensuring screen reader users understand the purpose of each section
2. CSS for Column-Based Layout

Add this CSS to make the swimlanes display as horizontal columns, with items stacked vertically inside each lane:

/* Base grid container */
[role="grid"] {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 1.5rem;
  padding: 1.5rem;
  max-width: 1200px;
  margin: 0 auto;
}

/* Swimlane styling */
[role="rowgroup"] {
  background-color: #f8f9fa;
  border-radius: 8px;
  padding: 1rem;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}

/* Kanban item styling */
[role="row"] {
  background-color: white;
  border-radius: 6px;
  padding: 1rem;
  margin-bottom: 1rem;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
  transition: box-shadow 0.2s ease;
}

[role="row"]:last-child {
  margin-bottom: 0;
}

[role="row"]:hover {
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12);
}

CSS Breakdown:

  • grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)): Makes the columns responsive—they'll shrink/grow to fit the screen, with a minimum width of 280px
  • gap: Adds spacing between swimlanes and items for better visual hierarchy
  • Subtle shadows and background colors: Mimic traditional kanban board styling while keeping the layout clean
3. Why This Works
  • Accessibility: Screen readers will announce the structure as a grid with grouped rows, making it easy for users with disabilities to navigate between swimlanes and items
  • Visual Layout: The CSS grid ensures swimlanes display as columns, matching your desired column-based structure
  • Maintainability: The structure is easy to extend—adding new swimlanes or items just requires duplicating the corresponding rowgroup/row elements

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:32:37