国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > HTML語義化 & 網(wǎng)頁布局

HTML語義化 & 網(wǎng)頁布局

時間:2023-09-08 18:24:01 | 來源:網(wǎng)站運營

時間:2023-09-08 18:24:01 來源:網(wǎng)站運營

HTML語義化 & 網(wǎng)頁布局:

# 前言

作為走在漫漫前端學(xué)習(xí)路上的一位自學(xué)者。我以學(xué)習(xí)分享的方式來整理自己對于知識的理解,同時也希望能夠給大家作為一份參考。希望能夠和大家共同進(jìn)步,如有任何紕漏的話,希望大家多多指正。感謝萬分!


在閱讀這一篇之前, 希望大家已經(jīng)看過一下兩篇:

在這一篇我會介紹 HTML語義化,基本布局方法,以及 box-sizing 屬性。

HTML語義化

1. 什么是語義?

Semantics is the study of the meanings of words and phrases in a language. - w3schools.com
說白了,讓 HTML文本 語義化,就是讓 HTML元素 能夠表明其內(nèi)部 內(nèi)容的意義

那這么做是為了什么呢?

簡單來說,就是為了 讓機器能讀懂你的網(wǎng)頁 。

人類在瀏覽一個網(wǎng)頁的時候,是通過視覺,直接閱讀文字,觀察排版,圖片,等等視覺信息,來理解網(wǎng)頁想要傳達(dá)的信息的。

但是機器并沒有人類的理解力,通過讓 HTML元素 自身具備意義,機器可以知道,每一塊 HTML元素 在向瀏覽者傳達(dá)什么信息。

2. 語義化的好處







很多網(wǎng)頁會以上面的結(jié)構(gòu)來組織內(nèi)容。

上面的圖示分為:

非語義化HTML代碼

<div id="header"> <div id="nav"></div></div><div id="article"> <div id="figure"></div></div><div id="aside"></div><div id="footer"></div>


語義化HTML代碼

<header> <nav></nav></header><article> <figure></figure></article><aside></aside><footer></footer> 要實現(xiàn)上圖的結(jié)構(gòu),我們可以用著兩種方法去實現(xiàn)。一種是非語義化的,一種是語義化的。

你可能會說,上面那個代碼在 <div>元素 里面,不也用 id屬性 表明元素的作用了嗎?

但是機器可是看不懂英文的呀,你可以給一個 id屬性 定義上一個人類看得懂的單詞,但是如果你隨便寫幾個字母呢?機器不會管你 id 里寫了什么,它只知道這是個沒有任何特殊含義的 div塊級元素。

所以這個時候我們需要用 HTML5 里面的 語義元素 去寫網(wǎng)頁結(jié)構(gòu)。機器會根據(jù) 元素名 去了解里面要表達(dá)的內(nèi)容。

( 例如通過上面語義化代碼,機器就會知道,一個 頭部欄 里面包含一個 導(dǎo)航欄。而不是一個不知道干什么的 塊狀元素 包含 另一個 不清楚的 塊狀元素。)

這樣做 好處 有:




1. 有利于SEO (Search engine optimization)

2. 代碼可讀性更高

3. 訪問性更好




3. 語義元素

3.1 <header>元素

<header>元素描述了文檔的頭部區(qū)域。不要把它和<h1>-<h6>弄混哦。

<header>元素里,應(yīng)該包含 介紹性的內(nèi)容

一般出現(xiàn)在<section>, <article>, <body>的開頭。

介紹的內(nèi)容可能包括:Logo,公司名,導(dǎo)航欄,作者信息,等等。







舉例說,本站網(wǎng)站中的這一部分就應(yīng)該寫在<header>元素里。







3.2 <nav>元素

<nav>元素定義導(dǎo)航鏈接的部分。用戶通過鏈接前往相關(guān)的頁面。







