整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

HTML 简介

HTML(HyperText Markup Language,中文:超文本标记语言)是一种用于创建网页结构和内容的标记语言。它由一系列标签组成,这些标签描述了网页中的各个元素和其它相关信息。通过使用HTML标签和属性,开发人员可以定义文本、图像、链接、表格、表单等元素,并控制它们的外观和行为。本文主要介绍HTML的基本概念、历史背景和用途。


参考文档:https://www.cjavapy.com/article/3297/


HTML实例:


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CJAVAPY编程之路(cjavapy.com)</title>
</head>
<body>
 
<h1>我的第一个标题</h1>
 
<p>我的第一个段落。</p>
 
</body>
</html>


HTML文档的后缀名可以是.html或.htm,都可以使用,没有区别。


注意:对于中文网页需要使用<meta charset="utf-8"> 声明编码,否则会出现乱码。有些浏览器(如 360 浏览器)会设置 GBK 为默认编码,则你需要设置为<meta charset="gbk"> 。


1、HTML的基本概念


1)标签(Tag)


HTML使用标签来定义网页中的各个元素。标签通常以尖括号< >的形式出现,如<p>表示段落,<img>表示图像等。标签可以包含属性,用于提供额外的信息或控制元素的行为。


2)元素(Element)


一个完整的HTML元素由开始标签、内容和结束标签组成。例如,<p>这是一个段落</p>就是一个完整的段落元素。


3)属性(Attribute)


HTML标签可以具有属性,用于提供元素的额外信息或控制元素的行为。属性以键值对的形式出现,例如<img src="image.jpg">中的src属性指定了图像的源文件。


4)文档结构


一个HTML文档由<html>、<head>和<body>等标签组成。其中,<html>标签用于定义整个HTML文档的根元素,<head>标签用于定义文档的头部信息,如标题和样式表链接,<body>标签用于定义文档的主体内容。


5)块级元素和内联元素


HTML元素可以被分类为块级元素和内联元素。块级元素以块的形式显示,独占一行或一块空间,如<p>、<div>等。内联元素以行内的方式显示,不会独占一行,如<span>、<a>等。


6)嵌套


HTML元素可以嵌套在其他元素内部,形成一个层次结构。例如,<div>元素可以包含<p>元素,<p>元素可以包含<span>元素。


7)<!DOCTYPE> 声明


HTML文档的开头通常会包含一个DOCTYPE声明,用于指定文档的HTML版本。


例如:


<!DOCTYPE html>
<!DOCTYPE HTML>
<!doctype html>
<!Doctype Html>


2、HTML与Web 浏览器


HTML(HyperText Markup Language)是一种用于创建网页结构和内容的标记语言,而Web浏览器(如谷歌浏览器,Internet Explorer,Firefox,Safari)是用于显示和解释HTML文档的应用程序。Web浏览器通过解析HTML文档,将其转换为可视化的网页。浏览器会读取HTML文档中的标签和内容,并根据这些标签和内容的定义,渲染出网页的结构和样式。HTML提供了各种标签和属性,用于定义文本、图像、链接、表格、表单等在网页中的展示和交互方式。浏览器在解析HTML时,会根据标签和属性的定义,将文本显示为段落、标题或其他格式,显示图像、链接,并响应用户的交互操作。


通过HTML和Web浏览器的结合,用户可以在浏览器中访问和浏览各种网页内容,包括网页文本、图像、视频、音频等多媒体元素,并与网页进行交互,如点击链接、填写表单、提交数据等。


大部分浏览器中,直接输出中文会出现中文乱码的情况,需要在头部将字符声明为 UTF-8 或 GBK。


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>
页面标题</title>
</head>
<body>
 
<h1>我的第一个标题</h1>
 
<p>我的第一个段落。</p>
 
</body>
</html>


3、HTML版本及历史背景


HTML有多个版本,每个版本都有不同的特性和改进。


版本

发布时间

HTML

1991

HTML+

1993

HTML 2.0

1995

HTML 3.2

1997

HTML 4.01

1999

XHTML 1.0

2000

HTML5

2014


1)HTML 1.0


HTML 1.0是最早的HTML版本,于1993年发布。它只包含一些基本的标签和属性,用于创建简单的文本和链接。HTML 1.0的目标是定义一种通用的超文本标记语言。


2)HTML 2.0


HTML 2.0于1995年发布,是对HTML 1.0的改进和扩展。它引入了一些新的标签和属性,如图像标签和表格标签,以支持更丰富的内容展示。


3)HTML 3.2


HTML 3.2于1997年发布,是对HTML 2.0的进一步改进。它引入了一些新的标签和属性,如表单标签和框架标签,以支持交互性和页面布局。


4)HTML 4.01


HTML 4.01于1999年发布,是对HTML 3.2的修订和扩展。它引入了更多的标签和属性,如层标签和样式表,以支持更灵活的页面设计和样式控制。


5)XHTML 1.0


