第 3 章 CSS3 基礎

串接樣式表(Cascading Style Sheet; CSS)是用來進行網頁的 外觀呈現語言,其中最基礎的概念就是 樣式(Style)串接(Cascade)盒子模型(Box model),CSS 沒有程式語言區分變數區域或全域生命週期的差別,樣式都作用在全域之中,因此具有串接、覆寫、繼承的特性,最新版本為 3.0。

接下來請大家打開 Code 或 NotePad++ 建立一個 index.html 的檔案,內容請輸入第 2 章的 html5 基本網頁,注意:請不要用複製貼上的方式輸入,以元素為單位輸入完頭尾標籤以後才繼續輸入巢狀內部的元素,接下來的練習我們都以此檔開始。

3.1 樣式與串接(Style and Cascade)

請在 p 元素輸入以下 style 屬性的設定,儲存之後,以瀏覽器開啟此檔並觀察樣式與串接對 HTML 的變化。

1.在 p 元素加上 style="color:red;"

<body>
  <p style="color:red;">Hello World!</p>
</body>

2.在屬性 style 的值中增加"background-color:green;"

3.在屬性 style 的值中增加"font-weight:bold;"

4.在屬性 style 的值中增加 "font-size:1.5em;"

5.在屬性 style 的值中增加 "font-family:Arial, Helvetica, sans-serif;"

<body>
  <p style="color:red;background-color:green;font-weight:bold;font-size:1.5em;font-family:Arial, Helvetica, sans-serif;">Hello World!</p>
</body>

以上將樣式放在單一元素的套用的方式我們稱之為 Inline Style,但此方式會有再次套用該樣式時,樣式有重複出現的缺點,因此不建議使用。 為了能統一管理與重複使用樣式,為樣式建立規則並集中放在 head 區段的 style 標籤中,稱之為 Embedding Style

請依照下面的範例,改變您的實作練習
<head>
  <style>
    .mycss {
      color:red;
      background-color:green; 
      font-weight:bold;
      font-size:1.5em;
      font-family:Arial, Helvetica, sans-serif;
    }
  </style>
</head>
<body>
  <p class="mycss">Hello World!</p> 
</body>

上述的範例中,.mycss 稱之為類別選擇子,選擇子共有標籤選擇子(Type selectors)、類別選擇子(class selectors)、 識別選擇子(ID selectors)、脈絡選擇子(contextual selectors)...等12大類,進一步的說明可參考 CSS 選擇器(Selectors)

若考慮到多個頁面共用同一個樣式,那麼 Embedding Style 又不夠用了,必須將所有的元素定義在另外一個檔案中,請各位將 .mycss 的樣式放在 default.css 檔案中,然後頁面中加入 link 進行引用, 這種可以達到多頁面共用同樣的樣式檔方式稱之為 External Style,請看以下的範例:

<head>
  <link href="css/website.css" rel="stylesheet" media="screen">
  <link href="css/print.css" rel="stylesheet" media="print"> 
  <style>
    @import url("https://fonts.googleapis.com/earlyaccess/cwtexfangsong.css"); 
  </style>
</head>
<body>
  <p class="mycss">Hello World!</p>
</body>

外部樣式表的引用方式有 2 種

  1. link 標籤:只能放在 head 區段中,用來連結外部樣式表(純文字檔案) ,可用 media 屬性宣告其作用的範圍(all, screen, print)。
  2. @import 指令:只能放在 style 標籤與外部樣式表的第 1 行,通常用在外部樣式表需要再引用其他的外部樣式表時。

若您想對這個議題進行更深的了解,可參考 CSS3 IntroductionCSS3 简介

3.2 CSS 的註解

CSS的註解方式,採用與C語言相同的斜線與星號組合

<style>
     /* 這個寬度 300px 預設指的是 content, 
    並不含 padding 與 border */ 
 width: 300px;
</style>

3.3 CSS 字型大小

CSS 字型大小除了可以設定 auto 與 百分比(%) 以外,可分為兩大類:

1.相對單位 2.絕對單位
em 一個大寫字母「M」所佔有的寬高 in
ex 一個小寫字母「x 」所佔有的寬高 cm 公分
vw viewport 寬度的 1/100 (CSS3新增) mm 公厘
vh viewport 高度的 1/100 (CSS3新增) px pixels (1px = 1/96 吋)
vmin viewport 最小長度的 1/100 (CSS3新增,要測試相容性) pt points (1pt = 1/72 吋)
vmax viewport 最大長度的 1/100 (CSS3新增,要測試相容性) pc picas (1 pc = 12 pt)

常見的單位換算如下:

  • 1em=100%=12pt=16px
  • 0.75em=75%=9pt=12px
  • 1in=2.54cm=25.4mm=72pt=6pc

若您想對這個議題進行更深的了解,可參考 HTML, CSS, 相對視窗或螢幕的高度與寬度

3.4 盒子模型(Box model)

所有 HTML 的元素都可以被視為一個盒子,通常在討論 CSS 排版的時候會稱之為盒子模型。盒子模型假定在 HTML 元素本身內容(content)之外由留白(padding)、外框(border)與邊界(margin)所包覆。

<style>
  div { 
    width: 300px;
    border: 25px solid green;
    padding: 25px 25px 25px 25px ;
    margin: 25px;
  }
</style>

事實上在 CSS 的規則中設定的 width 預設僅代表元素本身 content 的寬度, 並不含 padding、border 與 margin。 在計算寬度及高度時, border 及 padding 是否要包含?可以透過設定 box-sizing 屬性來改變,請看下表的整理:

box-sizing的值 元素寬高計算 memo
content-box content 預設此值
border-box content + padding + border
padding-box content + padding 實作的瀏覽器還不多,可以暫不理會

理解 CSS 的 Box model 將有助於理解網頁在不同瀏覽器,有時排版會有所不同的原因,請建立一個 html 檔案,並加入下列範例觀察 box-sizing: border-box 設定之後的改變。

<head>
  <style>
    #no1 {
      background-color: lightgrey;
      width: 300px;
      border: 25px solid green;
      padding: 25px;
      margin: 25px 25px;
    }
    #no2 {
      box-sizing: border-box;
      background-color: lightgrey;
      width: 300px;
      border: 25px solid green;
      padding: 25px 25px 25px;
      margin: 25px 25px 25px 25px ;
    }
  </style>
</head>
<body>
  <h2>盒子模型範例</h2>
  <p>請留意內容(content)、留白(padding)、外框(border)與邊界(margin)在 CSS 設定變化以後的呈現</p>
  <div id="no1">box-sizing 可改變盒子模型(box model)其計算高與寬的方法,而其設定值有三種: content-box、border-box 及 padding-box 。預設值為 content-box。</div>
  <div id="no2">box-sizing 可改變盒子模型(box model)其計算高與寬的方法,而其設定值有三種: content-box、border-box 及 padding-box 。預設值為 content-box。</div>
</body>

若您想對這個議題進行更深的了解,可參考 學習 CSS 版面配置,進階的可參考 CSS coding techniquesCSSConf 2015 筆記(二) – CSS Modules

3.5 元素定位(position)

html的元素預設就像是流水一樣,一個接著一個按順序排列下去,但有時我們就是想要讓某個元素的位置偏離到指定的位置,例如訂購網站的客服視窗想要固定在右上角,為了設計出複雜的版面配置,CSS 為元素設定了 position 屬性,它有許多難懂的屬性值。 進一步的說明可參考:10步掌握CSS定位

請參考下面視窗置中的CSS範例,建立一個寬 160px, 長 90px的視窗置中練習。

<style>
  div {
    font-size:2em;
    background-color: black;
    height: 300px; /* 高度 */
    width: 600px; /* 寬度 */
    position: absolute;
    top: 50%;
    left: 50%;
    /* margin: -150px 0 0 -300px; */
    margin-top: -150px; /* 高度的一半 */
    margin-left: -300px; /* 寬度的一半 */
  }
</style>
<body>
  <div>置中測試</div>
</body>

results matching ""

    No results matching ""