Tailwind 实现 3 列等宽

要实现四项目中的第四项始终占用 1/3 宽度(而非整行),需明确约束其弹性行为。以下是两种精准控制方案:


方案一:强制精准收缩(推荐🔥)

<div class="flex w-200 flex-wrap gap-4">
  <div class="flex-shrink-0 basis-[calc(33.33%-12px)] bg-blue-100 p-4">项目1</div>
  <div class="flex-shrink-0 basis-[calc(33.33%-12px)] bg-blue-100 p-4">项目2</div>
  <div class="flex-shrink-0 basis-[calc(33.33%-12px)] bg-blue-100 p-4">项目3</div>
  <!-- 第四个同宽 -->
  <div class="flex-shrink-0 basis-[calc(33.33%-12px)] bg-blue-100 p-4">项目4</div>
</div>
项目1
项目2
项目3

项目4

关键调整

  • 添加 flex-shrink-0:禁止收缩,严格保持 basis 宽度
  • 父容器必须设固定宽度(如 w-400),否则百分比计算会偶现偏差

方案二:使用 Grid 替代 Flex(最佳实践✨)

原需求更接近网格行为,直接改用 Grid 确保所有项目严格 3 列:

html

复制

<div class="grid w-200 grid-cols-3 gap-4">
  <div class="bg-blue-100 p-4">项目1</div>
  <div class="bg-blue-100 p-4">项目2</div>
  <div class="bg-blue-100 p-4">项目3</div>
  <div class="bg-blue-100 p-4">项目4</div> <!-- 自动放入第二行的第一列 -->
</div>
项目1
项目2
项目3
项目4

Tailwind CSS 中与 Flex 伸缩相关的核心类分为三组:flex-shrinkflex-growflex-basis。以下是详细分类说明及使用场景:

---

### **1. 核心伸缩控制类**

|**Tailwind 类**|**CSS 等效属性**|**作用说明**|
|---|---|---|
|flex-shrink|flex-shrink: 1|允许元素收缩(默认值,可省略不写)|
|flex-shrink-0|flex-shrink: 0|**禁止收缩**(保持元素基准宽度不缩小)|
|flex-grow|flex-grow: 1|允许元素扩展(占据父容器剩余空间)|
|flex-grow-0|flex-grow: 0|**禁止扩展**(保持原始宽度)|

---

### **2. flex-basis 尺寸类**

设置 Flex 元素的初始尺寸:

```
<div class="basis-1/3">占容器 1/3 宽度</div>
<div class="basis-64">固定基础宽度 256px(16rem)</div>
<div class="basis-auto">默认基础宽度(由内容决定)</div>
```

示例组合:

```
<!-- 初始占 1/3,可收缩但不可扩展 -->
<div class="flex">
<div class="basis-1/3 flex-shrink flex-grow-0">Left</div>
</div>
```

Left

---

### **3. 复合快捷类(布局魔法)**

Tailwind 提供了组合属性类,简化操作:

|**Tailwind 类**|**等效组合**|**场景**|
|---|---|---|
|flex-1|flex: 1 1 0%|元素自动伸缩,均分剩余空间|
|flex-auto|flex: 1 1 auto|元素基于内容尺寸伸缩|
|flex-initial|flex: 0 1 auto|允许收缩,不可扩展(默认行为)|
|flex-none|flex: 0 0 auto|**完全禁止伸缩**(固定尺寸元素)|

---

### **直观场景示例**

#### 场景 1:禁止侧边栏收缩

```html
<div class="flex">
<!-- 侧边栏固定宽度 -->
<div class="w-64 flex-shrink-0">侧边栏</div>
<!-- 内容区自动扩展 -->
<div class="flex-1">内容区</div>
</div>
```

侧边栏

内容区

#### 场景 2:按钮组自适应两端对齐

```html
<div class="flex">
<!-- 左按钮保持宽度,右侧按钮自动填充 -->
<button class="w-32 flex-none">取消</button>
<div class="flex-1"></div> <!-- 间隔 -->
<button class="flex-grow">提交</button>
</div>
```



#### 场景 3:固定表格列

```html
<div class="flex">
<!-- ID 列不伸缩 -->
<div class="w-20 flex-none">ID</div>
<!-- 内容列自动扩展 -->
<div class="flex-1">内容数据...</div>
</div>
```

---

### **总结规律**

- **防止压缩**:flex-shrink-0 (如固定宽度元素)
- **强制填满**:flex-grow 或 flex-1 (适合动态内容区域)
- **解决布局塌陷**:为需固定宽度的父元素加 flex-shrink-0
- **智能组合**:basis-* 可与 grow/shrink 微调初始和伸缩行为

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