<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./style.css">
<script src="./index.js"></script>
</head>
<body>
<div class="container">
<header>
<h1>Auto-Fit vs Auto-Fill 可视化对比</h1>
<p class="subtitle">通过实时演示直观了解CSS Grid中auto-fit和auto-fit属性的区别,以及它们如何影响响应式布局</p>
</header>
<div class="controls">
<div class="control-group">
<h3>容器宽度控制</h3>
<div class="slider-container">
<span>窄</span>
<input type="range" min="200" max="1000" value="800" class="slider" id="width-slider">
<span>宽</span>
<span class="value-display" id="width-value">800px</span>
</div>
</div>
<div class="control-group">
<h3>卡片数量</h3>
<div class="slider-container">
<span>少</span>
<input type="range" min="1" max="12" value="6" class="slider" id="card-slider">
<span>多</span>
<span class="value-display" id="card-value">6 卡片</span>
</div>
</div>
<div class="button-group">
<button id="reset-btn">重置演示</button>
<button id="toggle-cards-btn">切换卡片可见性</button>
</div>
</div>
<div class="comparison">
<div class="panel auto-fill">
<div class="panel-header">
<h2>Auto-Fill 布局</h2>
<p>保留空轨道,适合需要固定网格结构的布局</p>
</div>
<div class="panel-content" id="auto-fill-container">
<div class="grid" id="auto-fill-grid">
<div class="card"><div class="card-number">1</div>卡片</div>
<div class="card"><div class="card-number">2</div>卡片</div>
<div class="card"><div class="card-number">3</div>卡片</div>
<div class="card"><div class="card-number">4</div>卡片</div>
<div class="card"><div class="card-number">5</div>卡片</div>
<div class="card"><div class="card-number">6</div>卡片</div>
</div>
</div>
</div>
<div class="panel auto-fit">
<div class="panel-header">
<h2>Auto-Fit 布局</h2>
<p>折叠空轨道,内容拉伸填充可用空间</p>
</div>
<div class="panel-content" id="auto-fit-container">
<div class="grid" id="auto-fit-grid">
<div class="card"><div class="card-number">1</div>卡片</div>
<div class="card"><div class="card-number">2</div>卡片</div>
<div class="card"><div class="card-number">3</div>卡片</div>
<div class="card"><div class="card-number">4</div>卡片</div>
<div class="card"><div class="card-number">5</div>卡片</div>
<div class="card"><div class="card-number">6</div>卡片</div>
</div>
</div>
</div>
</div>
<div class="explanation">
<h2>理解 Auto-Fit 和 Auto-Fill</h2>
<p>CSS Grid布局中的<code>auto-fit</code>和<code>auto-fill</code>关键字允许我们创建灵活的响应式布局,而无需编写复杂的媒体查询。它们都用于<code>repeat()</code>函数中,但与<code>minmax()</code>结合使用时,行为有所不同。</p>
<div class="code-snippet">
<span class="property">grid-template-columns</span>: <span class="value">repeat(<select id="code-type">
<option value="auto-fill">auto-fill</option>
<option value="auto-fit" selected>auto-fit</option>
</select>, minmax(150px, 1fr))</span>;
</div>
<div class="key-differences">
<div class="difference auto-fill-difference">
<h3><span class="difference-icon">↔️</span> Auto-Fill 行为</h3>
<p>Auto-fill会尽可能多地创建网格轨道,即使没有网格项填充它们。空轨道仍然占用空间,影响布局。</p>
<ul>
<li>保持网格结构完整</li>
<li>空轨道保持最小宽度</li>
<li>适合需要严格对齐的布局</li>
<li>在内容数量变化但网格结构需要保持不变时非常有用</li>
</ul>
</div>
<div class="difference auto-fit-difference">
<h3><span class="difference-icon">↕️</span> Auto-Fit 行为</h3>
<p>Auto-fit会折叠任何空轨道,并拉伸现有网格项以填充可用空间。它更注重内容的填充而非网格结构的保留。</p>
<ul>
<li>折叠空轨道</li>
<li>内容拉伸填满容器</li>
<li>适合卡片、画廊和内容块布局</li>
<li>在希望内容充分利用可用空间时非常有用</li>
</ul>
</div>
</div>
</div>
</div>
</body>
</html>
index.html
style.css
index.js
index.html