[Day7] 学 Bootstrap 是为了走更长远的路 ~ Grid 篇 (2)

前言

昨天文章提到今天要来讲 Grid + Media Query = 轻松达成 RWD!
(PS. 不太知道 Media Query 的人可以参考之前大大在铁人赛写的这篇文章 → Day22:小事之 Media Query )

讲今日主题之前还是想让大家回想一下,
以往纯 HTML/CSS 写 RWD 我们会怎麽写?

一样拿简单例子举例一下,
原本长这样:

[HTML]

<ul class="ul">
  <li class="li">1</li>
  <li class="li">2</li>
  <li class="li">3</li>
  <li class="li">4</li>
</ul>

[CSS]

.ul {
  display: flex;
  list-style: none;
}

.li {
  width: 23%;
  margin: 1%;
  background-color: pink;
  padding: 10px;
}

https://ithelp.ithome.com.tw/upload/images/20210909/201298735ddfhjnlLc.png

如果现在我想写成手机版每一栏宽度就变成 48%,
该怎麽写?

这时候在 CSS 多加这一段:

@media(max-width: 375px){
	.block {
		width: 48%;
	}
}

我们会在 CSS 写 @media(max-width: ...px){} 像这样的语法,
这个意思是说,
画面宽度最大顶到 375 px,比 375 px 小的话就吃这边的样式。
(PS. 375 px 是 iPhone 5 的宽度)

(当然也有 @media(min-width: ...px){} 这样的写法,
意思就相反,意思是最小到 375 px,比 375 px 大的话就吃这边的样式。)

所以当我故意把画面缩小至比 375 px 小的时候,
.block 宽度就变为 48%,就从一列 4 个排成一列 2 个。

https://ithelp.ithome.com.tw/upload/images/20210909/201298733xEsMg4TD2.png

本日正文

但你知道,Bootstrap Grid 也有语法支援各装置断点,而且写法非常简单吗?

拿上面例子来用 Bootstrap Grid 改写,
一开始在 HTML 这样写:

[HTML]

<div class="row">
  <div class="col bg-info border py-2">1</div>
  <div class="col bg-info border py-2">2</div>
  <div class="col bg-info border py-2">3</div>
  <div class="col bg-info border py-2">4</div>
</div>

https://ithelp.ithome.com.tw/upload/images/20210909/20129873EESpJhcXyU.png

如果现在平板、电脑我都想让它们一列 4 个,
手机版才要变为一列 2 个,
要在 class 的地方将 col 改成 col-6 col-md-3
像这样:

<div class="row">
  <div class="col-6 col-md-3 bg-info border py-2">1</div>
  <div class="col-6 col-md-3 bg-info border py-2">2</div>
  <div class="col-6 col-md-3 bg-info border py-2">3</div>
  <div class="col-6 col-md-3 bg-info border py-2">4</div>
</div>

这个意思是,一般情况宽度都要占 6 格,
当画面宽度比 md 大的时候宽度就变成占 3 格。

那你可能会问说 md 是什麽,
意思是画面宽度的装置缩写,
Bootstrap Grid 语法中有 .col- .col-sm- .col-md- .col-lg- .col-xl-
而画面宽度跟 class 的对照表可以参考这里 Grid options
https://ithelp.ithome.com.tw/upload/images/20210909/20129873PfYmmLCGYi.png

这边我当初也花很多时间才理解,
因此再多给几个情境题练习看看好了。

现在把栏位从 4 个变成 6 个,

<div class="row">
  <div class="col-6 col-md-3 bg-info border py-2">1</div>
  <div class="col-6 col-md-3 bg-info border py-2">2</div>
  <div class="col-6 col-md-3 bg-info border py-2">3</div>
  <div class="col-6 col-md-3 bg-info border py-2">4</div>
  <div class="col-6 col-md-3 bg-info border py-2">5</div>
  <div class="col-6 col-md-3 bg-info border py-2">6</div>
