CSS 習作|The display Property:辨識 block、inline、inline-block 三胞胎

更新 發佈閱讀 14 分鐘
raw-image

Intro:The display Property

w3schools:
The display property specifies if/how an element is displayed.
Every HTML element has a default display value depending on what type of element it is.
The default display value for most elements is block or inline.

Display 是一種 CSS 屬性,指定「 是否 / 如何 」顯示元素,每一個 HTML element 都有預設的 display value,而它的「value」是什麼,則取決於它是什麼類型的 HTML element。
所以!瞭解各個 HTML element 的預設屬性很重要!很重要!很重要!
🚩 瞭解 HTML element 預設屬性

raw-image

🙋🏻‍♀️ CSS Syntax 複習

raw-image
w3schools:
A CSS rule consists of a selector and a declaration block.


CSS 語法說明

  • CSS Syntax 由一個選擇器 ( Selector ) 和一個聲明塊 ( declaration block ) 組成。
  • Selector 選擇器指向要設置樣式的 HTML 元素。
  • Declaration block 聲明塊包含一個或多個以分號分隔的聲明。
  • 每個 declaration block 都包含一個 CSS 屬性名稱和一個值,以冒號分隔。
  • 多個 CSS 聲明用分號分隔,聲明塊用花括號括起來。

Display value

Display 是一種 CSS 屬性,大多數的元素其默認的 display value 是「block」或「inline」,常見的 value 值有以下這些:

  • display: block;
  • display: inline;
  • display: none;
  • display: inline-block;

接下來要各別介紹「block」、「inline」、「inline-block」之間的不同特性!


(一) Block-level Elements

w3schools:
A block-level element always starts on a new line and takes up the full width available (stretches out to the left and right as far as it can).

Block-level Elements 總是從一個新行開始,並佔據可用的整個寬度(盡可能向左和向右延伸),如下圖呈現:

raw-image

且 block 可以被設置 width、height,下圖的演示為寬高設置 100px,使內容看起來是黃色正方形。

raw-image

擁有預設 block 值的 HTML Element
Examples of block-level elements:
<div>、<h1> ~ <h6>、<p>、<form>、<header>、<footer>、<section>。


(二) Inline Elements

w3schools:
An inline element does not start on a new line and only takes up as much width as necessary.

Inline Elements 不會從新行開始,只會佔據必要的寬度。 特別注意的是,具有 inline 屬性的元素,並不能為它添加 width 或 height。

Examples of inline elements:<span>、<a>、<img>。
另外我們也可以注意到 <img> 元素 和 <span>、<a> 元素沒有對齊。


(三) Inline-block

w3schools:
Compared to display: inline, the major difference is that display: inline-block allows to set a width and height on the element.
Also, with display: inline-block, the top and bottom margins/paddings are respected, but with display: inline they are not.
Compared to display: block, the major difference is that display: inline-block does not add a line-break after the element, so the element can sit next to other elements.

差異:inline-block 與 block、inline 之間的比較

  • 與 inline 相比,inline-block 允許在元素上設置寬度和高度。
  • 此外,對於 display: inline-block,頂部和底部邊距/填充會受到尊重,但對於 display: inline 它們則不然。
  • 與 block 相比,主要區別在於 inline-block 不在元素後添加換行符,因此該元素可以緊挨著其他元素。



💡 Inline 觀念釐清:

可以在 inline 行內元素的頂部和底部添加 padding,但是 padding 不會影響周圍其他行內元素的間距,所以 padding 會和其他行內元素重疊,如下圖:

raw-image

在 Box Model 的概念下,要計算元素的完整大小,必須計入 padding、 borders、margins 等。而 Box Model 是隨著元素的累加而不斷堆疊,最父層的 box 會受內部的 box 內容推擠。

而 inline element 則有不同的情境,當他被加入 padding-top、padding-bottom 時,他父層(或外層)的元素不會被推擠,反而會蓋住周圍的元素。


🧙🏻‍♀️ 實驗:使用 <a> inline element,宣吿不同 display: value

在以下的範例中,我對 <a> 宣告不同的 display: value 來設計按鈕,一起來觀察不同的 value 對 <a> 以及周遭元素造成什麼效果及變化。


使用 <a> 標籤,預設 inline
在具有 inline 屬性的 <a> 標籤中,無法放置 block element,但是放置在 <a> 裡的 <div>,其 <div> 裡面內含的文字卻受到 a:hover 的影響,在滑鼠 hover 時變色了。

➋ 將 <a> 標籤宣告為 display: block;

將帶有 inline 屬性的 <a> 標籤,將其顯示方式改變為 display: block,讓 <a> 標籤以 block 做呈現,這也使 <a> 標籤能夠添加 width 和 height 的值,在畫面上也另起一列,並且盡可能向左右延伸。

➌ 將 <a> 標籤宣告 display: inline-block;

被設置成 inline-block 的 <a> 標籤,無法放置 block element,且放置在 <a> 裡的 <div> 文字,也沒有讀取 text-decoration: none;


(五) 覆蓋默認顯示值 Override The Default Display Value

