響應式 Utility


概觀

v1.1 新增 Tailwind 風格的響應式 utility 層:寫 class 就能控制版面,並用 sm: / md: / lg: 前綴指定生效斷點,不必自己寫 media query。

<!-- 窄螢幕 2 欄、平板 4 欄、桌機 6 欄 -->
<div class="lct-material-grid lct-cols-2 md:lct-cols-4 lg:lct-cols-6">…</div>

<!-- 窄螢幕隱藏、寬螢幕顯示 -->
<aside class="lct-hidden lg:lct-block">側欄</aside>

<!-- 窄螢幕直排、寬螢幕橫排 -->
<div class="lct-flex lct-flex-col md:lct-flex-row lct-gap-4">…</div>

斷點

mobile-first:無前綴的 class 在所有寬度生效,加了前綴的 class 在「該寬度以上」生效並覆蓋前者。

前綴 生效條件 常見對應
(無) 所有寬度 手機 / 窄面板
sm: ≥ 480px 寬面板
md: ≥ 768px 平板
lg: ≥ 1024px 桌機

media query 無法使用 CSS 變數,所以斷點數值不是 design token;要修改請直接在 lucent-ui.css 全域搜尋替換 480px / 768px / 1024px

支援響應式前綴的 utility

以下 utility 有 sm: / md: / lg: 三組變體:

類別 class
display lct-block lct-flex lct-inline-flex lct-flex-col lct-flex-row lct-grid lct-hidden
欄數 lct-cols-1 ~ lct-cols-6
間距 lct-gap-2(6px)lct-gap-4(10px)lct-gap-6(16px)
文字對齊 lct-text-left lct-text-center
寬度 lct-w-full lct-w-auto

.lct-hidden 的宣告順序刻意排在其他 display class 之後、響應式變體之前,因此「預設隱藏、某斷點以上顯示」的組合(lct-hidden md:lct-flex)與「預設顯示、某斷點以上隱藏」(md:lct-hidden)都能正常運作。

格線與欄數

.lct-cols-N 同時作用於兩種格線容器:

<!-- 通用格線:手機 1 欄、平板起 3 欄 -->
<div class="lct-grid lct-cols-1 md:lct-cols-3 lct-gap-4">
  <div class="lct-card lct-p-6">A</div>
  <div class="lct-card lct-p-6">B</div>
  <div class="lct-card lct-p-6">C</div>
</div>

<!-- 材質格線:3 → 4 → 6 欄 -->
<div class="lct-material-grid lct-cols-3 md:lct-cols-4 lg:lct-cols-6">
  <div class="lct-material-card">…</div>
  <!-- … -->
</div>

完整 spacing utility

間距值一律對應 design token 的 4 倍數階梯:

N 0 1 2 3 4 5 6 7 8
px 值 0 4 6 8 10 12 16 20 24

spacing utility(gap-2/4/6 除外)不含響應式變體;需要斷點切換間距時用 sm:lct-gap-2 / md:lct-gap-4 / lg:lct-gap-6

flex utility

.lct-flex.lct-inline-flex.lct-flex-col.lct-flex-row.lct-flex-wrap.lct-items-start / -center / -end.lct-justify-start / -center / -end / -between.lct-growflex:1 1 auto)、.lct-shrink-0

<div class="lct-flex lct-items-center lct-justify-between lct-gap-3">
  <span class="lct-subtitle lct-truncate">胡桃木 木紋(深色)</span>
  <button class="lct-btn lct-btn--primary lct-btn--sm lct-shrink-0">加入</button>
</div>

其他工具

.lct-w-full.lct-w-auto.lct-max-w-full.lct-text-left / -center / -right.lct-truncate(單行省略號)。

常見版面範例

1. 格線欄數隨斷點切換

<div class="lct-material-grid lct-cols-2 sm:lct-cols-3 md:lct-cols-4 lg:lct-cols-6">
  <div class="lct-material-card">
    <div class="lct-material-card__thumb" style="background-image:url(walnut.jpg)"></div>
    <div class="lct-material-card__label">胡桃木 木紋</div>
  </div>
  <!-- 其餘卡片… -->
</div>

2. 顯示 / 隱藏

<!-- 側欄:窄螢幕收起、桌機顯示 -->
<aside class="lct-hidden lg:lct-block">篩選側欄</aside>

<!-- 提示文字:只在窄螢幕顯示 -->
<p class="lct-caption md:lct-hidden">往下捲動查看更多材質</p>

<!-- 兩份內容互斥切換 -->
<span class="md:lct-hidden">窄版標題</span>
<span class="lct-hidden md:lct-inline-flex">完整版標題(≥ 768px 才出現)</span>

3. 直排 / 橫排切換

<!-- 手機直向堆疊、平板起左右並排 -->
<div class="lct-flex lct-flex-col md:lct-flex-row lct-gap-4">
  <div class="lct-card lct-p-6 lct-grow">主要內容</div>
  <div class="lct-card lct-p-6">側欄資訊</div>
</div>

<!-- 按鈕列:手機滿版直排、寬螢幕靠右橫排 -->
<div class="lct-flex lct-flex-col sm:lct-flex-row lct-justify-end lct-gap-3">
  <button class="lct-btn lct-btn--secondary lct-w-full sm:lct-w-auto">取消</button>
  <button class="lct-btn lct-btn--primary lct-w-full sm:lct-w-auto">建立並加入</button>
</div>

4. 響應式殼層

<!-- 內嵌 SketchUp 面板固定 420px;獨立網頁版流動寬度 -->
<div class="lct-shell lct-shell--panel">…</div>   <!-- 固定 420px -->
<div class="lct-shell">…</div>                    <!-- 填滿容器,搭配響應式格線 -->

與 Tailwind 的差異