XHTML(eXtensible HyperText Markup Language)是基于XML的HTML版本。XHTML 1.0于2000年发布,它严格遵循XML的语法规则,要求所有标签和属性都要正确嵌套和闭合。


6)HTML5


HTML5是HTML的最新版本,于2014年正式发布。HTML5引入了许多新的特性和API,如语义化标签、多媒体支持、Canvas绘图、本地存储等。HTML5还支持响应式设计,以适应不同设备和屏幕尺寸。


4、HTML用途


HTML是构建网页结构和内容的基础语言,它提供了丰富的标签和属性,使得开发者可以创建各种类型的网页,并实现不同的功能和效果。HTML用于定义网页的整体结构,包括标题、段落、列表、标题、导航菜单等元素。通过使用不同的HTML标签和属性,可以将文本、图像、音频、视频等内容组织起来,并构建页面的层次结构。HTML可以用于展示文本内容和多媒体元素,如图像、音频和视频。通过使用适当的HTML标签和属性,可以插入和显示各种类型的媒体内容,从而使网页更加丰富和吸引人。HTML提供了创建表单的标签和元素,可以用于收集用户的输入数据。通过使用表单元素如文本框、复选框、单选按钮和下拉列表等,用户可以输入数据并提交给服务器进行处理。


参考文档:https://www.cjavapy.com/article/3297/

习目标

  • 了解常用浏览器
  • 掌握WEB标准
  • 理解标签语义化
  • 掌握常用的排版标签
  • 掌握常用的文本格式化图像链接等标签
  • 掌握三种列表标签
  • 掌握表格标签
  • 掌握表格标签
  • 掌握表单标签

HTML第一天目标

能够写出基本的页面(里面包含图片、各种标签和链接)

开发工具

我们主要用的开发工具有chrome、hbuilder、Photoshop

浏览器显示

浏览器是网页显示、运行的平台,常用的浏览器有IE、火狐(Firefox)、谷歌(Chrome)、Safari和Opera等。我们平时称为五大浏览器。

浏览器内核(理解)

浏览器内核又可以分成两部分:渲染引擎(layout engineer 或者 Rendering Engine)和 JS 引擎。
渲染引擎 :它负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入 CSS 等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。
JS 引擎 则是解析 Javascript 语言,执行 javascript语言来实现网页的动态效果。


最开始渲染引擎和 JS 引擎并没有区分得很明确,后来 JS 引擎越来越独立,内核就倾向于只指渲染引擎。有一个网页标准计划小组制作了一个 ACID 来测试引擎的兼容性和性能。内核的种类很多,如果加上没什么人使用的非商业的免费内核,可能会有10多种,但是常见的浏览器内核可以分这四种:Trident、Gecko、Blink、Webkit。

了解一点:移动端的浏览器内核主要说的是系统内置浏览器的内核。
Android手机而言,使用率最高的就是Webkit内核,大部分国产浏览器宣称的自己的内核,基本上也是属于webkit二次开发。

iOS以及WP7平台上,由于系统原因,系统大部分自带浏览器内核,一般是Safari或者IE内核Trident的


Web标准

  • 了解常用浏览器
    • 1、让Web的发展前景更广阔
    • 2、内容能被更广泛的设备访问
    • 3、更容易被搜寻引擎搜索
    • 4、降低网站流量费用
      • 5、使网站更易于维护
      • 6、提高页面浏览速度

web标准的结构

结构标准:结构用于对网页元素进行整理和分类,咱们主要学的是HTML。 最重要
表现标准:表现用于设置网页元素的版式、颜色、大小等外观样式,主要指的是CSS。
行为标准:行为是指网页模型的定义及交互的编写,咱们主要学的是 Javascript


HTML初识

HTML(英文Hyper Text Markup Language的缩写)中文译为“超文本标签语言”。是用来描述网页的一种语言。

所谓超文本,因为它可以加入图片、声音、动画、多媒体等内容,不仅如此,它还可以从一个文件跳转到另一个文件,与世界各地主机的文件连接。

<h1> 我是一个大标题 </h1>

注意: 体会 文本 标签 语言 几个词语

  • HTML 指的是超文本标记语言 (Hyper Text Markup Language)
  • HTML 不是一种编程语言,而是一种标记语言 (markup language)
  • 标记语言是一套标记标签 (markup tag)

总结: HTML 作用就是用标记标签来描述网页,把网页内容在浏览器中展示出来。


HTML骨架格式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    </style>
</head>
<body>
    <div class="box"></div>
</body>
</html>

骨架结构解析

1.HTML标签:
作用所有HTML中标签的一个根节点。 最大的标签 根标签
2 head标签: 文档的头部
文档的头部描述了文档的各种属性和信息,包括文档的标题、在 Web 中的位置以及和其他文档的关系等。绝大多数文档头部包含的数据都不会真正作为内容显示给读者。

注意在head标签中我们必须要设置的标签是title

3.title标签: 文档的标题
作用:让页面拥有一个属于自己的标题。
4.body标签:文档的主体 以后我们的页面内容 基本都是放到body里面的
body 元素包含文档的所有内容(比如文本、超链接、图像、表格和列表等等。)


