CSS 栅格

本文详细介绍了CSS栅格布局的基本概念及其使用方法,包括显示方式、行列定义、内容对齐等核心特性,并提供了多个示例帮助理解。

CSS 栅格layout逻辑

跟通过table划分不同的sessions不同, 栅格layout是通过CSS的方法换分不同的栅格, 所以under the hook, 画出来的栅格是等分的

比如
asymmetric-annotated

这个就不是等分了, 也就不能这么分
wild-cola-annotated
surdas biography in english

使用规则

.wrapper {
  display: grid;
}
怎么划分
  1. 指定大小
  .wrapper {
    display: grid;
    grid-template-columns: 25% 75%;
  }

5-FD959-C9-FFAD-4-A0-A-9-C12-9-C2-B74-DA1-B5-E

  1. 另外只用指定大小, 但是如果这个比例不能填充content的话, 就不会变小
 .wrapper {
    display: grid;
    grid-template-columns: 1fr 2fr;
  }

A6921-F71-BE2-D-4-E7-F-A79-E-58147-E723-DA8

  1. 指定其中一个大小, 其它按照比例
.wrapper {
    display: grid;
    grid-template-columns: 200px 2fr 1fr;
}
Implicit rows

这个跟flex-wrap类似

<style>
  .wrapper {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }
</style>

<div class="wrapper">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
  <div class="item">7</div>
</div>

3393-DD6-B-55-D8-43-ED-9112-C04904-C520-BB

Explicit rows

这个就是把每一行的固定了

<style>
  .wrapper {
    display: grid;
    grid-template-rows: 64px 1fr 100px;
    min-height: 100%;
  }
</style>

<div class="wrapper">
  <header>My Website</header>
  <main>Content goes here</main>
  <footer>Copyright notice</footer>
</div>

FAFF2-B6-E-CF46-429-B-B993-6-D2-EC2-E7-CA30

超出范围的item
<style>
  .wrapper {
    display: grid;
    grid-template-rows: 1fr 1fr 1fr;
    height: 100vh;
  }
</style>

<div class="wrapper">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
</div>

2300873-E-A1-CE-4884-9-CDF-1-DE44323-A446

Gaps
<style>
  .wrapper {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 8px;
  }
</style>

<div class="wrapper">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
  <div class="item">7</div>
</div>

4-C8-EA89-C-F6-D1-4-E59-8-A4-F-BFF39-D9324-C4

repeat
.calendar {
  grid-template-columns:
    250px 1fr 1fr 1fr 1fr 1fr;
}

weekly-planner-cols

Alignment

justify-content

对column的alignment

<style>
  .wrapper {
    display: grid;
    justify-content: center;
  }
</style>

<div class="wrapper">
  <header>Hello World</header>
  <section>Stuff here</section>
  <footer>Copyright notice</footer>
</div>

CD436-A23-3-F40-4548-838-A-8-D1960-BFA1-CD

justify-items

对item本身的调整

<style>
  .wrapper {
    display: grid;
    justify-items: center;
  }
</style>

<div class="wrapper">
  <header>Hello World</header>
  <section>Stuff here</section>
  <footer>Copyright notice</footer>
</div>

ED6-E0-AA9-5-C06-4-D96-B865-CC58-DD231-B76

align-content

对row的alignment

<style>
  .wrapper {
    display: grid;
    align-content: space-between;
    height: 300px;
  }
</style>

<div class="wrapper">
  <header>Hello World</header>
  <section>Stuff here</section>
  <footer>Copyright notice</footer>
</div>

B802-C441-4-CE4-4-C3-D-BBFE-C2-EA7-CCDC1-DC

<style>
  .wrapper {
    display: grid;
    align-content: center;
    height: 300px;
  }
</style>

<div class="wrapper">
  <header>Hello World</header>
  <section>Stuff here</section>
  <footer>Copyright notice</footer>
</div>

F8-AACCB3-51-CB-4834-8-F2-F-F78-B3157-D26-E

align-items

