18 HTML5 和 CSS3

18.1 HTML5 的新特性

HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。但IE9+ 以上版本的浏览器才支持。 目前主要关注开发常用的新特性。

18.1.1 HTML5 新增的语义化标签

以前布局,我们基本用 div 来做。div 对于搜索引擎来说,是没有语义的。

为了便于搜索引擎理解语义,HTML5 新增了如下语义化标签:

  • <header>:头部标签
  • <nav>:导航标签
  • <article>:内容标签
  • <section>:定义文档某个区域
  • <aside>:侧边栏标签
  • <footer>:尾部标签
h5新增语义标签

图3.1: h5新增语义标签

详见:示例

18.1.2 HTML5 新增的多媒体标签

新增的多媒体标签主要包含两个:

  1. 音频:<audio>
  2. 视频:<video>

使用它们可以很方便的在页面中嵌入音频和视频,而不再去使用 flash 和其他浏览器插件。

18.1.2.1 视频<video>

当前<video> 元素支持三种视频格式(mp4、WebM、Ogg), 推荐使用 mp4格式。

语法

<video src="文件地址" controls="controls"></video>
表16.1: vedio标签属性
属性 值 描述
autoplay autoplay 自动播放(谷歌浏览器还需要添加muted)
controls controls 显示播放控件
width pixels(像素) 设置视频宽度
hegth pixels(像素) 设置视频高度
loop loop 循环播放
preload auto(预加载)、none(不预加载) 是否预加载视频
scr url 视频地址
poster img的url 加载等待时的图片
muted muted 静音播放

详见:示例

18.1.2.2 音频<audio>

当前<audio> 元素支持三种视频格式(mp3、WebM、Ogg), 推荐使用 mp3格式。

语法

<audio src="文件地址" controls="controls"></audio>
表8.1: audio标签属性况
属性 值 描述
autoplay autoplay 自动播放(谷歌浏览器不可以自动播放)
controls controls 显示播放控件
loop loop 循环播放
scr url 音频地址

详见:示例:前方高能,请调低音量。

18.1.3 HTML5 新增的 input 类型

表4.1: HTML5 新增的 input的type属性
type属性值 说明
email 限制用户输入必须为Email类型
url 限制用户输入必须为URL类型
date 限制用户输入必须为日期类型
time 限制用户输入必须为时间类型
month 限制用户输入必须为月类型
week 限制用户输入必须为周类型
number 限制用户输入必须为数字类型
tel 手机号码
search 搜索框
color 生成一个颜色选择表单

18.1.4 HTML5 新增的表单属性

表8.2: HTML5 新增的 input的type属性
属性名 属性值 说明
required required 表单拥有该属性表示其内容不能为空,必填
placeholder 提示文本 表单的提示信息
autofocus autofocus 自动聚焦属性,页面加载完成自动聚焦到指定表单
autocomplete off/on 当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在字段中填写的选项。默认已经打开,需要放在表单内,同时加上 name 属性,同时成功提交
multiple multiple 可以多选文件提交

详见:示例:文字围绕浮动元素

可以在css中进行以下设置来修改placeholder里面的字体颜色:

input::placeholder {
  color: pink;
}

18.2 CSS3 的新特性

18.2.1 CSS3 新增选择器

CSS3 给我们新增了选择器,可以更加便捷,更加自由的选择目标元素。 1.属性选择器 2.结构伪类选择器 3.伪元素选择器

18.2.1.1 属性选择器

属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器。也可参见第??章。

表4.2: 属性选择器
选择符 例子 说明
选择器[属性名] E[att] 选择具有 att 属性的 E 元素
选择器[属性名=“属性值”] E[att=“val”] 选择具有 att 属性且属性值等于 val 的 E 元素
选择器[属性名^=“属性值”] E[att^=“val”] 匹配具有 att 属性目值以 val 开头的 E元素
选择器[属性名$=“属性值”] E[att$=“val”] 匹配具有 att 属性且值以 val 结尾的 E 元素
选择器[属性名*=“属性值”] E[att*=“val”] 匹配具有 att 属性且值中含有 val 的 E元素
<head>
    <style>
        /* 选择标签:必须是input标签 且具有value属性名 */
        input[value] {
            color: pink;
        }
    </style>
</head>

<body>
    <input type="text" value="请输入用户名">
</body>

注意:类选择器、属性选择器、伪类选择器,权重为 10。

详见:示例

18.2.1.2 结构伪类选择器

nth-child(n) 选择某个父元素的一个或多个特定的子元素(重点)

  • n 可以是数字,关键字和公式
  • n 如果是数字,就是选择第 n 个子元素, 里面数字从1开始…
  • n 可以是关键字:even 偶数,odd 奇数
  • n 可以是公式:常见的公式如下 ( 如果n是公式,则从0开始计算,但是第 0 个元素或者超出了元素的个数会被忽略 )
表18.1: 结构伪类选择器的n
公式 取值
2n 偶数
2n+1 奇数
5n 5 10 15…
n+5 从5个开始(包含第5个)
-n+5 钱5个(包含第5个)
表4.4: 结构伪类选择器的类型
选择符 说明
E:first-child 匹配父元素中的第一个子元素 E
E:last-child 匹配父元素中最后一个 E元素
E:nth-child(n) 匹配父素中的第 n 个子元素E
E:first-of-type 指定类型 E的第一个
E:last-of-type 指定类型 E的最后一个
E:nth-of-type(n) 指定类型 E的第 n 个