HTML标签分类

在HTML页面中,带有“< >”符号的元素被称为HTML标签,如上面提到的 HTML、head、body都是HTML骨架结构标签。所谓标签就是放在“< >” 标签符中表示某个功能的编码命令,也称为HTML标签或 HTML元素

1.双标签

<标签名> 内容 </标签名>

该语法中“<标签名>”表示该标签的作用开始,一般称为“开始标签(start tag)”,“</标签名>” 表示该标签的作用结束,一般称为“结束标签(end tag)”。和开始标签相比,结束标签只是在前面加了一个关闭符“/”。

比如 <body>我是文字 </body>

2.单标签

<标签名 />

单标签也称空标签,是指用一个标签符号即可完整地描述某个功能的标签。

比如 <br />


HTML标签关系

标签的相互关系就分为两种:

1.嵌套关系

<head> <title> </title> </head>

2.并列关系

<head></head> <body></body>


HTML常用标签

首先 HTML和CSS是两种完全不同的语言,我们学的是结构,就只写HTML标签,认识标签就可以了。 不会再给结构标签指定样式了。

HTML标签有很多,这里我们学习最为常用的,后面有些较少用的,我们可以查下手册就可以了。

排版标签

标题标签(熟记)

单词缩写: head 头部. 标题 title 文档标题

为了使网页更具有语义化,我们经常会在页面中用到标题标签,HTML提供了6个等级的标题,即
<h1>、<h2>、<h3>、<h4>、<h5>和<h6>
其基本语法格式如下:

<hn> 标题文本 </hn>


段落标签(熟记)

<p> 文本内容 </p>


水平线标签(认识)

<hr />是单标签


换行标签(熟记)

<br />


div span标签(重点)

div span 是没有语义的 是我们网页布局主要的2个盒子 css+div

div 就是 division 的缩写 分割, 分区的意思 其实有很多div 来组合网页。

span, 跨度,跨距;范围

语法格式:

<div> 这是头部 </div> <span>今日价格</span>


文本格式化标签(熟记)

在网页中,有时需要为文字设置粗体、斜体或下划线效果,这时就需要用到HTML中的文本格式化标签,使文字以特殊的方式显示。

b i s u 只有使用 没有 强调的意思 strong em del ins 语义更强烈


标签属性

使用HTML制作网页时,如果想让HTML标签提供更多的信息,可以使用HTML标签的属性加以设置。其基本语法格式如下:

<标签名 属性1="属性值1" 属性2="属性值2" …> 内容 </标签名>

在上面的语法中,

1.标签可以拥有多个属性,必须写在开始标签中,位于标签名后面。

2.属性之间不分先后顺序,标签名与属性、属性与属性之间均以空格分开。

3.任何标签的属性都有默认值,省略该属性则取默认值。

采取 键值对 的格式 key="value" 的格式

比如:

<hr width="400" />

属性 是 宽度

值 是 400


图像标签img (重点)

单词缩写: image 图像

HTML网页中任何元素的实现都要依靠HTML标签,要想在网页中显示图像就需要使用图像标签,接下来将详细介绍图像标签<img />以及和他相关的属性。其基本语法格式如下:

该语法中src属性用于指定图像文件的路径和文件名,他是img标签的必需属性。

<img src="图像URL" />


链接标签(重点)

单词缩写: anchor 的缩写 [ˈæŋkə(r)] 。基本解释 锚, 铁锚 的

在HTML中创建超链接非常简单,只需用标签环绕需要被链接的对象即可,其基本语法格式如下:

<a href="跳转目标" target="目标窗口的弹出方式">文本或图像</a>

href:用于指定链接目标的url地址,当为标签应用href属性时,它就具有了超链接的功能。 Hypertext Reference的缩写。意思是超文本引用

target:用于指定链接页面的打开方式,其取值有self和blank两种,其中self为默认值,blank为在新窗口中打开方式。

注意:

1.外部链接 需要添加 http:// www.baidu.com

2.内部链接 直接链接内部页面名称即可 比如 < a href="index.html"> 首页

3.如果当时没有确定链接目标时,通常将链接标签的href属性值定义为“#”(即href="#"),表示该链接暂时为一个空链接。

4.不仅可以创建文本超链接,在网页中各种网页元素,如图像、表格、音频、视频等都可以添加超链接。


锚点定位 (难点)

通过创建锚点链接,用户能够快速定位到目标内容。

创建锚点链接分为两步:

1.使用“a href=”#id名>“链接文本"</a>创建链接文本(被点击的) <a href="#two"> 2.使用相应的id名标注跳转目标的位置。 <h3 id="two">第2集</h3>


base 标签 基本的

base 可以设置整体链接的打开状态

base 写到 <head> </head> 之间

把所有的连接 都默认添加 target="_blank"


特殊字符标签 (理解)


注释标签

