昨天我们做出了满版横幅的粉红贴纸,今天要开始切中央的橘色贴纸与黄色贴纸了!我们在之前曾经提到,最好把黄色贴纸群的标签,包含在橘色贴纸的标签里面;这是因为希望黄色贴纸群的位置,能够被橘色贴纸的位置所决定。像这种把整群元素,用父元素打包带走的状况下,我们就把这个父元素称作「容器」(英文会是 container 或 wrapper)。
橘色贴纸大概占整个版面宽度的 80%,所以宽度就是 80vw。高度呢?上方粉红贴纸的高度是 20vh,底下绿色贴纸和粉红贴纸差不多大,所以也是 20vh。那麽,中间的橘色贴纸高度就是 100vh - 20vh - 20vh = 60vh。那麽,橘色贴纸要怎麽摆在正中间呢?
既然橘色贴纸的宽度是 80vw,我们把剩下的白边宽度算出来,再除以 2,就会可以用外距,把橘色贴纸推到中间。因此,橘色贴纸的左侧外距,会是 (100vw - 20vw) / 2 = 10 vw。因此,我们会写下这样的样式:
.orange{
height: 60vh;
width: 80vw;
background-color: orange;
margin-left: 10vw;
}
等等,每次置中都要这样算,也太累了吧!而且置中这件事情,很明显是有规律的啊!只要我们把父元素的宽度,减去子元素的宽度,再除以 2 ,就会是子元素的 margin 不是吗?这个应该电脑自己就可以算了吧!
没错,所以 CSS 很贴心地提供 auto 这个值,只要我们把左右两边的外距都设成 auto,就会自动把元素水平置中罗!该怎麽快速设定左右两边的外距呢?记得我们说过 margin 只设定 2 个值时,前者是垂直,後者是水平吗?因此,只要写下
margin: 0 auto;
就可以把元素水平置中罗!
接下来,我们就来处理里面的 8 个黄色贴纸吧!这 8 个黄色贴纸要满足下面几个条件:
条件 1 比较简单,还记得我们让区块元素水平排列的方式吗?没错,就是使用
想满足条件 2 到 条件 5,就必须做出些精密的计算了。
首先,我们来算算在一列中,我们有多少间距。由於一列中有 4 张黄色贴纸,黄色贴纸和橘色外框又有间距,所以会有 5 个间距。由於橘色贴纸的宽度是 80vw,所以这 5 个间距 + 4 张贴纸的宽度,就要等於 80vw。我们可以用几个间距试试看,例如间距 2vw,这样贴纸宽度就会是 (80vw - 2vw X 5) / 4 = 17.5vw,或者是间距 4vw,这样贴纸宽度就会是 (80vw - 4vw X 5) / 4 = 15vw。这边并没有硬性的规定,端看有没有特别的要求。我在这里会采用间距 4vw、贴纸宽度 15vw 的方式来处理。
同理,由於橘色贴纸的高度是 60vh,2 列黄色贴纸就会有 3 个间距。按照上面的方式计算,我选择间距 4vh,贴纸高度 24vh,加起来正好 60vh。宽、高、间距都准备好以後,我们就要开始写样式罗!
其中,最需要思考的,应该就是间距应该怎麽写。你可能会说,咦,不就按照橘色贴纸的写法,写 margin: 4vh 4vw 就好了吗?不太对喔!如果这样写,就会上下左右都有 margin 了,所以贴纸之间的距离会变成 8vh 和 8vw 喔!
因此,我们其实会需要统一用某个方向来推出外距,例如水平的外距都推左边,垂直的外距都推上面。还记得 margin 写 4 个值的时候,分别表示哪个方向吗?没错,就是上、右、下、左。因此,我们 margin 的值应该会是 4vh 0 0 4vw,而整个黄色贴纸的样式应该会是:
.yellow{
display: inline-block;
height: 24vh;
width: 15vw;
background-color: yellow;
margin: 4vh 0 0 4vw;
}
等等,可是看起来好像有点不太对劲?好像中间的间距比较宽,可是最右侧的间距又比左侧更窄?
没错,这样的样式设定,没办法让我们获得理想的结果。那麽,原因出在哪呢?莫非是我们的外距算错了?在我们打开发展者工具检查以後,发现好像也不是这样。仔细计算一下,会发现所有外距都是如同我们的设定。那麽,究竟是哪边出问题了呢?
还记得我们在 Day 9 使用 span 标签的时候,把 span 标签拆成许多行的时候,中间出现的隐藏空格吗?没错,浏览器会把我们在 .html 当中,在标签以外的换行,都自动补个空格来处理。这也是为什麽当 Day 9 把所有标签头尾连成一行後,这些空格就会自动消失。
所以,我们现在也是要把这些标签头尾相连吗?这样也太麻烦了吧!其实不用,既然我们已经知道它是空格,而空格本身其实也是个文字,而这个文字本身也有字型大小。聪明的阿嬷应该已经想到:那麽,不就只要把这个空格的字型大小归零就好?没错,所以我们要在外层的橘色贴纸中,加上
font-size:0;
就会解决这个隐藏空格的问题罗!
最後的绿色贴纸和昨天的粉红贴纸是类似的,就交给各位阿嬷自己完成罗!
完成的程序码可以参考底下:
https://codepen.io/LogosChen/pen/qBjmvoX
想一想:
在物件导向程序设计中,继承扮演了非常重要的角色,分为类别继承、介面继承,继承是指子类别继承父类别後,...
这次要实作的是 RISC-V 的核心基本架构。RISC-V提供了32个integer registe...
攻击者会使用Trojan horses(木马程序)来诱骗使用者在电脑上执行预先设计的操作, 一旦木马...
特徵工程可以分为两大部分,一是根据现有的资料特徵进行筛选,选出较有影响力的特徵进行训练,另一个是根据...
简单来说~ 时间复杂度是指程序执行所需的时间~ 例如~ 一个程序需要执行n次~ 那麽它的渐近时间复杂...