---
# System prepended metadata

title: 8/31 線上 Slack 助教
tags: [網頁切版直播班 - 2021 夏季班]

---

---
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">
```





---