在HTML中还有一种特殊的标签——注释标签。如果需要在HTML文档中添加一些便于阅读和理解但又不需要显示在页面中的注释文字,就需要使用注释标签。其基本语法格式如下:

<!-- 注释语句 --> ctrl + / 或者 ctrl +shift + /

注释内容不会显示在浏览器窗口中,但是作为HTML文档内容的一部分,也会被下载到用户的计算机上,查看源代码时就可以看到。


路径(重点、难点)

实际工作中,通常新建一个文件夹专门用于存放图像文件,这时再插入图像,就需要采用“路径”的方式来指定图像文件的位置。

根目录 当前目录

路径可以分为: 相对路径和绝对路径


相对路径

以引用文件之网页所在位置为参考基础,而建立出的目录路径。因此,当保存于不同目录的网页引用同一个文件时,所使用的路径将不相同,故称之为相对路径。

  1. 图像文件和HTML文件位于同一文件夹:只需输入图像文件的名称即可,如img src="logo.gif" /。
  2. 图像文件位于HTML文件的下一级文件夹:输入文件夹名和文件名,之间用“/”隔开,如img src="img/img01/logo.gif" /。
  1. 图像文件位于HTML文件的上一级文件夹:在文件名之前加入“../” ,如果是上两级,则需要使用 “../ ../”,以此类推,如img src="../logo.gif" /。

绝对路径

绝对路径以Web站点根目录为参考基础的目录路径。之所以称为绝对,意指当所有网页引用同一个文件时,所使用的路径都是一样的

“D:webimglogo.gif”,或完整的网络地址,例如“http://www.itcast.cn/images/l...”。


总结今天的思路贯穿线


列表标签

无序列表 ul (重点)

无序列表的各个列表项之间没有顺序级别之分,是并列的。其基本语法格式如下:

<ul> <li>列表项1</li> <li>列表项2</li> <li>列表项3</li> ...... </ul>

注意:

  1. <ul></ul>中只能嵌套<li></li>,直接在<ul></ul>标签中输入其他标签或者文字的做法是不被允许的。
  2. <li>与</li>之间相当于一个容器,可以容纳所有元素。
  1. 无序列表会带有自己样式属性,放下那个样式,一会让CSS来!

有序列表 ol (了解)

有序列表即为有排列顺序的列表,其各个列表项按照一定的顺序排列定义,有序列表的基本语法格式如下:

<ol> <li>列表项1</li> <li>列表项2</li> <li>列表项3</li> ...... </ol>

所有特性基本与ul 一致。

但是实际工作中, 较少用 ol img src="media/1.jpg" />


自定义列表(理解)

定义列表常用于对术语或名词进行解释和描述,定义列表的列表项前没有任何项目符号。其基本语法如下:

<dl> <dt>名词1</dt> <dd>名词1解释1</dd> <dd>名词1解释2</dd> ... <dt>名词2</dt> <dd>名词2解释1</dd> <dd>名词2解释2</dd> ... </dl>


表格 table(会使用)

创建表格

在HTML网页中,要想创建表格,就需要使用表格相关的标签。创建表格的基本语法格式如下:

<table> <tr> <td>单元格内的文字</td> ... </tr> ... </table>

在上面的语法中包含三对HTML标签,分别为 table</table、tr</tr、td</td,他们是创建表格的基本标签,缺一不可,下面对他们进行具体的解释
1.table用于定义一个表格。

2.tr 用于定义表格中的一行,必须嵌套在 table标签中,在 table中包含几对 tr,就有几行表格。

3.td /td:用于定义表格中的单元格,必须嵌套在<tr></tr>标签中,一对 <tr> </tr>中包含几对<td></td>,就表示该行中有多少列(或多少个单元格)。


注意:

1. <tr></tr>中只能嵌套<td></td> 2. <td></td>标签,他就像一个容器,可以容纳所有的元素


表格属性


表头标签

表头一般位于表格的第一行或第一列,其文本加粗居中,如下图所示,即为设置了表头的表格。设置表头非常简单,只需用表头标签th</th替代相应的单元格标签td</td即可。


表格结构(了解)

在使用表格进行布局时,可以将表格划分为头部、主体和页脚(页脚因为有兼容性问题,我们不在赘述),具体 如下所示:

<thead></thead>:用于定义表格的头部。

必须位于<table></table> 标签中,一般包含网页的logo和导航等头部信息。

<tbody></tbody>:用于定义表格的主体。

位于<table></table>标签中,一般包含网页中除头部和底部之外的其他内容。


表格标题

表格的标题: caption
定义和用法

caption 元素定义表格标题。

<table>    <caption>我是表格标题</caption> </table>

caption 标签必须紧随 table 标签之后。您只能对每个表格定义一个标题。通常这个标题会被居中于表格之上。


合并单元格(难点)

跨行合并:rowspan 跨列合并:colspan

合并单元格的思想:

将多个内容合并的时候,就会有多余的东西,把它删除。 例如 把 3个 td 合并成一个, 那就多余了2个,需要删除。 公式: 删除的个数 = 合并的个数 - 1

