15分鐘讓你寫好CSS

- OOCSS

Lecturer: 土豆

Date: 2019/11/17

大綱

  • OOCSS介紹
  • 實際案例
  • class命名

OOCSS介紹

OOCSS =
Object Oriented CSS

假設今天我想要一顆藍色的button
我可能會直接這樣寫

如果還要一顆紅色的button

就再加上這段

.btn-red {
  display: inline-block;
  background-color: rgb(200, 0, 0);
  padding: 10px 30px;
  color: white;
  font-size: 20px;
  border-radius: 5px;
  border: none;
  transition-duration: 100ms;
  transition-timing-function: ease-in-out;
}

.btn-red:hover {
  background-color: rgb(100, 0, 0);
}
  <button class="btn-red">
  	I'm a button too
  </button>

還要綠色的黃色的、有邊框的按鈕

簡單,小事

.btn-green {
  display: inline-block;
  background-color: rgb(0, 200, 0);
  padding: 10px 30px;
  color: white;
  font-size: 20px;
  border-radius: 5px;
  border: none;
  transition-duration: 100ms;
  transition-timing-function: ease-in-out;
}

.btn-green:hover {
  background-color: rgb(0, 100, 0);
}

.btn-yellow {
  display: inline-block;
  background-color: rgb(200, 200, 0);
  padding: 10px 30px;
  color: white;
  font-size: 20px;
  border-radius: 5px;
  border: none;
  transition-duration: 100ms;
  transition-timing-function: ease-in-out;
}

.btn-green:hover {
  background-color: rgb(100, 100, 0);
}

.btn-border {
  display: inline-block;
  padding: 10px 30px;
  background-color: transparent;
  color: black;
  font-size: 20px;
  border-radius: 5px;
  border: 2px solid rgb(0, 0, 200);
  transition-duration: 200ms;
  transition-timing-function: ease-in-out;
}

.btn-border:hover {
  color: white;
  background-color: rgb(0, 0, 200);
}
  <button class="btn-green">
  	I'm a button too too
  </button>
  <button class="btn-yellow">
  	I'm a button too too too
  </button>
  <button class="btn-border">
  	I'm a button too too too too
  </button>

老闆,再來個紫色的橘色的墨綠色的、圓形的、正方形的、大的、小的、極小的、極大的、大的紫色、小的橘色、極大的圓形的墨綠色的按鈕!
加邊框加到飽!!

夠了喔,你當我這裡是吃到飽自助餐是不是

OOCSS兩個概念

  • 結構與樣式的分離
  • 內容與容器的分離

結構與樣式的分離

內容與容器的分離

容器

內容

可以這樣裝

也可以這樣裝

實際案例

利用結構與樣式分離的概念

 改改button

容器與內容分離

假設有個header跟footer
一個紅字一個藍字

我想讓藍色的字也出現在container

.container h1 {
  color: #00d;
}
<div class="container">
  <h1>Hello!</h1>
</div>

我想讓紅色的字也出現在container

.container .container-blue {
  color: #00d;
}

.container .container-red {
  color: #d00;
}
<div class="container">
  <h1 class="container-blue">Hello!</h1>
  <h1 class="container-red">Hello!</h1>
</div>

我想讓header跟footer又紅又藍

header .header-red {
  color: #d00;
}

header .header-blue {
  color: #00d;
}

footer .footer-red {
  color: #d00;
}

footer .footer-blue {
  color: #00d;
}
<header>
  <h1 class="header-red">Hello!</h1>
  <h1 class="header-blue">Hello!</h1>
</header>

<!-- ... -->

<footer>
  <h1 class="footer-red">Hello1</h1>
  <h1 class="footer-blue">Hello1</h1>
</footer>

我想讓navbar又紅又藍
sidebar又紫又黃
footer 又黑又白
container來個彩色

又來個奧客啊!!!

容器與內容分離

容器: footer, header, div, navbar, sidebar...

內容: h3

class命名

其實剛剛那些命名並不好

想像一下老闆今天跟你說: 「耶,那個網頁藍色的部分全部換成咖啡色好不好?」

「好啊,當然好」

怎麼改?

.btn-brown {
  background-color: rgb(117, 52, 5);
  color: white;
}

.btn-brown:hover {
  background-color: rgb(80, 32, 0);
}
<button class="btn btn-brown">I'm a button</button>

別忘了還有文字

/* ... */

header .header-brown {
  color: #00d;
}

/* ... */

footer .footer-brown {
  color: #00d;
}
<header>
  <!-- ... -->
  <h1 class="header-brown">Hello!</h1>
</header>

<div class="container">
  	<!-- ... -->
	<h1 class="footer-brown">Hello1</h1>
</div>

<footer>
  <!-- ... -->
  <h1 class="footer-brown">Hello1</h1>
</footer>

別忘了還有你剛做好的navbar
還有sidebar, card, progress bar, input, alert, form......

終於改好後...

老闆說: 「耶,那個網頁咖啡色好難看,全部改回藍色好不好?」

盡量用抽象化的方式命名

blue

primary

red

secondary

green

info

sidebar-right

sidebar

col-4

參考資料

感謝聆聽

15分鐘讓你寫好CSS - OOCSS

By Sam Yang

15分鐘讓你寫好CSS - OOCSS

  • 491