区别:

  • nth-child 对父元素里面所有孩子排序选择(序号是固定的) 先找到第n个孩子,然后看看是否和E匹配
  • nth-of-type 对父元素里面指定子元素进行排序选择。 先去匹配E ,然后再根据E 找第n个孩子

详见:

18.2.1.3 伪元素选择器

伪元素选择器可以帮助我们利用CSS创建新标签元素,而不需要HTML标签,从而简化HTML结构。

before 和 after 创建的是行内元素,新创建的这个元素在文档树中是找不到的,所以我们称为伪元素。before 在父元素内容的前面创建元素,after 在父元素内容的后面插入元素。伪元素选择器和标签选择器一样,权重为 1。

语法

element::before {
  content = ''
}
表18.2: 伪元素选择器的类型
选择符 说明
::before 在元素内部的前面插入内容
::after 在元素内部的后面插入内容

示例:伪元素选择器的基本用法

18.2.1.3.1 伪元素选择器使用场景1:伪元素字体图标

首先要在head标签内引入“font awesome”图标库。

<link rel="stylesheet" href="plugins/fontawesome-free-6.4.2/css/all.css">

然后在伪元素选择器中的content属性中输入图标的unicode编码编码,font-family属性值设置为”Font Awesome 6 Free”,最后设置合适的”font-weight”属性值。

语法

<head>
    <!-- 引入图标库:法一 -->
    <link rel="stylesheet" href="plugins/fontawesome-free-6.4.2/css/all.css">
    <style>
        div::after {
            font-family: "Font Awesome 6 Free";
            font-weight: 900;
            content: '\f078';
            color: red;
        }
    </style>
</head>
          
<head>
    <style>
        <!-- 引入图标库:法二 -->
        @font-face {
            font-family: 'Font Awesome 6 Free';
            font-style: normal;
            font-weight: 900;
            font-display: block;
            src: url("plugins/fontawesome-free-6.4.2/webfonts/fa-solid-900.woff2") format("woff2"), url("plugins/fontawesome-free-6.4.2/webfonts/fa-solid-900.ttf") format("truetype");
        }

        div::after {
            font-family: 'Font Awesome 6 Free';
            content: '\f078';
            color: red;
        }
    </style>
</head>
18.2.1.3.2 伪元素选择器使用场景2:仿土豆效果
/* 当我们鼠标经过了 土豆这个盒子,就让里面before遮罩层显示出来 */
.tudou:hover::before {
        /* 而是显示元素 */
        display: block;
}

详见:示例:仿土豆网显示隐藏遮罩案例

18.2.1.3.3 伪元素清除浮动

先回顾一下清除浮动的四种方法,详见第15.8.3章。

  1. 额外标签法也称为隔墙法,是 W3C 推荐的做法。
  2. 父级添加 overflow 属性
  3. 父级添加after伪元素
  4. 父级添加双伪元素

注意:是在父盒子中加入”clearfix”类。

单伪元素清除浮动

.clearfix:after {
   content : "";display: block;height: 0;
   clear: both;
   visibility: hidden;
}

双伪元素清除浮动

.clearfix :before,.clearfix: after {
   content : "";
   display:table;}
.clearfix:after {
   clear:both;
}

18.2.2 CSS3盒子模型

传统的盒子模型,在设置padding,border等样式时,会改变原有盒子的大小(撑大)。

新的CSS3盒子模型:

  • box-sizing: content-box 盒子大小为 width + padding + border (以前默认的)
  • box-sizing: border-box 盒子大小为 width(盒子最终大小就是width的值)

详见:示例

18.2.3 图片变模糊

filter CSS属性将模糊或颜色偏移等图形效果应用于元素。

filter: blur(); 例如: filter: blur(5px); blur模糊处理 数值越大越模糊

<head>
    <style>
        img {
            /* blur是一个函数 小括号里面数值越大(注意加px单位),图片越模糊 */
            filter: blur(5px);
        }
    </style>
</head>

<body>
    <img src="images/pink.jpg" alt="">
</body>

详见:示例:图片模糊,悬浮时变清晰。

18.2.4 calc函数

calc() 此CSS函数让你在声明CSS属性值时执行一些计算,括号里面可以使用 + - * / 。

语法

width: calc(100% - 80px);

详见:示例:子盒子永远比父盒子小30px。

18.2.5 过渡

过渡(transition):可以在不使用 Flash 动画或 JavaScript 的情况下,当元素从一种样式变换为另一种样式时为元素添加效果。经常和 :hover 一起 搭配使用。

记住过渡的使用口诀: 谁做过渡给谁加

transition: 要过渡的属性 花费时间 运动曲线 何时开始;
  1. 属性 : 想要变化的 css 属性, 宽度高度 背景颜色 内外边距都可以 。如果想要所有的属性都变化过渡, 写一个all 就可以。
  2. 花费时间: 单位是 秒(必须写单位) 比如 0.5s
  3. 运动曲线: 默认是 ease (可以省略)
  4. 何时开始 :单位是 秒(必须写单位)可以设置延迟触发时间 默认是 0s (可以省略)
运动曲线

图4.4: 运动曲线

18.2.6 广义的H5

广义的 HTML5 是 HTML5 本身 + CSS3 + JavaScript,通常缩写为 HTML5。