# T3-v1 code review ###### tags: `好想工作室` 2022.07.19(Tue.)(佳萱) :::danger 待完成: 1. ~~輪播 -->點下面圖片,輪播可以跑到要播的圖片~~ 2. ~~輪播圖上的黑框及字~~ 3. ~~理解flex grid~~ ::: ``` HTML: 1. 最後copy right那行應該放到footer裡面 2. 嘗試做出一個不分header__wrap及mobile__wrap的header 3. footer的ul可以換掉(例如說用div, section...) CSS: 1. section__container--featured-garden的間隔要一致 2. banner下方menu的隔線做陰影 3. .container 下的text-align: center; 是否可移除 > 不用下在範圍那麼大的地方,需要再下 > 避免之後有些地方又要再蓋過 4. li的地方多下了一個list-style-position: inside; 5. flex-grow/shrink/basis(可參考mdn, yachen) 6. media query: * 可由小寫到大或大到小 > 統一用min-width或統一用max-width * 可以寫在要修改的css下方 (不用額外集中在某一區) (這樣之後要修改可以馬上找到,不用再往下看) bootstrap: 1. 導覽列做中間,使用者不好使用 2. Carousel元件 3. Accordion元件 > 用於footer 4. featured__garden沒有下row 其他: 1. 用cdn可以看見bootstrap的class改了什麼 2. 結構排版 與 內容 應該分開來做(如同 書架 之於 書) 3. defer script 遇到的問題詢問: 1. Bootstrap有很多預設,要怎麼處理比較好? 2. 網路上多數是說由小切到大,但給的設計稿是大的,這樣一樣由小切到大嗎? 3. Bootstrap有很多版本,之後更新的話有很多要去變動 那該怎麼寫比較好在日後做維護? ``` **** # <font color="#3881a1">HTML</font> ## 2. 嘗試做出一個不分header__wrap及mobile__wrap的header [T3:把header兩種模式合併](https://hackmd.io/0EXmHNSWSDCDK48ZEJgGQg) **** # <font color="#3881a1">CSS</font> ## 1. section__container--featured-garden間隔要一致 ### 問題 原先的樣子,可以看到兩側綠邊較細,接下來的白邊變粗,圖片跟圖片之間的間隔又變細,間隔寬度都不一致: ![](https://i.imgur.com/qHIrHVv.png) ### 解決想法 1. 原先使用了col,卻沒有使用row包住,雖然看起來RWD有成功,但那是因為在`section__container--featured-garden`下了inline-block,所以就誤打誤撞的讓他看起來很像成功了。 2. 所以把inline-block移除,再加上row,就會變成是正常使用到flex去做排版了。 3. 接著處理綠邊,發現綠邊是bootstrap中的.container預設有padding,如下圖: ![](https://i.imgur.com/IhzH4Bd.png) 所以先給一個new class叫做「.body__container」去蓋過原先的預設。(`.body__container`在css下padding左右大約20px) 4. 再來要處理的部份是裡面的,圖片與圖片之間的間隔,一開始想到的是用a+a再推margin-left,但因為原先已經讓他們佔滿12個col了,所以再加上margin就會跑版。 所以作法是把a加上padding,這樣是往內推不是往外推,就不會因為往外推造成超過12行網格而換行。(如下圖) ![](https://i.imgur.com/QZWyfUm.png) padding設為10px,這樣當兩塊`<a></a>`合體時,他們的間隔就會是20px(跟綠邊等寬) ![](https://i.imgur.com/uol5jxE.png) 5. 接著是處理最兩側的白邊,目前沒有相同的間隔(如下圖) ![](https://i.imgur.com/84VtMOz.png) * 先把整個`section__container--featured-garden`這個div的左右兩側padding給減少到10px。 ![](https://i.imgur.com/6FNtzrd.png) * 會發現問題只剩下那個h3標題沒有對齊,但不能直接對這個h3下margin或padding,所以要再加一個div,把h3包起來後,對div下padding: 0 10px;。 6. 間隔一致了!(都間隔20px) ![](https://i.imgur.com/MacDziM.png) 只是在step5. 時把整個`section__container--featured-garden`這個div的左右兩側padding給減少到10px,所以連帶的`section__container--tips`要記得把padding左右兩側補回10px。 ## 2. banner下方menu的隔線做陰影 > 參考資料:[Day8 如何設定 CSS 陰影效果呢?](https://ithelp.ithome.com.tw/articles/10204331) ## 5. flex-grow/shrink/basis(可參考mdn, yachen) > 參考資料:[flex-grow MDN](https://developer.mozilla.org/zh-CN/docs/Web/CSS/flex-grow) > 參考資料:[CSS 原理 - Flex(上) Yachen](https://yachen168.github.io/article/Flex.html) 把這個額外寫到另一篇筆記:[Bootstrap Grid System vs. Grid vs. flexbox](https://hackmd.io/@transferNoZ/H19bE246q) **** # <font color="#3881a1">BootStrap</font> ## 1. 導覽列做中間,使用者不好使用 一般來說,導覽列都是做在左側或右側,因為即便是單手,也可以方便使用。但若是設計在中間,變成要像下圖一樣很不方便: ![](https://i.imgur.com/cYQhgT2.jpg) ## 2. Carousel元件 > 用於輪播圖 > 參考資料: [Bootstrap Carousel](https://getbootstrap.com/docs/5.2/components/carousel/) * ### Slides only 只能輪播,使用者不能去按 ```htmlembedded= <div id="carouselExampleSlidesOnly" class="carousel slide" data-bs-ride="carousel"> <div class="carousel-inner"> <div class="carousel-item active"> <img src="..." class="d-block w-100" alt="..."> </div> <div class="carousel-item"> <img src="..." class="d-block w-100" alt="..."> </div> <div class="carousel-item"> <img src="..." class="d-block w-100" alt="..."> </div> </div> </div> ``` * ### With control 除了輪播外,使用者可以控制頁面輪播 原本的slide only那邊的程式碼外,再加上下方兩行`<button>`即可 `<button>`可以用`<a role="button">`替代 ```css= <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleControls" data-bs-slide="prev"> <span class="carousel-control-prev-icon" aria-hidden="true"></span> <span class="visually-hidden">Previous</span> </button> <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleControls" data-bs-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> <span class="visually-hidden">Next</span> </button> ``` 完整的程式碼如下: ```css= <div id="carouselExampleControls" class="carousel slide" data-bs-ride="carousel"> <div class="carousel-inner"> <div class="carousel-item active"> <img src="..." class="d-block w-100" alt="..."> </div> <div class="carousel-item"> <img src="..." class="d-block w-100" alt="..."> </div> <div class="carousel-item"> <img src="..." class="d-block w-100" alt="..."> </div> </div> <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleControls" data-bs-slide="prev"> <span class="carousel-control-prev-icon" aria-hidden="true"></span> <span class="visually-hidden">Previous</span> </button> <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleControls" data-bs-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> <span class="visually-hidden">Next</span> </button> </div> ``` ## 3. Accordion元件 > 用於footer > 參考資料:[Bootstrap Accordion](https://getbootstrap.com/docs/5.2/components/accordion/) ### 問題 大概知道怎麼使用它了,但是希望手風琴能只在mobile模式下出現,然後在desktop時仍可以保持原本的清單樣式,不過bootstrap似乎沒有提供這樣的語法。 ### 解決過程 原本想說跟前面一樣用media query的方法,在html中分成mobile跟desktop模式,再利用media query在不同斷點下去隱藏。 不過發現了一個教學影片! > 參考影片:[Bootstrap 4 Collapse Responsive Footer - web development](https://www.youtube.com/watch?v=X8IISClNNyc) > 影片附上的Github:[bootstrap-4-collapsable-footer](https://github.com/frontendfunn/bootstrap-4-collapsable-footer/blob/master/index.html) 只是他是bootstrap4,所以語法不太相同,但主要就是看他的概念,他是運用bootstrap中的[display property](https://getbootstrap.com/docs/5.2/utilities/display/#how-it-works) * 底下清單加上d-lg-flex:在large尺寸以上時,會變成flex排版 * h4 title部份分成兩組: * 為button時:加上d-block d-lg-none d-xl-none * 為div時:加上d-none d-lg-block d-xl-block * 當尺寸在large以上時,手風琴的button會消失,一般的div的標題就會顯現 * 當尺寸在large以下時,手風琴的button會顯現,一般的div的標題就會消失 除此之外,排版上則與之前做法沒什麼差異,先在.accordion上下row,之後在.accordion-item上下col-lg-3以及col-md-12: * 利用col-lg-3:使它在large尺寸時,可以四個排列在同一個 * 利用col-md-12:使它在middle尺寸時,可以自己佔滿一整個row ### 作法 ![](https://i.imgur.com/Jp7mm3Y.png) 1. 最外層accordion下row,裡面分四層accordion-item下兩種col: ![](https://i.imgur.com/vEtMNoo.png) * col-lg-3: 依照上表可得知,當螢幕大於等於992px時,就會讓每個accordion-item佔三格 ![](https://i.imgur.com/Lz0sYZy.png) * col-md-12: 同理,當螢幕尺寸大於等於768px時,就會讓每個accordion-item佔滿整條寬度 ![](https://i.imgur.com/mWqOBti.png) 2. 但可以從上圖看見,當螢幕尺寸縮小,直到accordion-item佔滿整條寬度時,會發現這些手風琴是展開的 > 參考資料:[Bootstrap Accordion Accessibility](https://getbootstrap.com/docs/5.0/components/collapse/#accessibility) ``` If the collapsible element is closed by default, the attribute on the control element should have a value of aria-expanded="false". ``` 裡面有句話是這樣的,後來回去看程式碼,才注意到之前在aria-expanded的地方讓他變成true,所以才會造成每次手風琴都是打開的狀況。(只是改了好像也沒用) 後來繼續找,發現accordion展開後底下的清單,清單被一個div給包圍住,然後這個div有個class叫做show,於是把show移除,發現就不會再打開了。 ![](https://i.imgur.com/Rn6oZXH.png) 覺得這個show有點眼熟,就又回去[bootstrap官方文件](https://getbootstrap.com/docs/5.0/components/collapse/#accessibility)看,發現他有提到一段話: ``` If you’ve set the collapsible element to be open by default using the show class, set aria-expanded="true" on the control instead. ``` 若要讓accordion手風琴預設為展開的話,除了要設置aria-expanded="true"之外,還要再使用show這個class。 所以全部刪乾淨後,這個accordion就會預設關起來了。 **** # <font color="#3881a1">Other</font> ## 1. 用cdn可以看見bootstrap的class改了什麼 原先cdn長這樣: ```htmlembedded= <!-- CSS only --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor" crossorigin="anonymous"> ``` 注意href裡面的就好: `https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css` 然後把min去除變成以下樣子,就可以透過以下的連結,看到bootstrap對css做了哪些更改: `https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.css` (min是用來壓縮後給電腦看的) :::info JavaScript的cdn也是可以用相同作法,看到bootstrap對JavaScript做了什麼變更。 https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.bundle.js ::: ### 心得 不懂在幹麻的class,也不一定要去看官方文件,可以直接用上面網址去查詢,那個class做了什麼css的變化。(It's really useful!!!!!!!!!) ## 2. 「結構排版」與「內容」分開做 結構排版 與 內容 應該分開來做(如同 書架 之於 書) 看看哪邊「結構排版」與「內容」是沒有分開的 —> 意思是看是否有哪裡將內容抽出後,排版會跑掉的部份,就須要改掉 ## 3. defer script > 參考資料:[02. [HTML] script tag 加上 async & defer 的功能及差異?](https://ithelp.ithome.com.tw/articles/10216858) **** # <font color="#3881a1">遇到的問題詢問</font> ## 1. Bootstrap預設 > Q:Bootstrap有很多預設,要怎麼處理比較好? 需要時再去做變更,另外加上一個class做變更 這是使用別人框架所要付出的成本 ## 2. 小切到大/大切到小 > Q:網路上多數是說由小切到大,但給的設計稿是大的,這樣一樣由小切到大嗎? 其實都可以的 但如果是考慮到效能問題,小到大會比較好 因為從小的開始到大,東西是慢慢加上去的 但是大的到小的,變成要把大的(桌機內容)塞進小的,因此效能會變慢 ## 3. 版本更新問題 > Q:Bootstrap有很多版本,之後更新的話有很多要去變動,那該怎麼寫比較好在日後做維護? 同第一個問題的答案,就是使用成本,只能到時再做更改