w3schools:
As mentioned, every element has a default display value. However, you can override this.
Changing an inline element to a block element, or vice versa, can be useful for making the page look a specific way, and still follow the web standards.

如前所述,每個元素都有一個默認顯示值。 但是,我們可以覆蓋它,將內聯元素更改為塊元素,反之亦然,對於使頁面看起來具有特定方式並且仍然遵循 Web 標準很有用。

注意,顯示屬性的規則與條件:

w3schools:
Note:Setting the display property of an element only changes how the element is displayed, NOT what kind of element it is. So, an inline element with display: block; is not allowed to have other block elements inside it.

設置元素的顯示屬性只會改變元素的顯示方式,而不是元素的類型。
因此,一個帶有 display: block 的內聯元素; 不允許在其中包含其他塊元素。


問題紀錄

  • 在「Override The Default Display Value」的觀念下,一個帶有 display: block 的 inline element,會允許在其中包含其他 block elements 嗎?
  • 設計具有超連結屬性的按鈕時,應該如何架構 HTML element 和 CSS Property 呢?
  • inline-block 與 block、inline,它們分別使用的時機與合適的組合是什麼呢?


💆🏻⏳ 習作時間

習作題目:運用 CSS Display 屬性,設計一個具有 LOGO 、按鈕的選單。
( 此習作練習不具有 RWD )

raw-image


習作演練心得:

撰寫 HTML 與 CSS 時,需注意使用的 HTML element 本身具有何種 (或預設) display 屬性,例如 <a>、<img> 是具有 inline 屬性的 element,而 <ul>、<li> 則是具有 block 特性的 element。

並且,瀏覽器預設樣式 會使相同的 HTML element 在不同的瀏覽器有不同的呈現,因此,需要 CSS Reset 來覆蓋瀏覽器內建的 HTML element 樣式,這邊也參考 六角學院的 CSS Reset - 清空瀏覽器預設樣式

在習作中,使用 <ul>、<li> 來包住 <a> 設計選單,理由是:

  • 區塊元素可以包含行内元素或者某些區塊元素行。
  • 内元素只能包含行內元素,不能包含區塊元素。

以 <a> 標籤設計按鈕時,宣告 <a> display: block,並針對 <a> 設置 padding,這邊不對 <li> 設定寬高,反而是 透過在 <a> 上添加 padding 屬性,目的是使 <a> 擁有內距,增加連結點擊範圍。

將 <img> 宣告 display: block,並設置 img { width: 100%; } ,這使 <img> 可以隨著父層內距及外距的增加或內縮,來自適應寬高。
這邊我用 . test_box 做了演示,試著將 img 的 width: 100% 拿掉,會發現父層的 .test_img 盒子被蒲公英圖片撐開了。

另外,在練習 display 的過程中,運用了一些本篇筆記沒有紀錄的內容,關於排版的練習與使用,這邊是參考 justify-content - 決定主軸對齊方式

  • display: flex;
  • flex-direction: eow;
  • justify-content: space-between;
  • align-items: center;


總結

透過本次習作,能夠瞭解 HTML element 基礎概念,並且在規劃 HTML、CSS 時理解以前看不到的盲點,希望這篇筆記也對初學 CSS Dispaly 的你有所幫助。
如果你喜歡本篇筆記,歡迎一起練習 本篇習作題目:運用 CSS Display 屬性,設計一個具有 LOGO 、按鈕的選單。
Practice make perfect, 我是正在自我習作中的 Draw,我們下篇見 🙇🏻


延伸學習資源及參考

w3schools

區塊元素 行內元素 空元素特點?分別有哪些?

inline element 與 padding 的二三事

CSS Flexbox 介紹與解析

六角學院 Codepen Flexbox Playground

