HTML 教程之区块内联和页面布局
HTML 中的区块 && 内联元素以及页面布局。
块级 && 内联元素
HTML 中,标签(元素)可以分为两个类别,分别是块级元素(也叫区块元素)和内联元素(也叫行内元素)。
Box Model
在介绍块级元素和内联元素之前,我们需要先简单 Box Model(盒子模型)的基本概念。
在 HTML 中,所有的 HTML 元素都可以看作一个个盒子,其示意图由下所示:
[1] >>> 图解
- 内容区(content):用来在 HTML 页面显示内容的区域,可以是文本内容、图片、视频或者其他后代元素等;
- 内边距(padding):指的是内容区至边框之间的空白区域;
- 边框(border):包含内容区和内边距的边界;
- 外边距(margin):指的是当前盒子模型的边框至其他盒子模型的边框之间的区域。
[2] >>> 关于设置
- width 属性和 height 属性设置盒子模型的内容区在页面中所占区域;
- border 属性、padding 属性和 margin 属性分别设置盒子的边框、内边距和外边距。
块级元素
块级元素(Block Element)最主要的特点是,在浏览器显示独占一行,排斥与其他元素同一行的元素。
块级元素中最具代表性的就是 <div>
,此外还有 ol ul li dl dt dd && table caption tfoot thead tbody th tr && h1-h6 && form && div header nav section article aside footer && p address
等。
记忆口诀:三大列表和表格、六大标题和表单、网页布局必须算、段落地址要分块。
块级元素一般都具有特定的语义,可以使代码的可读性更强。
块级元素的主要特征如下所示:
- 不管是否使用换行标签
<br>
,块级元素总是在新行上开始; - 块级元素的宽度、高度以及外边距和内边距等都可以控制(CSS Style);
- 如果省略块级元素的宽度,那么它的宽度默认为当前浏览器窗口的宽度;
- 块级元素中可以包含其它的内联元素和块级元素。
内联元素
内联元素也可以称为行内元素(Inline Element)。其中最具代表性的就是 <span>
,此外还有 b i u em strong sup sub big small ins del code cite dfn kbd var
等。
可以看出,内联元素往往带有某种特殊的显示效果,可以代替部分 CSS 样式。
行内元素的主要特征如下所示:
- 行内元素和其它元素会在同一行上显示(不会自动折行);
- 行内元素宽(Width)、高(Height)设置无效,外边距和内边距部分可变;
- 内联元素中推荐只能容纳文本或者其他内联元素,不推荐嵌套块级元素。
[1] >>> 行内元素不可以设置宽高(Width && Height)属性,宽、高仅和内容相关(宽度会随着内容增加,高度随字体大小而改变)。
[2] >>> 内联元素可以设置部分外边界,外边界不对上下(margin-top/margin-bottom)起作用,只能对左右(margin-left/margin-right)起作用;
[3] >>> 内联元素也可以设置部分内边界,设置内边界不对上下(padding-top/padding-bottom)起作用,只能对左右(padding-left/padding-right)起作用。
F12
浏览器中,通过快捷键 F12 可以打开浏览器开发者工具(Browser DevTools)。
你可以通过 DevTools 来查看浏览器当前打开页面的源码(Ctrl + U),以及页面中的元素(Elements)和元素的样式(Styles)。
以百度搜索为例,示例图如下:
如图所示,Elements 窗口中展示了当前 HTML 页面的所有元素,你可以通过鼠标选定某个元素(例如:<html>
),然后右侧 Styles 窗口就会显示当前选定元素的样式信息,通过样式窗口的滑动条向下滑动你可以看到当前元素的盒子模型。
并且,你可以通过在不同元素上移动鼠标(不选定),可以在页面中查看到相应不同元素的盒子模型显示(根据颜色对比 Styles 窗口中 Box Model 组成颜色)以及盒子大小,如下所示:
上图展示了,<ol>
有序列表元素(块级元素)和 <a>
超链接(内联元素)元素的显示样式。
通过 DevTools 对元素样式的查看,希望你可以更深入的了解上述章节关于块级元素和内联元素的说明。
元素嵌套
正如我们前面介绍的,HTML 中的元素支持嵌套的操作,嵌套深度也没有明确限制,包括:
- 块级元素可以嵌套块级元素,也可以嵌套内联元素;
- 内联元素可以嵌套内联元素,也可以嵌套块级元素(一般不推荐)。
不建议在内联元素中嵌套块级元素,这样不仅不符合开发规范,还会导致内联元素被撑开,独自占据一行。
但是有时候又不得不这样做,比如我们想实现一个板块链接到一套教程,为了让读者点击板块的任何一个地方都能跳转到教程页面,如下图所示:
当你点击灰色区域时可跳转至相应教程,我们就需要在 <a>
超链接标签中嵌套 <div>
、<h4>
和 <p>
标签,代码如下:
1 | <a href="https://www.w3cschool.cn/html/" target="_blank"> |
总之,这是一条建议,不是强制规定。或者你可以看作 <a>
例外。
元素类型转换
标签的很多默认行为都可以借助 CSS 改变,显示类型也不例外。
可以通过 CSS display 属性将块级元素修改为内联元素,或者将内联元素修改为块级元素,或者兼具两者优点,将标签设置为行内块级元素。
CSS 虽然可以改变标签的显示类型,但是不能改变标签的语义,读者还是应该根据语义去使用标签:
<div>
标签用来布局,而不用来显示文本;<p>
标签用来显示文本,而不用来布局。
Div && Span
<div>
和 <span>
分别是最常用的块级元素和内联元素,用于将元素组合起来以便 CSS 使用。标签本身是没有任何显示效果,通常需要结合 CSS 进行样式以及页面布局设置的。
Div Tag
<div>
是非常重要的块级标记,在网页布局(Layout)方面发挥着重要的作用,用于进行页面分割(Division)。
同时,如果与 CSS 一同使用,<div>
元素可用于对大的内容块设置样式属性。
<div>
标签及其包围的内容可以看做网页的一个板块(页面布局),<div>
标签本身并没有什么特殊的显示效果,需要借助 CSS 样式对外边距、内边距、背景、边框等进行设置,从而达到对板块布局的目的。
示例代码如下:
1 | <p>这是一些文本。</p> |
这里不用深究,后续你再学习了 CSS 的使用后,会越来越多的接触到其使用。
Span Tag
HTML 中的 <span>
标签是一个用来组合其它行内元素的内联元素,以对 HTML 文档中的内容进行分组修饰。提供一种将文档的一部分独立出来的方式,以提供集体样式。
需要注意的是,此标签本身不会为文档内容提供任何视觉效果,需要与 CSS 结合使用来改变内容的样式,比如字体、颜色、大小、边框、背景等。。
示例代码如下:
1 | <p>我的母亲有 <span style="color:blue;font-weight:bold">蓝色</span> 的眼睛,我得父亲有 <span style="color:darkolivegreen;font-weight:bold">碧绿色</span> 的眼睛。</p> |
这里不用深究,后续你再学习了 CSS 的使用后,会越来越多的接触到其使用。
| >>> ============================================== Split Line ============================================= <<< |
设想一下:
通过 <div>
标签分割一个独立的网页板块,然后设置通用属性 id Or Class
,再结合 CSS 统一设置板块内的样式,是不非常方便。
同理,通过 <span>
标签对网页内具有相同样式的行内元素包围起来,然后设置通用属性 id Or Class
,再结合 CSS 统一为组内内容设置样式,极其方便。
嵌入 CSS 样式
HTML 的学习离不开 CSS 样式的支持,这里我们先来初步了解一下 CSS 样式的使用,以避免很多看官学到这里了仍然一头雾水(最少先不陌生,甚至学习过程中可以掌握一些 CSS 的使用那就更好了),更详细的使用教程可参见网络相关的教程。
通过前面的学习,你应该已经发现 HTML 仅能呈现一些信息,表现能力非常有限,我们很多时候都推荐引入了 CSS 样式一起使用,以提供元素更多的设置,使页面更加精美。
何为 CSS?
CSS(Cascading Style Sheet)可译为 “层叠样式表”。CSS 是在 HTML 4 开始使用的,是为了更好的渲染 HTML 元素而引入的。
简单来说,CSS 专门用于渲染 HTML 元素标签的样式,使用 CSS 可以实现 页面的布局、内容与表现形式分离,可以极大的提高工作效率 。
网页现在的新标准是 W3C 。目前的模式是 Html + Css + Javascript。如何理解呢?就是 Html 是网页的结构(布局 + 内容),CSS 是网页的样式,Javascript 是行为(交互)。
HTML 如何嵌入 CSS?
CSS 样式既可以作为单独的文件(后缀为 .css
类型的文件)引入到 HTML 文档中,也可以直接写在 HTML 文档中。
CSS 可以通过以下四种方式添加到 HTML 中:
- 内联(行内)样式:使用 HTML 标签的 style 属性定义 CSS 样式;
- 内部样式表:使用
<style>
元素在 HTML 文档头部<head
> 区域定义 CSS 样式; - 链接式(外部样式表):使用
<link>
标签引入外部 CSS 样式表文件; - 导入式(外部样式表):使用
@import
命令导入外部 CSS 样式表文件。
最好的方式是通过外部样式表的方式,为 HTML 页面引入样式,以实现页面内容与表现形式分离。本小节所涉及到的具体 CSS 样式设置请对照 CSS 系列博文,这里只引入一些简单的 CSS 样式辅助理解。
内联样式
你可以直接使用 HTML 标签的 style 属性来定义 CSS 样式。
其属性值是一个或多个由分号分隔的 CSS 属性:值
对,例如 style = “color:blue
; text-align:center
“。
一个修改字体、字体背景、字体颜色、字体大小、文本对齐方式以及 Div 块区使用内联样式的示例:
1 | <h1 style="font-family: verdana; text-align: center;">A Center-aligned Heading</h1> |
你可以发现,内联样式虽然编写简单,可以发现存在以下缺陷:
- 每一个标签要设置样式都需要添加 style 属性;
- 后期维护成本高,当修改页面时需要逐个打开网站每个页面一一修改;
- 添加如此多的行内样式,页面体积大,门户网站若釆用这种方式编写,那将浪费服务器带宽和流量。
内部样式表
你可以直接使用嵌入到 HTML 文档头部 <head
> 区域的 <style>
元素为当前文档定义 CSS 样式。
内部样式表的特点是该样式只能在此页使用,解决内联样式针对标签多次书写的弊端。
一个修改段落标签样式的示例:
1 |
|
尽管解决了针对具有相同样式标签的多次设置,但仍然未实现网页结构与样式的分离。这就体现在,当样式需要被应用到很多页面的时候,仍然需要针对每个页面都要修改,不灵活啊。
链接式
你可以直接使用 <link />
标签在 HTML 文档头部 <head
> 区域引入外部的 CSS 样式表文件,也称为外部样式表。这是络上网站应用最多的方式,同时也是最实用、最理想的方式。
链接式将 HTML 页面结构和样式完全分离,实现结构层和表示层的彻底分离,使 HTML 代码专门构建页面结构,而美化工作由 CSS 完成。增强了网页结构的扩展性和 CSS 样式的可维护性。
使用链接式为 HTML 代码应用样式示例:
1 |
|
其中,HTML 中 <link>
标签专门用来定义文档与外部资源的关系,最常见的用途是链接外部样式表。其 href
属性用于定义链接文档的 URL,rel
属性定义当前文档与被链接文档之间的关系,type
属性用来定义被链接文档的 MIME 类型。
两个外部样式表内容如下 >>>>
style1.css 文件代码:
1 | h2{ |
style2.css 文件代码:
1 | p{ |
通常,网站制作者会将公共部分样式放入一个 CSS 文件,当前页面样式编写新的样式文件。
链接式导入 CSS 样式的好处:
- CSS 文件可以应用于不同的 HTML 文件中,使网站所有页面样式统一;
- 将 CSS 代码放入一个 CSS 文件中便于管理、减少代码以及维护时间;
- 修改 CSS 文件时,所有应用此 CSS 文件的 HTML 文件都将更新,而不必从服务器上将所有的页面取回再修改完毕后上传。
导入式
你也可以直接使用 @import
命令导入外部 CSS 样式表文件,它是 CSS2.1 新引入的一张导入方式,一些低版本浏览器可能不支持。
这里简单了解一下就行,更多使用的链接式的导入方式。
导入样式使用 @import
命令导入外部样式表。导入样式书写方式:
1 | <style> |
需要注意的是,在 HTML 文档中使用 @import
时,@import
需要定义在 <style>
标签中。如果 <style>
标签中还有其它的 CSS 样式,那么 @import
就必须定义在所有样式的最前面。示例代码如下:
1 |
|
和链接式不同的是:使用
<link>
标签引用的样式文件会随页面同时加载,而使用@import
引用的样式文件会等待页面加载完成后再加载。 如果@import
引用的样式文件过大、加载时间过长的话,在页面加载完成后就会出现没有样式的情况,影响用户体验。
网页布局
网页布局是创建一个网站时一个必不可少的过程,通过布局可以改变网页中内容的排布方式,让网页看起来更加合理、美观。
早期,大多数网站会把内容安排到多个列中,类似于杂志或报纸那样的布局。
而由于 <div>
或者 <table>
元素可以创建多列。故,早期 HTML 网页中使用 <div>
或者 <table>
元素来进行网页布局,CSS 用于对元素进行定位,或者为页面创建背景以及色彩丰富的外观(实现布局和样式分离)。
下面分别来看如何使用 Div 和 Table 来实现传统页面的布局:
Div 布局
div 元素是用于分割 HTML 元素的块级元素。创建多列布局代码示例如下(推荐先看布局自己实现下):
1 |
|
Table 布局
table 元素是是创建布局的一种简单的方式。创建如上多列布局代码示例如下(推荐先看布局自己实现下):
1 | <table style="width: 500px;" border="0"> |
很多技术大佬,甚至可以使用 Table 设计出非常精美漂亮的 HTML 页面。
注意:虽然可以使用 HTML Table 标签来设计出漂亮的布局,但是 table 标签是不建议作为布局工具使用的 - 表格不是布局工具。
HTML5 布局新标签
HTML4 主要依赖 <div>
标签进行布局。但是,<div>
是一个包罗万象的标签,不具有明确的语义,不能指明当前板块的作用,也不利于搜索引擎理解页面内容。
为了改进传统布局模式,HTML5 提出了多个专门用于布局的新标签(块级),它们用来定义网页的不同部分,语义更加明确。
HTML5 布局标签如下:
标签 | 说明 |
---|---|
<header> |
用于定义网页的头部,头部中一般包含一些介绍性的内容,例如网站名称、Logo 或者作者的信息 |
<nav> |
用于定义网页中的导航栏 |
<section> |
用于在网页中定义一个单独的部分,其中可以包含文本、图像、表格等等。代表 HTML 文档中的“节”或“段”,“段”可以理解为一篇文章里按照主题的分段,“节”则可以理解为一个页面里的分组。其主要作用就是 对页面的内容进行分块 |
<article> |
用于定义文章或者其它独立的信息,代表一个页面中自成一体的内容,例如论坛的帖子、博客上的文章、一篇用户的评论等 |
<aside> |
用于定义网页内容以外的部分,例如网页的侧边栏、侧边购物栏等 |
<footer> |
用于定义网页的底部,例如作者、版权等信息 |
<details> |
用于定义一些详细信息,并且可以根据需要隐藏或显示这些详细信息 |
<summary> |
用于为 <details> 标签定义标题 |
各个标签详细使用可参考 HTML5 新元素支持,适用的板块如下图所示:
下面通过一个示例来演示如何使用上面介绍的标签来为网页布局:
1 |
|
关于 HTML + Div + CSS 网页模板 >>>
由于创建高级的布局非常耗时,使用模板是一个快速的选项。通过搜索引擎可以找到很多免费的网站模板,并基于这些预先构建好的网站布局,并优化它们!!!
内嵌框架
HTML 中,可以通过内联框架标签 <iframe>
来实现在当前网页中嵌入另一个网页,以致你可以在同一个浏览器窗口中显示不止一个页面。
<iframe>
标签会在网页中定义一个矩形区域,浏览器可以在这个区域内显示另一个页面的内容。语法格式如下:
1 | <iframe src="url" width="xx" height="xx"></iframe> |
其中,src
属性用来指定要嵌入的网页的 URL(矩形区域内容显示为 URL 地址指向的页面或资源);width
和 height
属性用来指定框架的宽度和高度,(默认单位是像素,当然你也可以使用百分比)。
注意:HTML
<iframe>
标签不利于搜索引擎抓取页面内容,对 SEO 具有负面效果,在现代 Web 设计中不建议使用。
给一个使用内联框架嵌入 C 语言中文网首页,宽度设置为 330 像素,高度设置为 580 像素效果的示例:
1 |
|
注意,内联框架嵌显示区域默认带有一个边框,你可以通过 frameborder
属性(0 && 1)取消边框(HTML5 中不支持该属性,通过 CSS 进行样式设置)。
目前,所有主流浏览器都支持
<iframe>
标签。你可以把需要的文本放置在<iframe>
和</iframe>
之间,这样就可以应对不支持<iframe>
的浏览器。HTML 中的内联框架<frameset>
&&<frame>
,HTML5 中已不再支持。
显示目录链接页面 >>>
iframe 元素可以显示一个目标链接的页面:
1 |
|
可以看到,内联框架区域默认设置一个样式(背景色 && 边框)将其可视化,然后你可以通过点击相应链接达到页面内显示链接相应页面的效果。
install_url
to use ShareThis. Please set it in _config.yml
.