合并的顺序 先上 先左


总结表格

  1. 表格提供了HTML 中定义表格式数据的方法。
  2. 表格中由行中的单元格组成。
  1. 表格中没有列元素,列的个数取决于行的单元格个数。
  2. 表格不要纠结于外观,那是CSS 的作用。

表格的学习要求: 能手写表格结构,并且能合并单元格。


表单标签(掌握)

表单控件:

包含了具体的表单功能项,如单行文本输入框、密码输入框、复选框、提交按钮、重置按钮等。

提示信息:

一个表单中通常还需要包含一些说明性的文字,提示用户进行填写和操作。

表单域:

他相当于一个容器,用来容纳所有的表单控件和提示信息,可以通过他定义处理表单数据所用程序的url地址,以及数据提交到服务器的方法。如果不定义表单域,表单中的数据就无法传送到后台服务器。


input 控件(重点)

在上面的语法中,input /标签为单标签,type属性为其最基本的属性,其取值有多种,用于指定不同的控件类型。除了type属性之外,input /标签还可以定义很多其他的属性,其常用属性如下表所示。


label标签(理解)

label 标签为 input 元素定义标注(标签)。

作用: 用于绑定一个表单元素, 当点击label标签的时候, 被绑定的表单元素就会获得输入焦点

如何绑定元素呢?

for 属性规定 label 与哪个表单元素绑定。

<label for="male">Male</label> <input type="radio" name="sex" id="male" value="male">

textarea控件(文本域)

如果需要输入大量的信息,就需要用到textarea/textarea标签。通过textarea控件可以轻松地创建多行文本输入框,其基本语法格式如下:

<textarea cols="每行中的字符数" rows="显示的行数">   文本内容 </textarea>


下拉菜单

使用select控件定义下拉菜单的基本语法格式如下

<select>   <option>选项1</option>   <option>选项2</option>   <option>选项3</option>   ... </select>

注意:

  1. select</select中至少应包含一对option></option。
  2. 在option 中定义selected =" selected "时,当前项即为默认选中项。

表单域

在HTML中,form标签被用于定义表单域,即创建一个表单,以实现用户信息的收集和传递,form中的所有内容都会被提交给服务器。创建表单的基本语法格式如下:

<form action="url地址" method="提交方式" name="表单名称">   各种表单控件 </form>

常用属性:

  1. Action
    在表单收集到信息后,需要将信息传递给服务器进行处理,action属性用于指定接收并处理表单数据的服务器程序的url地址。
  2. method
    用于设置表单数据的提交方式,其取值为get或post。
  1. name
    用于指定表单的名称,以区分同一个页面中的多个表单。

注意: 每个表单都应该有自己表单域。

如需转载,请注明出处,否则将追究法律责任。

然CSS并不是一种很复杂的技术,但就算你是一个使用CSS多年的高手,仍然会有很多CSS用法/属性/属性值你从来没使用过,甚至从来没听说过。

1.CSS的color属性并非只能用于文本显示

对于CSS的color属性,相信所有Web开发人员都使用过。如果你并不是一个特别有经验的程序员,我相信你未必知道color属性除了能用在文本显示,还可以用作其它地方。

你可以先看一下下面的演示:

HTML代码

<img alt="Example alt text" ><ul>
<li>Example list item</li></ul><ol>
<li>Example list item</li></ol><hr>

CSS代码

body {
color: yellow;
background: #444;
font-size: 20px;
font-family: Arial, sans-serif;
text-align: center;}ul {
border: solid 2px;
text-align: left;}ol {
text-align: left;}hr {
border-color: inherit;}

请注意,上面的代码里只使用了一个color属性,就是在body元素上,设置成了yellow。但是,你也看到了,所有这个页面上的东西都变成了黄色,包括:

  • 无法显示的图片的alt文字

  • list元素的边框

  • 无序list元素前面的小点

  • 有序list元素前面的数字

  • 还有hr元素

有趣的是,这个hr元素,缺省情况下它并不从body上继承color的属性,但我使用border-color: inherit强制让它继承。这是个很诡异的特征。

在CSS规范里是这样说的:

这个属性声明了元素文本内容的前景色(foreground color)。除此之外,它的值还被用于其它地方间接的引用….比如,其它可以接受颜色值的属性。

我无法想象出还有什么地方的属性能用“前景色”来描述,如果你知道,请在评论里告诉我。

2.CSS里的visibility属性有个collapse属性值:collapse

对于CSS里的visibility属性,相信你用过不下几百次。大多时候,你会把它的值设置成visible(这是所有页面元素的缺省值),或者是hidden。后者相当于display: none,但仍然占用页面空间。

其实visibility可以有第三种值,就是collapse。当一个元素的visibility属性被设置成collapse值后,对于一般的元素,它的表现跟hidden
是一样的。但例外的是,如果这个元素是table相关的元素,例如table行,table group,table列,table column group,它的表现却跟display: none一样,也就是说,它们占用的空间也会释放。

