15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > HTML语义化 & 网页布局

HTML语义化 & 网页布局

时间:2023-09-08 18:24:01 | 来源:网站运营

时间:2023-09-08 18:24:01 来源:网站运营

HTML语义化 & 网页布局:

# 前言

作为走在漫漫前端学习路上的一位自学者。我以学习分享的方式来整理自己对于知识的理解,同时也希望能够给大家作为一份参考。希望能够和大家共同进步,如有任何纰漏的话,希望大家多多指正。感谢万分!


在阅读这一篇之前, 希望大家已经看过一下两篇:

在这一篇我会介绍 HTML语义化基本布局方法,以及 box-sizing 属性。

HTML语义化

1. 什么是语义?

Semantics is the study of the meanings of words and phrases in a language. - w3schools.com
说白了,让 HTML文本 语义化,就是让 HTML元素 能够表明其内部 内容的意义

那这么做是为了什么呢?

简单来说,就是为了 让机器能读懂你的网页

人类在浏览一个网页的时候,是通过视觉,直接阅读文字,观察排版,图片,等等视觉信息,来理解网页想要传达的信息的。

但是机器并没有人类的理解力,通过让 HTML元素 自身具备意义,机器可以知道,每一块 HTML元素 在向浏览者传达什么信息。

2. 语义化的好处







很多网页会以上面的结构来组织内容。

上面的图示分为:

非语义化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> 要实现上图的结构,我们可以用着两种方法去实现。一种是非语义化的,一种是语义化的。

你可能会说,上面那个代码在 <div>元素 里面,不也用 id属性 表明元素的作用了吗?

但是机器可是看不懂英文的呀,你可以给一个 id属性 定义上一个人类看得懂的单词,但是如果你随便写几个字母呢?机器不会管你 id 里写了什么,它只知道这是个没有任何特殊含义的 div块级元素。

所以这个时候我们需要用 HTML5 里面的 语义元素 去写网页结构。机器会根据 元素名 去了解里面要表达的内容。

( 例如通过上面语义化代码,机器就会知道,一个 头部栏 里面包含一个 导航栏。而不是一个不知道干什么的 块状元素 包含 另一个 不清楚的 块状元素。)

这样做 好处 有:




1. 有利于SEO (Search engine optimization)

2. 代码可读性更高

3. 访问性更好




3. 语义元素

3.1 <header>元素

<header>元素描述了文档的头部区域。不要把它和<h1>-<h6>弄混哦。

<header>元素里,应该包含 介绍性的内容

一般出现在<section>, <article>, <body>的开头。

介绍的内容可能包括:Logo,公司名,导航栏,作者信息,等等。







举例说,本站网站中的这一部分就应该写在<header>元素里。







3.2 <nav>元素

<nav>元素定义导航链接的部分。用户通过链接前往相关的页面。







举例说,下图中画橙色方框里的就是导航,应该写在<nav>元素里




3.3 <footer>元素

<footer> 元素描述了文档的底部区域。一个页脚通常包含文档的作者,著作权信息,链接的使用条款,联系信息等。<footer>元素 和 <header>元素 基本上一样,只不过它是被放在 文章/网页 底部的。有的网页中也会把<nav>放到<footer>里。这些完全取决于你想怎么安排网页结构。







继续拿本站举例。在这个例子中,<footer>中就有一个<nav>







3.4 <article>元素

<article> 元素定义网页中独立内容。每一个<article>元素就像一个个独立的页面。

通常有自己的<header><footer>。比如说在一个博客页面中,每一篇文章就应该被放在独立<article>中。

注意刚刚说,<article>独立的,意思是说,每一个 <article>元素 之间都是没关系的,同时和它所在的页面也是没关系的。







继续在本站中找例子。下面每一个橙色框框都应该是一个<article>元素。上面所说的 独立 的意思在下图中就有体现。每一个橙色框里的内容删掉,都不会对其他橙色框造成影响。同时,对于本站这个网站,也不会造成影响。本站网站 和 其他文章 并不因为任何一篇文章的存在而存在。







3.5 <section> 元素

<section>标签定义文档中的节(section、区段)。比如章节、页眉、页脚或文档中的其他部分。