就是对于item的alignment

<style>
  .wrapper {
    display: grid;
    height: 300px;
    align-items: center;
    border: 2px solid pink;
  }
</style>

<div class="wrapper">
  <header>Hello World</header>
  <section>Stuff here</section>
  <footer>Copyright notice</footer>
</div>

B1-A7-E704-653-F-4503-A4-CE-36-AEB4153-D79

Self-alignment

针对单个的alignment
4-EB9-CEC2-E187-4-E8-F-91-B4-178-E5-DDE19-E1

Grid Areas

通过grid-template-areas and grid-area 设计layout

<style>
.wrapper {
  display: grid;
  grid-template-areas:
    'sidebar header'
    'sidebar main-content';
  grid-template-columns: 250px 1fr;
  grid-template-rows: 80px 2fr;
}

aside {
  grid-area: sidebar;
}
header {
  grid-area: header;
}
main {
  grid-area: main-content;
}
</style>

<div class="wrapper">
  <aside>Aside</aside>
  <header>Header</header>
  <main>Main</main>
</div>

2094-D676-26-B3-4090-9286-4-FA690-A5-D5-C9

Fluid Grids

根据viewport的小换行

<style>
  .grid {
    display: grid;
    gap: 16px;
    grid-template-columns:
      repeat(auto-fill, minmax(150px, 1fr));
  }
</style>

<main class="grid">
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
</main>
auto-fill vs. auto-fit

差别在于是否拉伸

auto-fill
B1-C744-C8-DF44-47-B7-B618-0044266-C15-B1

auto-fit
8-E516323-3760-4120-AB1-D-9-AA8-B78-C59-F0

### CSS Grid 布局教程与示例 #### 1. CSS Grid 基本概念 CSS Grid 是一种二维布局系统,允许开发者精确控制页面上元素的位置和大小。它提供了一种更直观的方法来定义复杂的网页结构[^2]。 #### 2. 创建简单的网格容器 要启用 CSS Grid 布局,需先设置父级元素为 `display: grid` 或者 `display: inline-grid`: ```css .container { display: grid; } ``` 这会使得 `.container` 下的所有子元素自动成为网格项(grid items),并遵循由该容器设定的任何显式或隐式的轨道尺寸规则[^1]。 #### 3. 定义列和行模板 可以通过 `grid-template-columns` 和 `grid-template-rows` 属性指定每一列及每行的具体宽度/高度值。例如创建一个三栏两行的固定比例网格: ```css .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); /* three equal-width columns */ grid-template-rows: auto; /* rows will adjust automatically based on content height */ } ``` 这里使用了 `repeat()` 函数简化重复模式声明,并采用分数单位(`fr`)表示相对长度分配给各条轨道。 #### 4. 控制项目位置 利用 `grid-column-start`, `grid-column-end`, `grid-row-start`, 及 `grid-row-end` 来精确定位单个项目跨越哪些行列区域;也可以直接应用简写形式如 `grid-area`: ```css .item-a { grid-column: 1 / span 2; /* starts at column line 1 and spans across two columns */ } .item-b { grid-row: 2 / end; /* occupies entire second row until the last defined row line */ /* or using named areas */ .item-c { grid-area: header; /* assuming &#39;header&#39; is a predefined area name within @media query ruleset */ } } ``` 上述代码片段展示了多种方式用于安排特定 HTML 元素占据多个单元格空间的可能性[^3]。 #### 5. 处理旧版浏览器兼容性问题 考虑到并非所有目标用户的设备都能完美解析最新的标准特性,在实现过程中应当考虑加入适当的降级处理措施。比如当检测到当前环境不具备原生支持时,则切换至其他较为保守的技术手段完成相似效果呈现——即所谓的“优雅降级”。 对于那些无法识别 CSS Grid 的浏览场景而言,推荐预先准备好一套基于 Flexbox、浮动(Floated Elements)或是绝对定位(Positioned Elements)等传统机制搭建的基础框架作为备选方案。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值