但遗憾的是,各种浏览器对collapse值的处理方式不一样。看一下下面的演示:

HTML代码

<table cellspacing="0" class="table">
<tr>
<th>Fruits</th>
<th>Vegetables</th>
<th>Rocks</th>
</tr>
<tr>
<td>Apple</td>
<td>Celery</td>
<td>Granite</td>
</tr>
<tr>
<td>Orange</td>
<td>Cabbage</td>
<td>Flint</td>
</tr></table><p><button>collapse行1</button></p><p><button>hide行1</button></p><p><button>重置</button></p>

CSS代码

body {
text-align: center;
padding-top: 20px;
font-family: Arial, sans-serif;}table {
border-collapse: separate;
border-spacing: 5px;
border: solid 1px black;
width: 500px;
margin: 0 auto;}th, td {
text-align: center;
border: solid 1px black;
padding: 10px;}.vc {
visibility: collapse;}.vh {
visibility: hidden;}button {
margin-top: 5px;}

Javascript代码

var btns = document.getElementsByTagName('button'),
rows = document.getElementsByTagName('tr');btns[0].addEventListener('click', function () {
rows[1].className = 'vc';}, false);btns[1].addEventListener('click', function () {
rows[1].className = 'vh';}, false);btns[2].addEventListener('click', function () {
rows[1].className = '';}, false);

演示

CSS-Tricks的Almanac建议说不要使用这个值,因为浏览器的不统一。

据我的观察:

  • 在谷歌浏览器里,使用collapse值和使用hidden值没有什么区别。 (See this bug report and comments)

  • 在火狐浏览器、Opera和IE11里,使用collapse值的效果就如它的字面意思:table的行会消失,它的下面一行会补充它的位置。

说实话,估计这个值很少人会使用它,但你要知道确实可以使用这样的一个值,如果以前不知道它,那么,现在,在有些罕见的地方,你也许就会变得聪明一点了。

3.CSS的background简写方式里新增了新的属性值

在CSS2.1里,background属性的简写方式包含五种属性值 – background-color, background-image, background-repeat, background-attachment, and background-position。从CSS3开始,又增加了3个新的属性值,加起来一共8个。下面是按顺序分别代表的意思:

background: [background-color] [background-image] [background-repeat]
[background-attachment] [background-position] / [ background-size]
[background-origin] [background-clip];

注意里面的反斜杠,它更font和border-radius里简写方式使用的反斜杠的用法相似。反斜杠可以在支持这种写法的浏览器里在position后面接着写background-size。除此之外,你开可以增加另外两个描述它的属性值: background-originbackground-clip

.它的语法用起来像下面这个样子:

.example {
background: aquamarine url(img.png)
no-repeat
scroll
center center / 50%
content-box content-box;}

你可以用下面的演示检测你的浏览器是否支持这种写法:

关于浏览器的支持情况,大概所有的现代浏览器都支持这些新属性值,但对于一些非常老旧的浏览器(IE6/7/8),最好在代码里提供一些万一不支持的补救机制。

4.CSS的clip属性只在绝对定位的元素上才会生效

之前说到了background-clip,你可能会想到clip
属性。它的用法是下面这个样子:

.example {
clip: rect(110px, 160px, 170px, 60px);}

它的作用是按指定的尺寸、规定的大小裁剪元素。很多简单,但唯一你需要注意的事情是,clip只会在绝对定位的元素上生效。所有,你必须这样做:

.example {
position: absolute;
clip: rect(110px, 160px, 170px, 60px);}

在下面的演示中,你可以看到当元素在绝对定位/相对定位的切换中表现出来的效果:

但是,你也可以将元素的position设置成position: fixed,因为,根据css官方规范,fixed的元素也属于‘absolutely positioned’元素。

5.元素竖向的百分比设定是相对于容器的宽度,而不是高度

这是一个很让人困惑的CSS特征,我之前也谈到过它。我们大家都知道,当按百分比设定一个元素的宽度时,它是相对于父容器的宽度计算的,但是,对于一些表示竖向距离的属性,例如padding-top,padding-bottom,margin-top,margin-bottom等,当按百分比设定它们时,依据的也是父容器的宽度,而不是高度。

下面是一个实例演示,你可以调整容器的宽度,但你会发现,黄块块的padding-bottom的距离也会随之宽度而变大或变小。

HTML代码

<div class="wrapper" id="w">
<div class="box" id="b"></div></div><input type="range" min="120" max="400" value="400" class="range" id="r"><output>宽度是: <span id="op">400px</span></output><output>黄块块的Padding bottom是:<br><span id="op2">10%</span></output>

CSS代码

body {
font-family: Arial, sans-serif;
padding-top: 30px;
text-align: center;}.wrapper {
width: 400px;
margin: 0 auto;
border: solid 1px black;}.box {
width: 100px;
height: 100px;
background: gold;
margin-left: auto;
margin-right: auto;
padding-top: 10%;
padding-bottom: 10%;
margin-bottom: 5%;}.range {
display: block;
margin: 20px auto;}output {
text-align: center;
display: block;
font-weight: bold;
padding-bottom: 20px;}output span {
font-weight: normal;}

