--- tags: 網頁切版直播班 - 2021 夏季班 --- # 8/31 線上 Slack 助教 ## 今日助教輪班時間 JasonLu:8/31 (二) 回覆時間:下午 1:00 -下午 5:00 ## 發問規範 老師助教同學們好,**這是我的 Codepen**,我**原本預期**「HTML 第 8 行會出現 ...」,**但卻出現預期外的結果**「...」,想問下問題出在哪裡? ## 注意 1. 請各位先到 Slack 上將問題放在助教服務內的 thread,如圖 ![](https://i.imgur.com/nHE3sOx.png) 2. 遵循以上的發問規範以便助教查看問題,不可直接貼上網址而沒有說明文字或者只提供截圖 3. 助教會依照 Slack 上的順序回覆問題 4. 以下問題區塊只能由助教自行增加 5. 助教會將回覆寫在下方問題區塊 ## 問題 1.will: 老師助教同學們好,這是我的 作業 https://github.com/penuts27/art_exhibition https://penuts27.github.io/art_exhibition/, 想請問我的m/pc畫面產生x軸的原因是什麼,找很久找不出來,並且在滑到「直播回顧」的時候會自己消失,並且想問下問題出在哪裡? ———————————— 昨天助教有解答過是因為aos照成的空白,並在body中加了overflow-x:hidden,但我這邊看起來還是有噎,並且點擊右上角ticket icon,offcanvas也會從畫面空白那邊開始長,再麻煩幫我看一謝謝謝 助教回覆: 1. 這個 overflow 的問題主要是因為 aos 套件設定的 transform 造成的 (如下圖),助教目前觀察到比較常發生在 由右往左出現的動畫,例如 zoom-out-left、fade-left。這邊附上 [github issue](https://github.com/michalsnik/aos/issues/227) ![](https://i.imgur.com/m5p2wrx.png) 3.只在 body 寫 overflow-x:hidden 還始有空白有可能是 offcanvas 或是其他 aos 效果造成的,目前還沒有研究出確切的原因 ><,但確定 html、body 都加上 overflow-x:hidden 可以讓空白、x軸都會消失。 --- 2.zyc: Jason助教你好,想請問變數&通用類別的問題 如果想要客製化通用類別,並新增自己的_custom-utils.scss的檔案, 問題1)裡面的key可以跟 BS5 _utilities 的 key 名稱重複嗎?如果重複的話會無法成功編譯嗎? 問題2)如果 key 名稱一樣,也要預留BS5原本的設定,是不是要把 BS5 _utilities key 的內容複製過來,再新增自己的值?如果 key 名稱不一樣的話就不衝突嗎? 以 line-height為例, 我想要得到兩個結果: a、新增2個 line-height → 1.3 和 1.8,並產生出 .lh-1.3 和 .lh-1.8 的 class b、也想保留BS5 的 lh-1、lh-sm、lh-base 和 lh-lg 問題3)那請問在我新增的 _custom-utils.scss,這樣寫對嗎?還是有什麼建議的寫法呢? //我新增的 _custom-utilities ``` "line-height": ( property: line-height, class: lh, values: ( "1.3": 1.3, //這樣寫對嗎?需要開關引號嗎?class名稱內可不可以包含小數點? "1.8": 1.8, 1: 1, sm: $line-height-sm, base: $line-height-base, lg: $line-height-lg, ), ), ``` 問題4)_variables 的 $negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default; 是什麼意思?我設定的 $spacers 也可以產生負值的通用類別嗎?那 -40px 的 classs 該怎麼寫呢?@@ 謝謝助教~ 助教回覆: 1.key 可以和 bootstrap 的 key 重覆。如果使用到變數的話就不能跟 Bootstrap 一模一樣,以免覆蓋掉 Bootstrap 的變數 2.如果 key 名稱一樣,也要預留BS5原本的設定,可以把整個 _utilities.scss 檔案複製到 helper 資料夾裡做修改,新增自己的值。key 的名稱,像是 property、class、values 都不建議做更動,建議按照 BS5 的格式,避免編譯出問題。 例如:助教實驗把 key class 改成 classname ,結果就造成 flex的 class 編譯出問題。 3.css 的 class 上不能有小數點哦!編譯出來會有語法錯誤~ 如果是小數點的話可以用 英文來命名,例如 xs 或 xl 4.這一行 scss 的目的主要是在產生負的 margin 值,預設是不啟用,如果要使用需要先把 變數 $enable-negative-margins 的值 改成 true,改成 true 之後就會把 $spacers 傳入 @function negativify-map(),回傳 (return) 一個帶有負值的 sass map,最後變數 $negative-spacers 會傳入 _utilities.scss "negative-margin" 裡的 values,透過編譯自動產生出負的 margin。 **所以想要產生 -40px 的 class 可以在 $spacers 新增 40px 的值,在透過 $negative-spacers 產生 -40px 的 class。** ``` $negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default; @function negativify-map($map) { $result: (); @each $key, $value in $map { @if $key != 0 { $result: map-merge($result, ("n" + $key: (-$value))); } } @return $result; } ``` --- 3.Peggy Tsai: Jason 助教您好, 附上repo page 不知道是我哪邊去改到了 我在新增一個新的頁面(reservation.html)之後 就一直沒辦法gulp deploy 會一直產生下面的畫面 想請教要怎麼把它變正常 謝謝 我有查到資料說是要把publish資料夾刪掉再跑一次 但我不確定是不是這樣做 助教回覆:同學可以嘗試把 publish 資料夾刪掉 在 gulp deploy 一次 。如果刪除「.publish」之後狀況還是沒改善,那麼建議刪除「dist」資料夾並重新輸入 gulp build → gulp deploy 即可。 --- 4.鉦勝: 助教你好 swiper有改版後,有把原本的.swiper-containere改成.swiper js的部分也有修改過了,還是無法執行 想請助教幫忙解答 這是我的repo/page 助教回覆: 有以下地方需要做修改: 1.datepicker 在 all.js 沒有寫設定發生了錯誤,直接造成後面的 swiper 的程式無法運作,建議先將 datepicker 註解 2.建議 把 slidesPerView 全部移除,在 Swiper 7 是改成用 grid:{ row:...,fill:... } 來設定。 --- 5.zyc: 助教你好,再補充一題: 我一直找不到要到哪裡去更改BS5 預設 a 標籤的 hover 的樣式,請問要如何修改這個部分呢?謝謝 附上 repo、pages。 助教回覆: 這一個設定在 mixin/_button.scss 的 @mixin button-variant 裡的 &:hover。 hover 的顏色會變成黑色主要是是背景顏色的關係。因為這個是有根據一個設計規範的,為了要讓字的顏色和背景顏色都清楚,所以他會去判斷對比度,足夠的話才會呈現白色字。 scss code 的部分助教在 [stackoverflow](https://stackoverflow.com/questions/67952873/customizing-bootstrap-5-button-colors-and-properties-in-it) 查到跟 Bootstrap [的色彩對比函數](https://bootstrap5.hexschool.com/docs/5.0/customize/sass/#color-contrast) color-constract() 有關,這一部分助教在第八週的作法是直接在自己的 scss 用覆蓋的 ``` example: .btn-outline-primary:hover, .btn-outline-secondary:hover { color: $white; } ``` ``` @mixin button-variant( $background, $border, $color: color-contrast($background), $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)), $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)), $hover-color: color-contrast($hover-background), <----- 與 color-contrast() 有關 $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)), $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)), $active-color: color-contrast($active-background), $disabled-background: $background, $disabled-border: $border, $disabled-color: color-contrast($disabled-background) ) { color: $color; @include gradient-bg($background); border-color: $border; @include box-shadow($btn-box-shadow); &:hover { color: $hover-color; <-------------------------------- 在這裡 @include gradient-bg($hover-background); border-color: $hover-border; } ``` --- 6.ZY Hsu : 助教好,我在這個繼續預約的按鈕上寫的jQ的.click(); 預期點下去之後會自動跳到 填寫資料的頁面,但卻發現並沒有真的觸發到按鈕,想請問該怎麼寫合適。 助教回覆:換頁按鈕的話可以不用對按鈕寫 click 事件,直接使用 a 連結的 href 屬性點擊連到填寫資料的頁面即可 --- 7.lumei: 助教您好:這是我的repo和pages有幾個問題想請教一下 1.console裡會一直出現bootstrap和datepicker的錯誤訊息 2.請問如果我想將swiper js部分獨立成新的檔案,建議是在all.js裡寫什麼程式呢? 還是在layout.ejs裡像附圖這樣寫(swiper.js)就可以了嗎? 再麻煩助教幫忙解答了!辛苦了 助教回覆: 1.因為datepicker 只有在填寫資料哪一頁會使用,所以在其他沒有使用 datepicker 的頁面會找不到元素節點 elem, 會回傳 null,而 null 帶進 datepicker產生錯誤 "Cannot set property 'datepicker' of null ",間單來說就是帶入的 elem 參數不能是 null。 2.bootstrap.css 的 error: 助教這邊看到 dist 沒有編譯出 bootstrap.css,原因是 all.scss 沒有 import boottrap.scss。把 <link rel="stylesheet" href="./assets/style/bootstrap.css"> 移除即可 ![](https://i.imgur.com/UQIA7ne.png) 3.swiper js部分獨立成新的檔案的部分 : 同學可以在 app/assets/js 裡新增一個 swiper.js (如圖),這樣在 layout.ejs 就可以不用寫 <script> 引入 swiper.js,因為 gulp 編譯之後會把 app/assets/js 裡面的 js 全部合併到 dist/assets/js/all.js 裡 ![](https://i.imgur.com/bGFz0Qv.png) --- 8.kaka: 助教好,我的 repo 和 demo,想請教 AOS 的效果,目前依照第七周的作法加在 “感受身心,活在當下“這個區塊上,但畫面卻沒有出現動畫…再麻煩助教幫忙解答了,感謝 助教回覆: 同學 aos 使用的部分沒有問題,問題是出在 js datepicker 發生錯誤導致後面的 AOS.init 無法執行 ( 打開 chrome dev 可以看到錯誤訊息 )。因為datepicker 只有在填寫資料哪一頁會使用,所以在其他沒有使用 datepicker 的頁面會找不到元素節點 elem, 會回傳 null,而 null 帶進 datepicker 會產生錯誤 "Cannot set property 'datepicker' of null ",間單來說就是帶入的 elem 參數不能是 null。 ![](https://i.imgur.com/33RrylI.png) **修改的部分會建議將 aos、 datepicker js 的位置對調,把 datepicker 放在最後,這樣就正常了**~ ![](https://i.imgur.com/e8gqdho.png) --- 9.roger chuang: 助教你好,我想把 精心設計這區塊的圖片做成跟設計稿一樣,我在 li上使用了ratio ratio-1x1,正常來說圖片寬高會跟設計稿一樣,可是我弄出來後圖片變的很小,請問助教我該從哪邊調整,圖片才能跟設計稿一樣? 助教回覆: 這是因為 使用 flex 之後 內元件 li 的空間無法容納 1*1 img 的寬度,所以會等比例縮小。可以在內元件 li 加上[.flex-shrink-0](https://bootstrap5.hexschool.com/docs/5.0/utilities/flex/#grow-and-shrink) 阻止 li 空間等比例縮小 修改後會變成這樣: ![](https://i.imgur.com/7VTdFaa.png) --- 10.Jiang V: 助教您好,想請問如何讓這四個 li 寬度像設計稿一樣呢,在不要去指定寬度的狀態下,有嘗試用flex-grow之類的class,但都無法起作用,請要要如何調整程式碼讓這四個li像設計一樣排列,這是我的 repo / gh-pages 再請助教協助解惑,感謝助教 助教回覆: 這一塊的確不好做,助教也想了很久。這裡可以用 格線 col- 搭配 offset 來做,這邊傅上結構圖 ![](https://i.imgur.com/vMnCuBp.png) --- 11.Sec: 助教好,想请问关于 "師資介紹" 的 swiper 问题,如图可见我的头像都被 swiper 预设的 overflow: hidden 给盖掉了有什么办法让头像完整显示, 尝试了很多例如 overflow-x: hidden 等的方法还是没有效果 ghpage: https://secyj.github.io/weblayout-week-8/course-intro.html code : https://github.com/SecYJ/weblayout-week-8/blob/master/app/course-intro.html 助教回覆: 可以修改 overflow 的位置: 1. 用 .overflow-visible 把 swiper 預設的 overflow-hidden 覆蓋,讓頭像出現 2. 在 container 那一層 加上 .overflow-hidden ``` <div class="container overflow-hidden"> h2... <div class="swiper overflow-visible ..."> ... </div> </div> ``` --- 12.粘勝凱: 助教好,我想問直播回顧左邊有一塊#190014CC色的矩形,請問那個矩形是怎麼置入的? 助教回覆:背景圖片可以在 row 那一層使用 background-image,文字內容的話可以用格線來做。 ![](https://i.imgur.com/ygDAUjM.png) #190014CC 的背景顏色可以用偽元素搭配 position 來做 ( 手寫 ) 1.在 col 那一層加上 position-relative 2.格線 .col- 那一層使用偽元素 ::after + .position-absolute 3.因為背景有半透明,所以要使用 opacity 4.因為背景顏色會蓋住文字,所以需要加上 z-index ``` classname::after{ position:absolute; content=" "; display: ...; background-color: ....; opacity:...; width:...; height:...; top:...; left:...; z-index:...; ... } ``` --- 13.粘勝凱: 助教好,我想問中間的經典系列鏡框,在螢幕375px以下時,字直接貼在圖片上的效果該怎麼寫? 助教回覆: 這一塊可以用 position 來處理: 1.在圖片、文字的父層加上 position:relative; 2.在375px時,文字區塊加上 position:absolute; 讓其脫離原本的位置,以父層 relative 為基準點偏移 ![](https://i.imgur.com/iCiKmVQ.png) --- 14.周周: 助教您好~這是我的repo & pages ,想請問瑜珈空間下方的課程推薦, 1.用swiper.js套件為何每一個會滿版? 2.用overflow-auto,想請問下方的卷軸要如何隱藏? 助教回覆: 1.這是因為 .swiper-slide 設定 width:100% 造成的,如果要調整每一個 swiper-slide 的寬度需要到 js 將 slidesPerView auto 改成其他數字,每個 swiper-slide 分配到的寬度是 父層 .swiper 的寬度除以 slidesPerView 的數值。如果 slidesPerView 是 "auto" 的,每個 swiper-slide 的寬度會是 100% 佔滿整行。 2. 可以使用偽類 ::-webkit-scrollbar 來讓 scrollbar 隱藏,可以參考這篇[文章](https://ithelp.ithome.com.tw/articles/10197593),只是文章的都是加上 body,而在這裡則是要以 class 的方式加在 .overflow-auto 那一層 ``` p.s classname 要換個名稱 <div class="overflow-scroll d-flex classmame ">.... </div> classmame{ -ms-overflow-style: none; //for IE } classmame::-webkit-scrollbar{ // for google chorme display:none; } ``` --- 15.助教好,我的 repo 和 demo 昨天有請教 AOS 的問題,試了您的回覆(NO.8),把 date picker 和 AOS 順序對調,但還是沒辦法解決…再麻煩助教協助看哪裡出了問題,感謝 助教回覆:助教這邊的改法 是把 app/assets/js/all.js 裡 date picker 和 AOS 的順序對調 ``` 改之前 : // Date Picker const elem = document.querySelector('input[name="datePicker"]'); const datepicker = new Datepicker(elem, { // ...options autohide: true, nextArrow: '>', prevArrow: '<', buttonClass: 'btn primary', todayHighlight: true, }); // AOS Animation //AOS.init(); AOS.init({ once: true, offset: 400, // offset (in px) from the original trigger point delay: 0, // values from 0 to 3000, with step 50ms duration: 1000 // values from 0 to 3000, with step 50ms }); ``` ``` 改之後 ( 可以 work ) //前面都是 swiper // AOS Animation //AOS.init(); AOS.init({ once: true, offset: 400, // offset (in px) from the original trigger point delay: 0, // values from 0 to 3000, with step 50ms duration: 1000 // values from 0 to 3000, with step 50ms }); // Date Picker const elem = document.querySelector('input[name="datePicker"]'); const datepicker = new Datepicker(elem, { // ...options autohide: true, nextArrow: '>', prevArrow: '<', buttonClass: 'btn primary', todayHighlight: true, }); ``` --- 16.ZY Hsu: 助教好,關於我的問題,或許應該講得更清楚一點: 我在這個繼續預約的按鈕上寫的jQ的.click(); 預期點下去之後會自動跳到 填寫資料的頁面,(但我是用"導覽與頁籤 (Navs and tabs)",所以並非用a連結換頁,預約流程都在同一頁)。我希望透過按繼續預約的按鈕跳到下一個流程, 並且這三個分頁區塊是不能點擊的,只能填完資料按繼續預約才進入下一個流程。 我目前是用jQ寫click在繼續預約的按鈕上,但實際操作後只發現它並沒有真正觸發按鈕,只是觸發我寫這個按鈕的其他效果(例如:收合預約須知區塊)而已,因為並沒有達到換頁的效果。 想請問助教這部分該怎麼寫比較適當。 助教回覆: 助教這邊測試,在 click .keepReserveBtn 之後只有收闔預約須知區塊,在點擊之後還需要讓 #chooseProject (選擇方案) 隱藏,#fillData (填寫資料)出現。 思考方向大概是這樣: .keepReserveBtn clicked (事件觸發) ---> .reserveRemind 消失 --> #chooseProject 消失 --> #fillData 出現 助教的做法是在 .keepReserveBtn click 之後對 #fillData、 #chooseProject 新增/移除 class show、actice,因為 tab 的顯示切換是透過 show, active 這個 class,所以可以切換 class 達到效果 ``` $('.keepReserveBtn').click(function () { $('#fillData').addClass('show active') <-------- 加上這兩行 $('#chooseProject').removeClass('show active'); $('.fillDataPage').click().removeClass('disabled').addClass('active').parent().siblings().find('.activeTertiary').removeClass('active').addClass('disabled'); }) ``` --- 17.助教您好~這是我的repo 和 page 在layout(md和mobile版)裡有放一個點擊icon頁面網上滑動的jQuery,但效果都出不來,網頁顯示Uncaught TypeError: $(...).animate is not a function 可是其他作業的同樣做法就可以想知道怎麼辦,另外在課程介紹裡的modal,如果加了modal-dialog-centered的話整個modal被拉長,不是原本的尺寸置中是因為什麼呢~~ 以上麻煩您了!!謝謝~ 助教回覆: Q1. * 目前 vendors.js 載入的 jq 是 slim 版的,不包含 ajax、effect 效果,因此建議同學引入 這支 [jquery(有包含ajax、effect 效果)](https://code.jquery.com/jquery-3.6.0.min.js) [jquery 官網說明](https://jquery.com/download/) Q2. * 建議把 .card 移除,因為 .card 裡的 flex-direction:column 會影響 .modal-dialog-centered 內 align-items:center 垂直置中的方向 * 同學背景顏色和、padding 設定放錯地方了,要放在 .modal-content 那一層才對。如果放在 .modal-dialog-centered 那一層會看起來被拉長,但其實是因為 modal-dialog-centered 有設定最小高度,如果加上 .bg-primary 則整個區塊都會填滿。 ``` @media (min-width: 576px) .modal-dialog-centered { min-height: calc(100% - 3.5rem); } ``` --- 18.James 助教好,我在立即預約表單裡的姓名/年齡這區塊會破版,目前嘗試過使用w-50以及格線系統col-6都是一樣的結果,想請問是哪裡出了問題? 我的 repo / pages 助教回覆:input 會破版主要 跟 input 的 size 屬性有關,size 決定輸入區塊的寬度可以顯示多少文字,預設可以容納 20 個文字,直接影響了 input 的可見寬度,這邊提供 [文章](https://matthung0807.blogspot.com/2019/08/html_0.html) 給同學 修改的部分,助教比較不會去修改 input 的 size 屬性,會比較建議在 input 上使用 Bootstrap 的通用類別 [.form-control](https://bootstrap5.hexschool.com/docs/5.0/forms/form-control/#example)。 如果不想用 Bootstrap5 的元件也可以直接在 input 加上 .w-100 ``` <input type="text" id="name" placeholder="請輸入您的姓名" class="form-control"> or <input type="text" id="name" placeholder="請輸入您的姓名" class="w-100"> ``` ---