舉例說,下圖中畫橙色方框里的就是導(dǎo)航,應(yīng)該寫在<nav>元素里




3.3 <footer>元素

<footer> 元素描述了文檔的底部區(qū)域。一個頁腳通常包含文檔的作者,著作權(quán)信息,鏈接的使用條款,聯(lián)系信息等。<footer>元素 和 <header>元素 基本上一樣,只不過它是被放在 文章/網(wǎng)頁 底部的。有的網(wǎng)頁中也會把<nav>放到<footer>里。這些完全取決于你想怎么安排網(wǎng)頁結(jié)構(gòu)。







繼續(xù)拿本站舉例。在這個例子中,<footer>中就有一個<nav>。







3.4 <article>元素

<article> 元素定義網(wǎng)頁中獨立內(nèi)容。每一個<article>元素就像一個個獨立的頁面。

通常有自己的<header><footer>。比如說在一個博客頁面中,每一篇文章就應(yīng)該被放在獨立<article>中。

注意剛剛說,<article>獨立的,意思是說,每一個 <article>元素 之間都是沒關(guān)系的,同時和它所在的頁面也是沒關(guān)系的。







繼續(xù)在本站中找例子。下面每一個橙色框框都應(yīng)該是一個<article>元素。上面所說的 獨立 的意思在下圖中就有體現(xiàn)。每一個橙色框里的內(nèi)容刪掉,都不會對其他橙色框造成影響。同時,對于本站這個網(wǎng)站,也不會造成影響。本站網(wǎng)站 和 其他文章 并不因為任何一篇文章的存在而存在。







3.5 <section> 元素

<section>標(biāo)簽定義文檔中的節(jié)(section、區(qū)段)。比如章節(jié)、頁眉、頁腳或文檔中的其他部分。

不同于<article>元素,<section>元素并不需要獨立于所屬文章/頁面。

可以把它形容成 帶語義的<div>。用來有意義的劃分空間。同時,<section>中應(yīng)該有標(biāo)題<h1> - <h6> ,用來表明這個區(qū)塊所包含的內(nèi)容。

比如說劃分文章中的章節(jié);頁面中用來區(qū)分內(nèi)容板塊(如:音樂,文章,新聞,圖片)







在本站專欄這個頁面中







3.6 <aside> 元素

<aside> 標(biāo)簽定義頁面主區(qū)域內(nèi)容之外的內(nèi)容(比如側(cè)邊欄)。

<header><footer>都是為了給 文章/頁面 添加額外信息。但是有的時候有些信息是和 文章/頁面 沒什么關(guān)系的。這個時候 側(cè)邊欄<aside> 就是個好地方去這些無關(guān)內(nèi)容。

比如在 文章<article> 中:放置主要內(nèi)容的附屬信息,比如與當(dāng)前文章相關(guān)的資料、名詞解釋,等等。

在 頁面 中可以放置 站點全局的附屬信息 。最常見是側(cè)邊欄,其中的內(nèi)容可以是 廣告,友情鏈接,相關(guān)文章列表,等等。







在本站中,你可以看到







3.7 那<div>還要繼續(xù)用嗎?

當(dāng)然要用?。?!

在很多時候,為了排版和樣式<div>可以作為一個很好的不帶語義 容器元素(“container element”)

比如說你要用margin: 0 auto; 水平居中頁面內(nèi)容部分

<body> <div class="wrap"> <header>...</header> <section>...</section> <footer>...</footer> </div></body> 這個時候用一個<div>元素把頁面內(nèi)容包起來,然后在瀏覽器中居中,是個很好的選擇。

而且在FlexBox或者 Grid網(wǎng)格中,我們都會經(jīng)常用到<div>去進(jìn)行布局。

記住,如果你不知道該不該用語義元素,或者不知道該用哪個。這個時候就干脆不要用了。

瞎用語義元素,比不用更麻煩。




3.8 其他的語義元素