实例演示

上面的代码中,我们对内部子元素声明了3个竖向的距离,都是百分比形式。当移动滑块时,我们的js代码只需修改了容器的宽度。但是,这个这三个属性高度都跟随着变化,可以看出,它们的百分比计算是基于容器的宽度,而不是高度的。

6.border属性比你想象的要复杂

我们很多人都用过这样的写法:

.example {
border: solid 1px black;}

这里的border属性的用法实际上是一种简写的形式,它分别设置了border-style, border-width, 和border-color — 用一句代码表示它们三个。

但不要忘记,border-style, border-width, 和border-color也都有自己的简写形式。所以,border-width可以写成这样:

.example {
border-width: 2px 5px 1px 0;}

这样,四个边的宽度被一次设定。border-colorborder-style 属性也可以这样做。下面的这个实例演示就是用的这种写法:

HTML代码

<div class="box">

CSS代码

body {
font-family: Arial, sans-serif;}.box {
width: 150px;
height: 150px;
margin: 20px auto;
border-color: peachpuff chartreuse thistle firebrick;
border-style: solid dashed dotted double;
border-width: 10px 3px 1px 8px;}p {
text-align: center;}

演示

其实,这些每个属性还可以继续细化,被拆分成border-left-style, border-top-width, border-bottom-color….

但是,你无法用border的简写分别对四个边设置不同的值,只能分开来设置。所以,border是一个简写里还有简写的属性。

7.text-decoration属性变成了属性简写

我相信有些小知识会让你大吃一惊。

跟着最新的CSS规范,text-decoration现在的写法是这样的:

a {
text-decoration: overline aqua wavy;}

text-decoration属性现在需要用三种属性值来表示了:text-decoration-line, text-decoration-color, and text-decoration-style.

但不幸的是,目前只有火狐浏览器实现了对这些新属性的支持。

你可以用火狐浏览器试一试下面的演示:

HTML代码

<a href="#" id="a">IT'S LIKE WATER, PEOPLE

(You should see a wavy line on top. Currently works only in Firefox)

CSS代码

body {
padding: 30px;
text-align: center;
font-family: Arial, sans-serif;}a, a:visited {
color: blue;
background: aqua;
-moz-text-decoration-color: aqua;
-moz-text-decoration-line: overline;
-moz-text-decoration-style: wavy;
text-decoration-color: aqua;
text-decoration-line: overline;
text-decoration-style: wavy;}

演示

在这演示中,我们没有使用简写形式,而是分开描述每个属性。这是可以更好的保证浏览器的向后兼容,使那些目前不支持这种写法的浏览器也不受影响。

8.border-width属性可以使用预定义常量值

也许对与你来说这并不是一个什么新鲜信息。除了可以使用标准宽度值(例如5px或1em)外,border-width属性可以接受预定义的常量值:medium, thin, 和 thick

事实上,如果你不给border-width属性赋值,那它的缺省值是“medium”。下面的演示就是用了预定义常量值:

HTML代码

<div class="example">

CSS代码

body {
font-family: Arial, sans-serif;
text-align: center;}.example {
width: 100px;
height: 100px;
margin: 20px auto;
background: aqua;
border: solid thick red;}

演示

在浏览器使用这些预定义常量值时,CSS规范里并没有规定都应该是什么宽度,但从我的观察看,它们的值分别是 1px, 3px, 和 5px.

9.为什么没有人使用border-image

之前我曾经写过一篇关于CSS的border-image属性的文章。现在几乎所有的现代浏览器都支持这个属性——除了IE10及以下IE版本。

看起来这是一个非常漂亮的CSS功能,它可以让你用图片修饰元素的边框。下面是一个实例演示,你可以拖拽调整里面的方块的大小,看看有什么边框图案的变化。

HTML代码

<div class="bi"><p><上面的方块使用了图片描边。在这个方块的右下角,有一个可以调整这个方块大小的小三角,点住它,拖动它调整方块大小,看看有什么效果。.</strong></p><p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p></div>

CSS代码