留言
avatar-img
留言分享你的想法!
avatar-img
學習如何學習
6會員
10內容數
從零開始,記錄網頁設計的學習過程。
學習如何學習的其他內容
2024/04/04
CSS 裡的「寬度,最大寬度,最小寬度」分別是什麼呢? ➊ width 用來設定元素的寬度,且 width 作用範圍僅在 content-box 區塊 ➋ max-width → 用來設定元素的最大寬度 ➌ min-width → 用來設定元素的最小寬度
Thumbnail
2024/04/04
CSS 裡的「寬度,最大寬度,最小寬度」分別是什麼呢? ➊ width 用來設定元素的寬度,且 width 作用範圍僅在 content-box 區塊 ➋ max-width → 用來設定元素的最大寬度 ➌ min-width → 用來設定元素的最小寬度
Thumbnail
2023/09/10
我想分享給那些曾有過相同感受的同學,覺得自己能力不適合、在學習中感到自卑想要放棄的那些時候。而後半篇則想分享自己對於老師、助教的感謝。
Thumbnail
2023/09/10
我想分享給那些曾有過相同感受的同學,覺得自己能力不適合、在學習中感到自卑想要放棄的那些時候。而後半篇則想分享自己對於老師、助教的感謝。
Thumbnail
2023/09/10
本篇為隨筆紀錄,將看完的影片疏理為短小筆記 。 特別有感的是,現在回頭看,發現影片中每個提及的知識點或是誤區自己都踩過好幾輪了,這是在學習及練習中很常會反覆發生、需要注意的地方,提醒自己在接下來的練習中,能將老師提及的思維及作法吸取並應用。
Thumbnail
2023/09/10
本篇為隨筆紀錄,將看完的影片疏理為短小筆記 。 特別有感的是,現在回頭看,發現影片中每個提及的知識點或是誤區自己都踩過好幾輪了,這是在學習及練習中很常會反覆發生、需要注意的地方,提醒自己在接下來的練習中,能將老師提及的思維及作法吸取並應用。
Thumbnail
看更多
你可能也想看
Thumbnail
本篇習作加強自我對 CSS Box Model 的觀念,也是在實作練習中發現自己雖然看似理解了盒模型,但其實在應用上尚不熟悉,因此藉由筆記重新梳理和練習,將 CSS Box Model 的基礎觀念整理並釐清,一起來看看吧!
Thumbnail
本篇習作加強自我對 CSS Box Model 的觀念,也是在實作練習中發現自己雖然看似理解了盒模型,但其實在應用上尚不熟悉,因此藉由筆記重新梳理和練習,將 CSS Box Model 的基礎觀念整理並釐清,一起來看看吧!
Thumbnail
本篇習作內容,除了練習六角預習影音內的常用語法章節外,也額外整理了其它常用於文本的 HTML 元素,希望能透過這樣的整理,在未來設計結構更複雜的網站介面內容時,能扎穩根基。
Thumbnail
本篇習作內容,除了練習六角預習影音內的常用語法章節外,也額外整理了其它常用於文本的 HTML 元素,希望能透過這樣的整理,在未來設計結構更複雜的網站介面內容時,能扎穩根基。
Thumbnail
因為被 position 打敗,就要在 position 這裡站起來!
Thumbnail
因為被 position 打敗,就要在 position 這裡站起來!
Thumbnail
display 是一種 CSS 屬性,指定「 是否 / 如何 」顯示元素,而每一個 HTML element 都有預設的 display value,然而在預設的情況下,新手如我在剛接觸時常踩入深不見底的盲區, 一起來釐清學會辨識吧!
Thumbnail
display 是一種 CSS 屬性,指定「 是否 / 如何 」顯示元素,而每一個 HTML element 都有預設的 display value,然而在預設的情況下,新手如我在剛接觸時常踩入深不見底的盲區, 一起來釐清學會辨識吧!
Thumbnail
在 Modern Web 的世界中,已經有非常多的套件、語法、框架,可以解決大部分網頁排版問題。 以我近期的觀察來說,在專案開發時,大部分公司會為了讓下一個接手、維護的開發者能更快上手專案架構,而採取原生的 CSS 寫法,而不是仰賴快速又方便的套件。
Thumbnail
在 Modern Web 的世界中,已經有非常多的套件、語法、框架,可以解決大部分網頁排版問題。 以我近期的觀察來說,在專案開發時,大部分公司會為了讓下一個接手、維護的開發者能更快上手專案架構,而採取原生的 CSS 寫法,而不是仰賴快速又方便的套件。
Thumbnail
不論是在基礎或是進階的版面排列,幾乎離開不了 position 系列的 CSS 語法,如果對於這些語法不熟悉,要快速完成畫面需求幾乎是不可能的,甚至會延宕整個團隊的開發速度(對,position 語法就是這麽重要)。
Thumbnail
不論是在基礎或是進階的版面排列,幾乎離開不了 position 系列的 CSS 語法,如果對於這些語法不熟悉,要快速完成畫面需求幾乎是不可能的,甚至會延宕整個團隊的開發速度(對,position 語法就是這麽重要)。
Thumbnail
明明想要某個欄位的寬高為 200px,卻發現自己不知道為什麼怎麼更改都會改不動,又或者寬高更改了,卻沒有辦法與其他元素並列。 上述的狀況,通常都是在不熟悉 HTML display 特性而產生的狀況下才會出現⋯⋯
Thumbnail
明明想要某個欄位的寬高為 200px,卻發現自己不知道為什麼怎麼更改都會改不動,又或者寬高更改了,卻沒有辦法與其他元素並列。 上述的狀況,通常都是在不熟悉 HTML display 特性而產生的狀況下才會出現⋯⋯
Thumbnail
一個網頁只會有一個h1 標籤(h1.p.img)裡面可以放多個屬性(src.background.color) 建立 HTML 環境 告訴大家這是html5的語法 關於整個專案的資訊放這裡面 頁籤標題 寫給別人看的要放這裡面 Emmet 預設安裝 /*語意使用英文*/ /*使
Thumbnail
一個網頁只會有一個h1 標籤(h1.p.img)裡面可以放多個屬性(src.background.color) 建立 HTML 環境 告訴大家這是html5的語法 關於整個專案的資訊放這裡面 頁籤標題 寫給別人看的要放這裡面 Emmet 預設安裝 /*語意使用英文*/ /*使
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News