在這一章,我并不想詳細(xì)介紹所有的語義元素。那個應(yīng)該是文檔需要去做的。


網(wǎng)頁布局

1. 一列定寬,一列寬度自適應(yīng)

比較常見的布局,一般是定寬的一側(cè)為導(dǎo)航欄,自適應(yīng)的一側(cè)為內(nèi)容欄。







FlexBox布局

HTML

<div class="container"> <div id="left"></div> <!- 定寬 --> <div id="right"></div> <!- 自適應(yīng) --></div> CSS

.container { display: flex; /* 設(shè)置為 FlexBox 容器 */}#left, #right { height: 200px; border: 1px solid red; margin: 5px;}#left { width: 50px; }#right { flex: 1 1 auto; /* 簡寫屬性,意思是flex-grow:1; flex-shrink:1; flex-basis:auto; container有剩余空間就擴大,沒有就縮小 */}


Grid網(wǎng)格布局

CSS

.container { display: grid; /* 設(shè)置為 Grid 容器 */ grid-template-columns: 50px minmax(0, auto); /* 左列定寬50px, 右列寬度為剩余空間 */ grid-template-rows: 200px; grid-column-gap: 10px;}#left, #right { border: 1px solid red;}

2. 兩側(cè)定寬,中間自適應(yīng)







FlexBox布局

HTML

<div class="container"> <div id="left"></div> <div id="center"></div> <div id="right"></div></div> CSS

.container { display: flex; /* 設(shè)置為 FlexBox 容器 */}#left, #right, #center { border: 1px solid red; margin: 10px;}#left, #right { width: 50px; height: 200px;}#center { flex: 1 1 auto;}


Grid網(wǎng)格布局

CSS

.container { display: grid; /* 設(shè)置 Grid 容器 */ grid-template-columns: 50px minmax(0, auto) 50px; /* 三列,左右兩列定寬50px,中間寬度為剩余空間 */ grid-template-rows: 200px; grid-column-gap: 10px;}#left, #right, #center { border: 1px solid red;}

3. 兩列不定寬







FlexBox布局

HTML

<div class="container"> <div id="left">我的寬度可能并不確定。。</div> <div id="right">我的寬度自適應(yīng)。</div></div> CSS

.container { display: flex;}#left, #right { height: 200px; margin: 10px; border: 1px solid red;}#right { flex: 1 1 auto;}





Grid網(wǎng)格布局

.container { display: grid; /* 設(shè)置為 Grid 容器 */ grid-template-columns: minmax(0, auto) minmax(0, auto); grid-template-rows: 200px; grid-column-gap: 10px;}#left, #right { border: 1px solid red;}

4. 多列等分







FlexBox布局

HTML

<div class="container"> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div></div>CSS

.container { display: flex;}.item { flex: 1 1 auto; /* 寬度平均分 */ height: 200px; border: 1px solid red; margin: 10px;}


Grid網(wǎng)格布局

CSS

.container { display: grid; grid-template-columns: 1fr 1fr 1fr 1fr; /* 四個項目等分剩余空間 */ grid-template-rows: 200px;}.item { margin: 10px; border: 1px solid red;}

5. 九宮格布局







FlexBox布局

HTML

<div class="container"> <div class="row"> <div class="item"></div> <div class="item"></div> <div class="item"></div> </div> <div class="row"> <div class="item"></div> <div class="item"></div> <div class="item"></div> </div> <div class="row"> <div class="item"></div> <div class="item"></div> <div class="item"></div> </div></div> CSS

.container { display: flex; flex-direction: column;}.row { display: flex;;}.item { width: 50px; height: 50px; margin: 10px; border: 1px solid red;}


Grid網(wǎng)格布局

HTML

<div class="container"> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div></div> CSS

.container { display: grid; grid-template-columns: 50px 50px 50px; grid-template-rows: 50px 50px 50px; grid-column-gap: 10px; grid-row-gap: 10px;}.item { border: 1px solid red;}