body {
font-family: Arial, sans-serif;
text-align: center;}.bi {
border: 45px solid transparent;
-webkit-border-image: url(http://www.webhek.com/wordpress/wp-content/uploads/2014/07/bg-pawprints-all.jpg) 45 round;
-moz-border-image: url(http://www.webhek.com/wordpress/wp-content/uploads/2014/07/bg-pawprints-all.jpg) 45 round;
border-image: url(http://www.webhek.com/wordpress/wp-content/uploads/2014/07/bg-pawprints-all.jpg) 45 round;
font-family: Arial, Helvetica, sans-serif;
color: #222;
width: 500px;
margin: 30px auto 30px auto;
overflow: hidden;
resize: both;}

演示

但不幸的是,这么好的一个功能,却没有看到多少人使用它,也许是我的眼界太窄。如果你在哪看到过有人使用border-image属性,或你在真正项目中使用了它,请留言告诉我。

10.你知道table里的empty-cells属性吗?

css里的empty-cells属性是所有浏览器都支持的,甚至包括IE8,它的用法是下面这个样子:

table {
empty-cells: hide;}

估计你从语义上已经猜出它的作用了。它是为HTML table服务的。它会告诉浏览器,当一个table单元格里没有东西时,就隐藏它。下面的演示里,你可以点击里面按钮,它会切换empty-cells的属性值,看看table的显示有什么变化。

HTML代码

<table cellspacing="0" id="table">
<tr>
<th>Fruits</th>
<th>Vegetables</th>
<th>Rocks</th>
</tr>
<tr>
<td></td>
<td>Celery</td>
<td>Granite</td>
</tr>
<tr>
<td>Orange</td>
<td></td>
<td>Flint</td>
</tr></table>
<button id="b" data-ec="hide">切换EMPTY-CELLS</button>

CSS代码

body {
text-align: center;
padding-top: 20px;
font-family: Arial, sans-serif;}table {
border: solid 1px black;
border-collapse: separate;
border-spacing: 5px;
width: 500px;
margin: 0 auto;
empty-cells: hide;
background: lightblue;}th, td {
text-align: center;
border: solid 1px black;
padding: 10px;}button {
margin-top: 20px;}

js代码

var b = document.getElementById('b'),
t = document.getElementById('table');b.onclick = function () {
if (this.getAttribute('data-ec') === 'hide') {
t.style.emptyCells = 'show';
this.setAttribute('data-ec', 'show');
} else {
t.style.emptyCells = 'hide';
this.setAttribute('data-ec', 'hide');
}};

演示

在上面的演示中,我为能让单元格的边框显示出来,在单元格的边框间添加了空隙。有时候这个属性不会有任何视觉效果,因为你必须让你里面有可见的东西。

11.font-style的oblique属性值

对与css的font-style属性,我估计大家每次见到的都是使用“normal”或 “italic”两个属性值。但事实上,你还可以让它赋值为“oblique”。请看下面的演示:

HTML代码

<h1>Oblique Text</h1><h1>Italic Text</h1>

CSS代码

h1 {
font-weight: normal;
font-family: Georgia, serif;
font-style: oblique;
text-align: center;
font-size: 50px;}h1:nth-child(2) {
font-style: italic;}p {
font-family: Arial, sans-serif;
text-align: center;}

演示

这是什么意思?为什么“oblique”和斜体”italic”的效果是一样的?

CSS规范中是这样描述“oblique”的:

“…让一种字体标识为斜体(oblique),如果没有这种格式,就使用italic字体。”

这里描述所用的“oblique”和“italic”都是倾斜的意思。“oblique”在维基百科里的解释就是一种排版术语,就是一种倾斜的文字,但不是斜体。

因为“oblique”对于font-style来说是一种合法的属性值,它可和italic进行互换,除非真有一种字体只提供了oblique体而没有提供斜体。

但我似乎从来没有听说过哪种字形提供过oblique字体,也许我错了。研究发现,一种字库好像不能同时提供斜体和oblique两种字体,因为oblique基本上是一种模仿的斜体,而不是真正的斜体。

所以,如果我没有猜错的话,如果一种字库里没有提供斜体字,那当使用CSS的font-style: italic时,浏览器实际上是按font-style: oblique显示的。

12.word-wrap和overflow-wrap是等效的

word-wrap并不是一个很常用的CSS属性,但在特定的环境中确实非常有用的。我们经常使用的一个例子是让页面中显示一个长url时换行,而不是撑破页面,下面是一个例子。

HTML代码

<p class="p" id="p">supercalifragilisticexpialidocious</p><button id="b" data-ww="break-word">TOGGLE word-wrap</button>

CSS代码

body {
font-family: Arial, sans-serif;
text-align: center;}.p {
font-size: 24px;
text-align: center;
width: 200px;
margin: 20px auto;
border: solid 1px black;
min-height: 60px;
word-wrap: break-word;}button {
display: block;
margin: 0 auto;}

JS代码

var p = document.getElementById('p'),
b = document.getElementById('b');b.onclick = function () {
if (this.getAttribute('data-ww') === 'break-word') {
p.style.wordWrap = 'normal';
this.setAttribute('data-ww', 'normal');
} else {
p.style.wordWrap = 'break-word';
this.setAttribute('data-ww', 'break-word');
}};

演示

因为这个属性最初是由微软发明的,所以,所有的浏览器都支持这个属性。

尽管有所有的浏览器都支持,但W3C决定要用overflow-wrap替换word-wrap,我想可能是他们认为word-wrap用词不当。overflow-wrapword-wrap具有相同的属性值,但现在,word-wrap被当作overflow-wrap的备选写法。

虽然已经有不少的浏览器支持overflow-wrap这种写法,但看起来没必要使用overflow-wrap来让老的浏览器不支持。所有的浏览器都会继续支持word-wrap这种写法。

这其中有多少是以前不知道的?