不同于<article>元素,<section>元素并不需要独立于所属文章/页面。

可以把它形容成 带语义的<div>。用来有意义的划分空间。同时,<section>中应该有标题<h1> - <h6> ,用来表明这个区块所包含的内容。

比如说划分文章中的章节;页面中用来区分内容板块(如:音乐,文章,新闻,图片)







在本站专栏这个页面中







3.6 <aside> 元素

<aside> 标签定义页面主区域内容之外的内容(比如侧边栏)。

<header><footer>都是为了给 文章/页面 添加额外信息。但是有的时候有些信息是和 文章/页面 没什么关系的。这个时候 侧边栏<aside> 就是个好地方去这些无关内容。

比如在 文章<article> 中:放置主要内容的附属信息,比如与当前文章相关的资料、名词解释,等等。

在 页面 中可以放置 站点全局的附属信息 。最常见是侧边栏,其中的内容可以是 广告,友情链接,相关文章列表,等等。







在本站中,你可以看到







3.7 那<div>还要继续用吗?

当然要用!!!

在很多时候,为了排版和样式<div>可以作为一个很好的不带语义 容器元素(“container element”)

比如说你要用margin: 0 auto; 水平居中页面内容部分

<body> <div class="wrap"> <header>...</header> <section>...</section> <footer>...</footer> </div></body> 这个时候用一个<div>元素把页面内容包起来,然后在浏览器中居中,是个很好的选择。

而且在FlexBox或者 Grid网格中,我们都会经常用到<div>去进行布局。

记住,如果你不知道该不该用语义元素,或者不知道该用哪个。这个时候就干脆不要用了。

瞎用语义元素,比不用更麻烦。




3.8 其他的语义元素

在这一章,我并不想详细介绍所有的语义元素。那个应该是文档需要去做的。


网页布局

1. 一列定宽,一列宽度自适应

比较常见的布局,一般是定宽的一侧为导航栏,自适应的一侧为内容栏。







FlexBox布局

HTML

<div class="container"> <div id="left"></div> <!- 定宽 --> <div id="right"></div> <!- 自适应 --></div> CSS

.container { display: flex; /* 设置为 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网格布局

CSS

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

2. 两侧定宽,中间自适应







FlexBox布局

HTML

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

.container { display: flex; /* 设置为 FlexBox 容器 */}#left, #right, #center { border: 1px solid red; margin: 10px;}#left, #right { width: 50px; height: 200px;}#center { flex: 1 1 auto;}


Grid网格布局

CSS

.container { display: grid; /* 设置 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">我的宽度自适应。</div></div> CSS

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





Grid网格布局

.container { display: grid; /* 设置为 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网格布局

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网格布局

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. 百分比布局

我们也可以将宽度设置为百分比来进行布局。百分比是相对于父元素宽度而言的。







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. 复杂布局







上面这个布局我们可以先把右边的上下两块看成一列,这样它就转换成了一列定宽,一列自适应布局。之后我们再关注右边自适应列。用百分比分配高度来上下布局。

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网格布局

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%;} 当然 Grid网格布局 不局限于这一种写法,你能想出别的写法吗?


box-sizing属性

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







让我先来看这张盒模型的图示。当我们定义一个元素的widthheight属性的时候。

默认就是定义 "content" 的尺寸(图中蓝色区域)。

但是当我们为元素定义padding, 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%;}本来预期 40% + 60% = 100%, .left.container 40% 的宽度; .right.container 60% 的宽度,两个<div>元素水平排布开来。

但是结果却是







原因就是,我们设定的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的排列合乎预期了。

box-sizing属性值


练习时间到

在这一篇我们了解了HTML语义化 基本布局方法,也顺便了解了box-sizing属性。接下来

请大家仿照 我的样例,用你喜欢的布局方式去搭建样例中的页面结构吧。

我的代码保存在Github - 练习3源代码。如果遇到问题,大家可以当做参考。

希望大家能多多开动脑筋,这个例子实现的方法不止一种。




在下一篇,我会介绍响应式布局:







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

如果喜欢的话就点个关注吧!谢谢各位的支持!

如果有宝贵意见,也请大家多多留言!

关键词:布局

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