标签的选择
这么多篇文章下来,大家对如何进行页面布局想必已经有了自己的一些想法,特别是上周的文本样式的介绍,让大家可以实现了对整个页面的搭建以及制作。所以基本的制作已经没有什么问题的情况下,我们需要考虑的就是如何能够实现的更好,能够让我们做的页面代码精简度、性能让能够更符合我们的开发规范。所以今天我们着重的给大家来讲解一下如何选择标签,以最精简的代码实现我们的页面制作。
本文内容概要:
1 标签的默认样式
2 标签的语义性
3 标签的嵌套规则
4 标签的选用原则
5 合理选择标签的案例展示
一、标签的默认样式
通过这么长时间的页面制作,我们知道在每次制作的时候都需要引入一个叫做reset.css的CSS文件,当这个文件引入正确的时候,我们书写出来的每一个标签都是一模一样的。回顾我们前两周的文章,在那里我们看到了标签最原始的状态,都有着自己独特的展示状态。网页的结构是由许许多多的标签组成,标签可以分为块、行、第三类,我们在使用他们进行页面的搭建的时候,也是需要考虑它们在浏览器中的默认样式的。
标签默认展示状态如下:
- html, body, h1, h2, h3, h4, h5, h6, p, ol, ul, dl, dt, dd, div, form, fieldset, legend, option, details, { display: block; }/*默认以块元素显示*/
- noscript, a, em, strong, small, var, b, u, br, ins, del, img, audio, video, source, canvas, label {display: inline; }/*默认以行元素显示*/
- li { display: list-item; }/*默认以列表显示*/
- head { display: none; }/*默认不显示*/
- table { display: table; }/*默认为表格显示*/
- tr { display: table-row; }/*默认为表格行显示*/
- thead { display: table-header-group; }/*默认为表格头部分组显示*/
- tbody { display: table-row-group; }/*默认为表格行分组显示*/
- tfoot { display: table-footer-group; }/*默认为表格底部分组显示*/
- col { display: table-column; }/*默认为表格列显示*/
- colgroup { display: table-column-group; }/*默认为表格列分组显示*/
- td, th { display: table-cell; }/*默认为单元格显示*/
- caption { display: table-caption; }/*默认为表格标题显示*/
二、标签的语义性
标签原始的默认样式会对我们的布局产生很大的影响,所以大家在进行页面布局的时候都需要引入reset.css文件来清除掉标签的默认样式,这样才会利于我们的布局。但是作为开发者的我们是明白这点,但是浏览器在解析的时候却无法这样进行区分,它只会知道你这个标签仍然有默认样式,只不过是被我们使用样式进行了覆盖。所以这时候我们为了让浏览器能够更好地解析页面,我们就需要了解一下标签的语义性,说白了就是标签自身的含义是什么。
接下来大家在一起看看吧~!
- div:无语义的布局标签;
- <h1>、<h2>、<h3>、<h4>、<h5>、<h6>,作为标题使用,并且依据重要性递减。<h1>是最高的等级。
- <p>段落标记,<p></p>中的文字会自动换行;
- <b>标签语义为“加粗”;
- <i>标签寓意为“倾斜”;
- <em>标签语义为“强调”,表示用倾斜;
- <strong>标签语义为“更强烈的强调”,表示用粗体;
- <ul>标签语义为定义无序列表;
- <ol>标签语义为定义有序列表;
- <li>标签语义为定义列表项目;
- <dl>标签语义为定义了定义列表;
- <dt>标签语义为定义了定义列表中的项目;
- <dd>标签语义为定义列表中定义条目的定义部分;
- <span>标签的语义为被用来组合文档中的行内元素;
- <table>标签的语义的为定义 HTML 表格;
- <th>标签的语义为定义表格内的表头单元格;
- <caption>标签的语义为定义表格标题;
- <button>标签的语义为定义一个按钮;
- <input> 标签的语义为用于搜集用户信息,根据不同的 type 属性值,输入字段拥有很多种形式。输入字段可以是文本字段、复选框、掩码后的文本控件、单选按钮、按钮等等;
- <textarea>标签的语义为定义多行的文本输入控件;
- <label>标签的语义为为input元素定义标注;
- <ins>标签的语义为定义已经被插入文档中的文本;
- <del>标签的语义为定义文档中已被删除的文本;
三、标签的嵌套规则
如上,我们看到了所有标签的含义是什么,也可以通过它们自身的语义性来做相应的选择,做好页面优化工作。所以在自己会选择标签了之后,小编再为大家整理了一个前端开发中需要遵守的标签嵌套规则。
具体如下:
- 1) body可以直接包含块状元素、ins、del、script。不可以直接包含行内元素;
- 2) ins和del(行内元素)可以包含块状元素或者行内元素,其他任何行内元素都不允许包含块状元素;
- 3) p、和h1-h6可以直接包含行内元素和文本信息,但是不允许包含块状元素;
- 4) dl元素只允许包含dtdd,同时dt不能包含块状元素,只允许包含行内元素,对于dd可以包含任何元素;
- 5) form元素不能够直接包含input元素。原因在于input元素属于行内元素,form元素仅仅能够包含块状元素;
- 6) table元素只能够包含caption、colgroup、col、thead、tbody、tfoot,不能够直接包含tr或者其他任何元素。
四、标签的选用原则
当我们明白了标签的默认样式、语义性、嵌套规则等之后,再来开始选择标签来进行页面布局就会轻松很多,因为这时候我们会发现很多东西前面准备好了,现在只需要直接参照着规则来进行使用即可。
那现在我们主要就从代码的精简度层面出发,给大家总结了一些在代码书写的时候需要注意的点。
1、去除不必要的html标签
- 1) meta标签,除了其中的编码声明行,keyword与description,其余的都可以不要;
- 2) link标签。通常用来载入css文件的,带上type=”text/css”即可,不用再加上那句rel=”stylesheet”;
- 3) script标签,也只保留type,而无需使用language属性;
- 4) 加载不需要视觉操作的元素上的属性,如link,script上的class,id等。
2、主动减少html标签
- 1) 减少html标签嵌套:精简代码,是在确认了需求改动不频繁的前提下,能用1层标签的就不要用两层,然后通过css来达到相同的视觉效果;
- 2) 尽量少使用内联css:就是style=”height..”这种。因为内联css每次都要加个style=,关键是它只能对此元素生效。不如用一个class代替,复用起来也方便;
- 3) 合并css:把不需要判断条件载入的css文件给合并了,可以减少一个link标签,也就减少了一个http请求。
除这些标签的选用规则以外,在页面制作中,对于图片的选用也是至关重要的。因为背景图、数据图总是让人难以区分,所以接下来小编就给大家好好划分一下:
1、使用img标签
- 1) 如果图像是内容的一部分或图表或人,使用img标签加上alt属性;
- 2) 如果你想打印页面并且你想要的图像包括默认情况下使用img;
- 3) 使用img(alt文本)图像有一个重要的语义时,比如一个警告图标;
- 4) 如果依赖于浏览器缩放图像比例并且可以呈现不错的效果时使用img;
- 5) 如果配合 z-index 伸展背景图像来填补它的整个窗口时使用img;
- 6) img会首先加载因为src在html文件本身中,而背景图是样式表中引入的图像,样式表加载后才出现。
2、使用background-image属性
- 1) 如果图像不是内容的一部分时使用backgrond-image;
- 2) 当图像代替文本使用时使用backgrond-image;
- 3) 如果需要缩短下载时间,通过CSS sprites 时使用backgrond-image;
- 4) 如果只需要展示图像的一部分,通过CSS sprites时使用backgrond-image;
- 5) 如果需要为不同的屏幕分辨率展示不同的图像,使用 media查询时使用backgrond-image。
五、合理选择标签的案例展示
如下给出的两个案例是我们最常用的页面导航的制作,两种方式对应着两种标签的选择方法,各有各的特点。
制作导航栏,直接使用div~a的形式,减少层级的嵌套。如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>H5course</title>
<link rel="stylesheet" type="text/css" href="css/reset.css" />
<style type="text/css">
.nav {
width: 980px;
height: 34px;
margin: 20px auto 0;
padding: 4px 0 0 88px;
background: url("images/nav_bac.jpg") 0 0 repeat-x;
}
.nav a {
float: left;
height: 34px;
padding: 0 15px;
line-height: 34px;
color: #fff;
}
.nav .active-nav, .nav a:hover {
padding: 0 14px;
border-left: 1px solid #ac1736;
border-right: 1px solid #ac1736;
background: url("images/nav_act_bac.jpg") 0 0 repeat-x;
}
</style>
</head>
<body>
<div class="nav">
<a class="active-nav" href="" title="">首页</a>
<a href="" title="">HTML5学堂</a>
<a href="" title="">HTML5学堂</a>
<a href="" title="">HTML5学堂</a>
<a href="" title="">HTML5学堂</a>
<a href="" title="">HTML5学堂</a>
<a href="" title="">HTML5学堂</a>
<a href="" title="">HTML5学堂</a>
<a href="" title="">HTML5学堂</a>
<a href="" title="">HTML5学堂</a>
</div>
</body>
</html>
制作导航栏,使用ul~li~a来实现,多嵌套一个层架,但是结构稳定。如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>H5course</title>
<link rel="stylesheet" type="text/css" href="css/reset.css" />
<style type="text/css">
.nav {
width: 980px;
height: 34px;
margin: 20px auto 0;
padding: 4px 0 0 88px;
background: url("images/nav_bac.jpg") 0 0 repeat-x;
}
.nav li a {
float: left;
height: 34px;
padding: 0 15px;
line-height: 34px;
color: #fff;
}
.nav .active-nav, .nav li a:hover {
padding: 0 14px;
border-left: 1px solid #ac1736;
border-right: 1px solid #ac1736;
background: url("images/nav_act_bac.jpg") 0 0 repeat-x;
}
</style>
</head>
<body>
<ul class="nav">
<li>
<a class="active-nav" href="" title="">首页</a>
</li>
<li>
<a href="" title="">HTML5学堂</a>
</li>
<li>
<a href="" title="">HTML5学堂</a>
</li>
<li>
<a href="" title="">HTML5学堂</a>
</li>
<li>
<a href="" title="">HTML5学堂</a>
</li>
<li>
<a href="" title="">HTML5学堂</a>
</li>
<li>
<a href="" title="">HTML5学堂</a>
</li>
<li>
<a href="" title="">HTML5学堂</a>
</li>
<li>
<a href="" title="">HTML5学堂</a>
</li>
<li>
<a href="" title="">HTML5学堂</a>
</li>
</ul>
</body>
</html>
两组代码展示的效果是一致的,如下:
六、作业安排
拿出上次我们写的页面,查看自己对于标签的选用是否合理,如不合理需要怎么修改。
- 突然顿悟的Javascript中的this
- 解决Electron加载带jquery的项目报错问题
- dedecms利用addfields body在首页调用文章内容
- 如何设置dedecms自定义表单必填项?
- 如何用<dl>标签做表格而不用table标签
- Gulp使用指南
- Gulp Error: Cannot find module 'jshint/src/cli'
- 自学如何使用Python和Keras构建你自己专属的AlphaZero系统
- 用Visual Studio Code写Node.j
- 帝国CMS搜索页伪静态实现方法
- 5步搭建GO环境
- 你真的了解如何将 Nginx 配置为Web服务器吗
- 12个JavaScript技巧
- 梯度是如何计算的
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JVM垃圾回收之垃圾回收器,程序员必须掌握的知识
- 5分钟Flink - 时间与语义案例详解
- 5分钟Flink - 时间语义和Watermark
- 3. Pandas系列 - DataFrame操作
- 4. Pandas系列 - 基本功能和统计操作
- 面经手册 · 第8篇《LinkedList插入速度比ArrayList快?你确定吗?》
- 无所不能的Embedding 2. FastText词向量&文本分类
- 5. Pandas系列 - 重建索引
- 6. Pandas系列 - 迭代
- Java 虚拟机基础原理:功能,内存管理,类的加载机制,分析字节码执行过程
- Stack有性能问题?推荐用ArrayDeque队列!队列是什么?什么是双端队列、延迟系列、阻塞队列,全是知识盲区!
- 纯CSS实现照片墙效果
- Tungsten Fabric知识库丨构建、安装与公有云部署
- 7. Pandas系列 - 排序和字符串处理
- JVM调优,程序员必须掌握的知识