6. 百分比布局

我們也可以將寬度設(shè)置為百分比來進(jìn)行布局。百分比是相對于父元素寬度而言的。







FlexBox布局

HTML

<div class="container"> <div class="item"></div> <div class="item"></div> <div class="item"></div></div> CSS

.container { display: flex; flex-wrap: wrap;}.item { width: 33.3%; /* 一共三個item, 3 x 33.3% = 100% */ height: 200px; box-sizing: border-box; border: 1px solid red;}

7. 復(fù)雜布局







上面這個布局我們可以先把右邊的上下兩塊看成一列,這樣它就轉(zhuǎn)換成了一列定寬,一列自適應(yīng)布局。之后我們再關(guān)注右邊自適應(yīng)列。用百分比分配高度來上下布局。

FlexBox布局

HTML

<div class="container"> <div class="left"></div> <div class="right"> <div class="up"></div> <div class="down"></div> </div></div> CSS

.container { display: flex; height: 200px;}.left, .right, .up, .down { border: 1px solid red; box-sizing: border-box;}.left { width: 100px;}.right { flex: 1 1 auto;}.up { height: 40%;}.down { height: 60%;} Grid網(wǎng)格布局

CSS

.container { display: grid; grid-template-columns: 100px minmax(0, auto); grid-template-rows: 200px;}.left, .right, .up, .down { border: 1px solid red; box-sizing: border-box;}.up { height: 40%;}.down { height: 60%;} 當(dāng)然 Grid網(wǎng)格布局 不局限于這一種寫法,你能想出別的寫法嗎?


box-sizing屬性

你可能注意到了,我在前面的例子中用到了box-sizing這個屬性,這個是干什么的呢?







讓我先來看這張盒模型的圖示。當(dāng)我們定義一個元素的widthheight屬性的時候。

默認(rèn)就是定義 "content" 的尺寸(圖中藍(lán)色區(qū)域)。

但是當(dāng)我們?yōu)樵囟xpadding, border, margin屬性之后,這個元素在頁面中的尺寸也無形的增加了。

頁面的布局可能就會因為這些多出來的尺寸而被破壞。

例如下面代碼

HTML

<div class="container"> <div class="left"></div> <div class="right"></div><div> CSS

.container { display: flex; flex-wrap: wrap;}.left, .right { height: 100px; border: 1px solid red;}.left { width: 40%;}.right { width: 60%;}本來預(yù)期 40% + 60% = 100%, .left.container 40% 的寬度; .right.container 60% 的寬度,兩個<div>元素水平排布開來。

但是結(jié)果卻是







原因就是,我們設(shè)定的border: 1px solid red;讓每個<div>的寬度多了2px(左右各1px)。

那么實際寬度就是 40% + 60% + 2px + 2px > 100%

所有一行就排不開了。

.left, .right { height: 100px; border: 1px solid red; box-sizing: border-box;} 這個時候在CSS中加上box-sizing: border-box;。這樣我們定義的尺寸就是 content + padding + border 的總和了。







兩個div的排列合乎預(yù)期了。

box-sizing屬性值


練習(xí)時間到

在這一篇我們了解了HTML語義化 基本布局方法,也順便了解了box-sizing屬性。接下來

請大家仿照 我的樣例,用你喜歡的布局方式去搭建樣例中的頁面結(jié)構(gòu)吧。

我的代碼保存在Github - 練習(xí)3源代碼。如果遇到問題,大家可以當(dāng)做參考。

希望大家能多多開動腦筋,這個例子實現(xiàn)的方法不止一種。




在下一篇,我會介紹響應(yīng)式布局:







好啦,今天的分享就告一段落啦。

如果喜歡的話就點個關(guān)注吧!謝謝各位的支持!

如果有寶貴意見,也請大家多多留言!

關(guān)鍵詞:布局

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關(guān)閉