</div>

https://ithelp.ithome.com.tw/upload/images/20210909/201298738pIIKB0uaf.png

如果现在我想要大萤幕(lg)时,
让这个 6 栏可以并成一列,
在平板/电脑版 (md) 一列 4 个,
在手机版 一列 2 个,
该怎麽做?

Bootstrap Grid 的语法是比 XXX px 大才会进行变化,
所以先想比较大的语法怎麽写,
12/6=2,所以在 lg 的时候每一栏占 2 格,
12/4=3,所以在 md 的时候每一栏占 3 格,
其他情况就是 12/2=6,这样就可以达到在 md 以下每一栏占 6 格。

所以只要在刚刚 col-6 col-md-3 的後面加上 col-lg-2 即可,
像这样:

<div class="row">
  <div class="col-6 col-md-3 col-lg-2 bg-info border py-2">1</div>
  <div class="col-6 col-md-3 col-lg-2 bg-info border py-2">2</div>
  <div class="col-6 col-md-3 col-lg-2 bg-info border py-2">3</div>
  <div class="col-6 col-md-3 col-lg-2 bg-info border py-2">4</div>
  <div class="col-6 col-md-3 col-lg-2 bg-info border py-2">5</div>
  <div class="col-6 col-md-3 col-lg-2 bg-info border py-2">6</div>
</div>

示范:746 px

746 px < 768 px,所以不吃 md, lg 的设定,吃 col-6 的设定
https://ithelp.ithome.com.tw/upload/images/20210909/201298731a6IE6XZyS.png

示范:771 px

771 px > 768 px,所以吃 col-md-3 的设定
https://ithelp.ithome.com.tw/upload/images/20210909/20129873lQiqZnMKSM.png

示范:993 px

993 px > 992 px,所以吃 col-lg-2 的设定
https://ithelp.ithome.com.tw/upload/images/20210909/20129873moGhjCb5GE.png

因为现在大家用手机的需求很高,
甚至比电脑多,
因此在设计网页或 APP 时一定要考虑 RWD,
Bootstrap Grid 使用 col-xx-? 就这样轻松达成 RWD 的要求,
是不是很方便呢?

这边光用看的可能还是不太好懂,
多练习应该就会比较了解了~
今天的文章就到这边,
预计明天会将 Bootstrap 的部份告一段落,
进入 Reactstrap 罗~
那我们明天再见啦!

附上本日 CodePen 连结:
Day7 - HTML/CSS
Day7 - Bootstrap

後记

好不容易才跟 Bootstrap, Reactstrap 作朋友(?)的我,
今天收到前辈的消息说要改用 Chakra 这个套件=口=
没关系,我觉得还是还是从 Bootstrap, Reactstrap 这样学会比较好上手,
之後我相信要改什麽套件就不会是太大的问题了!
(PS. 去年队友到今天依然没发现我今年偷偷报名的事XD)


<<:  Day 03: Python开发环境 Spyder初探

>>:  『 间接方法 』

Day3 参加职训(机器学习与资料分析工程师培训班),记录学习内容(6/30-8/20)

人工智慧与机器学习概论 上午教导线性回归,老师先说明机器学习主要使用3类模型: *Linear Mo...

RISC-V on Rust 从零开始(6) - 使用Spike模拟器

其实RISC-V官方也有开发了一个instruction accurate等级的模拟器Spike,只...

26 可以按按钮出牌才算出牌

出牌 出牌跟之前的游戏准备按钮一样 帮一个元件加上 phx-clixk 再绑上对应的动作, 唯一的差...

Day14 Custom Hooks

Custom Hooks 是指可以建立一个自订的个函式,在函式中使用Hook写出能重复利用的功能,将...

DAY25-EXCEL统计分析:共变数实例

有一位学生想知道每天读书时间与考试成绩之间的线性相关程度,所以蒐集了每次期中期末考的国英数自社的成绩...