时间:2023-09-08 18:24:01 | 来源:网站运营
时间:2023-09-08 18:24:01 来源:网站运营
HTML语义化 & 网页布局:Semantics is the study of the meanings of words and phrases in a language. - w3schools.com说白了,让 HTML文本 语义化,就是让 HTML元素 能够表明其内部 内容的意义。
<header>
头部栏(如:Logo,标题)<nav>
导航(如:各个部分的链接)<article>
文章(如:独立的一篇文章)<figure>
流内容(如:图像、图表、照片、代码)<aside>
侧边栏(如:相关信息,广告)<footer>
底部栏(如:作者信息,联系信息)<div id="header"> <div id="nav"></div></div><div id="article"> <div id="figure"></div></div><div id="aside"></div><div id="footer"></div>
<header> <nav></nav></header><article> <figure></figure></article><aside></aside><footer></footer>
要实现上图的结构,我们可以用着两种方法去实现。一种是非语义化的,一种是语义化的。<div>
元素 里面,不也用 id
属性 表明元素的作用了吗?id
属性 定义上一个人类看得懂的单词,但是如果你随便写几个字母呢?机器不会管你 id
里写了什么,它只知道这是个没有任何特殊含义的 div
块级元素。class
,id
属性,并不能保证每个人都明白所表达的意思。<header>
元素<header>
元素描述了文档的头部区域。不要把它和<h1>-<h6>
弄混哦。<header>
元素里,应该包含 介绍性的内容。<section>
, <article>
, <body>
的开头。<header>
元素里。<nav>
元素<nav>
元素定义导航链接的部分。用户通过链接前往相关的页面。<nav>
元素里<footer>
元素<footer>
元素描述了文档的底部区域。一个页脚通常包含文档的作者,著作权信息,链接的使用条款,联系信息等。<footer>
元素 和 <header>
元素 基本上一样,只不过它是被放在 文章/网页 底部的。有的网页中也会把<nav>
放到<footer>
里。这些完全取决于你想怎么安排网页结构。<footer>
中就有一个<nav>
。<article>
元素<article>
元素定义网页中独立内容。每一个<article>
元素就像一个个独立的页面。<header>
和<footer>
。比如说在一个博客页面中,每一篇文章就应该被放在独立<article>
中。<article>
是独立的,意思是说,每一个 <article>
元素 之间都是没关系的,同时和它所在的页面也是没关系的。<article>
元素。上面所说的 独立 的意思在下图中就有体现。每一个橙色框里的内容删掉,都不会对其他橙色框造成影响。同时,对于本站这个网站,也不会造成影响。本站网站 和 其他文章 并不因为任何一篇文章的存在而存在。<section>
元素<section>
标签定义文档中的节(section、区段)。比如章节、页眉、页脚或文档中的其他部分。<article>
元素,<section>
元素并不需要独立于所属文章/页面。<div>
。用来有意义的划分空间。同时,<section>
中应该有标题<h1> - <h6>
,用来表明这个区块所包含的内容。<aside>
元素<aside>
标签定义页面主区域内容之外的内容(比如侧边栏)。<header>
和<footer>
都是为了给 文章/页面 添加额外信息。但是有的时候有些信息是和 文章/页面 没什么关系的。这个时候 侧边栏<aside>
就是个好地方去这些无关内容。<article>
中:放置主要内容的附属信息,比如与当前文章相关的资料、名词解释,等等。<div>
还要继续用吗?<div>
可以作为一个很好的不带语义 容器元素(“container element”)。margin: 0 auto;
水平居中页面内容部分<body> <div class="wrap"> <header>...</header> <section>...</section> <footer>...</footer> </div></body>
这个时候用一个<div>
元素把页面内容包起来,然后在浏览器中居中,是个很好的选择。FlexBox
或者 Grid网格
中,我们都会经常用到<div>
去进行布局。<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有剩余空间就扩大,没有就缩小 */}
.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;}
<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;}
.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;}
<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;}
.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;}
<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;}
.container { display: grid; grid-template-columns: 1fr 1fr 1fr 1fr; /* 四个项目等分剩余空间 */ grid-template-rows: 200px;}.item { margin: 10px; border: 1px solid red;}
<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;}
<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;}
<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;}
<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网格布局.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
这个属性,这个是干什么的呢?width
和height
属性的时候。padding
, border
, margin
属性之后,这个元素在页面中的尺寸也无形的增加了。<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)。.left, .right { height: 100px; border: 1px solid red; box-sizing: border-box;}
这个时候在CSS中加上box-sizing: border-box;
。这样我们定义的尺寸就是 content + padding + border 的总和了。div
的排列合乎预期了。box-sizing
属性值content-box
:默认值。width
和 height
属性只包含content
。 border
和 padding
不包括。border-box
:width
和 height
属性包含 content
, padding
和 border
。inherit
:从父元素继承关键词:布局