HTML-多媒体嵌入-MDN文档学习笔记

HTML-多媒体与嵌入

查看更多学习笔记:GitHub:LoveEmiliaForever
MDN中文官网

HTML-中的图片

将图片放入网页

可以使用<img/>来将图片嵌入网页,它是一个空元素,最少只需src属性即可工作

    <img src="图片链接" alt="备选文本" width="数字" height="数字" title="图片的题目">

src指向图片资源的地址,是<img/>正常工作必不可少的属性

❗️除非有必要,否则永远不要src指向其它网站上的图片,这被称之为盗链,如果这样做,你会占用他人带宽,可能降低你的页面加载速度,图片将不受你的控制可能被替换

❕像是<img/><video/>这样的元素有时被称之为替换元素,因为它们的内容和尺寸由外部资源决定,而非元素本身

alt属性的属性值称之为备选文本,它应该是用于描述图片的文本
备选文本会在图片加载出错时被展示出来,会被搜索引擎所检索,能够用在一些特殊应用场景

❕备选文本的关键是保证网页在无法加载图片时的使用

可以给<img/>添加widthheight属性以指定它的宽高,但是这样的方法不好
如果要改变图片在网页显示的尺寸应该使用CSS而非HTML

使用title可以给图片添加标题,图片标题通常会在鼠标悬停时出现
不要把重要信息放置其中,title属性的重要性较小

打包图片和其相关元素

有时,我们希望给图片一个解说,并通常使用<p>创建解说
但问题是,从语义的角度看,<img/><p>并没有什么关联,这可能造成一些问题
此时,可以使用<figure><figcaption>元素打包图片和图片相关的元素

    <figure>
        <img src="图片地址" alt="备选文本">
        <figcaption>对图片的解释介绍</figcaption>
    </figure>

其中<figure>可以把一些元素打包成一个整体,<figcaption>则是用来给图片添加描述的

并且<figure>不一定只是用来打包图片的,也可以用来打包其它东西

  • 用简洁、易懂的方式表达意图
  • 可以放在页面的某处
  • 为主要内容提供重要的补充说明

因此,<figure>可以是几个图片、一段代码、音视频、方程、表格之类的

CSS放置图片和HTML放置图片的区别

主要的区别是语义方面的,也就是说图片有没有意义
如果图片是用来装饰或干什么的,使用 CSS 更好,如果图片是有意义的使用 HTML 更好

HTML-中的音视频

HTML5中出现了<video><audio>标签,还有一些API对它们进行控制

<video>标签

<video>标签可以插入视频到网页之中

    <video src="视频地址" controls>
        <p>后备内容</p>
    </video>
  • src属性
    • 指向你想要嵌入的视频的地址
  • controls属性
    • 用户在观看视频时会需要对视频进行操作,controls意味着添加浏览器默认视频控制界面
    • 同时,也可以使用JS来根据API构建自定义的控制界面
  • <video>的内容
    • 它的内容叫做后备内容,当浏览器不支持<video>时就会显示这段内容
    • 这是出于兼容性考虑的设计

设置多个播放源

音视频的格式

视频文件是有多种格式的,常见的如MP3MP4WebM
他们定义了音频轨道和视频轨道的储存结构,其中还包含描述这个媒体文件的元数据,以及用于编码的编码译码器等等

一个WebM格式的视频文件如下所示,它包含音频轨道视频轨道文本轨道

在这里插入图片描述

其中的音频轨道音频编解码器进行操作,视频轨道视频编解码器进行操作

  • WebM格式,在所有现代浏览器都支持,除了老版本
  • MP4格式,包括IE在内的所有现代浏览器都支持
  • Ogg格式,Firefox和Chrome支持,但它已经被WebM取代

音频文件则简单许多,只有一个音轨
常见的音频文件有MP3FLACOgg

多种格式的播放源

由于MP4是存在版权要收费的,因此有其它的开源视频格式
浏览器内会有各种解码器,但是不同的浏览器拥有的解码器并不完全相同
因此要准备多种视频格式

    <video controls>
        <source src="MP4视频格式" type="video/mp4">
        <source src="WebM视频格式" type="video/webm">
        <p>备选文本</p>
    </video>

设置多个播放源时,移除了<video>src属性,然后将<source/>包括在<video>之中以提供源地址信息
<source/>中有type属性,是用来说明源的格式的
有了type后浏览器识别视频格式会快很多,否则就要一个个加载,一个个尝试

其它<video>特性

<video>还拥有其它很多的实用属性,如下所示

    <video controls width="400" height="400"
        autoplay loop muted
        poster="poster.png">
        <source src="MP4文件地址" type="video/mp4">
        <source src="WebM文件地址" type="video/webm">
        <p>备选文本</p>
    </video>
  • width="数字"height="数字"
    • 可以用此属性控制视频尺寸,也可以用 CSS 控制视频尺寸
    • 无论怎么设置高宽,视频都会保持原来的长宽比,而超出部分以黑边填充
  • autoplay
    • 这个属性会使得音视频自动播放,即使其余部分没有加载完
    • 尽量不要使用这个属性,用户会反感,某些浏览器会禁用自动播放
  • loop
    • 让音频或视频循环播放,同样不建议使用
  • muted
    • 他会让媒体静音
  • poster="图片地址"
    • 当视频没有播放时,它会给视频一个封面
  • preload="下列选项"用来缓冲较大的文件
    • "none":不缓冲
    • "auto":页面加载后缓冲媒体文件
    • "metadata":只缓冲媒体文件的元数据

<audio>标签

<audio><video>使用方法很相似,只有一些地方不同

    <audio controls>
        <source src="MP3音频地址" type="audio/mp3">
        <source src="Ogg音频地址" type="audio/ogg">
        <p>备选文本</p>
    </audio>
  • 不支持widthheight标签,没有可视化部件
  • 不支持poster,同样没有可视化部件

用 JS 控制媒体

可以在 JS 中使用load()方法来重置媒体,也就是重新加载播放

通过监听HTMLMediaElement.audioTracks对象的addtrack事件,可以使用 JS 对音轨的增加做出响应

    const mediaElem = document.getElementById("my-media-element");
    mediaElem.load();

    const mediaElem = document.querySelector("video");
    mediaElem.audioTracks.onaddtrack = function(event) {
    audioTrackAdded(event.track);
    }

给声音添加字幕

在 HTML5 中可以给<audio><video>添加<track>进而引入字幕文件

字幕文件是使用WebVTT格式编写的,并有如下类型

  • subtitles:字幕类型,如翻译字幕等
  • captions:也是字幕,但一般是同步翻译对白、描述一些重要信息声音
  • timed descriptions:文字转为音频,服务有视觉障碍的人

一个WebVY文件

    WEBVTT

    1
    00:00:22.230 --> 00:00:24.606
    第一段字幕

    2
    00:00:30.739 --> 00:00:34.074
    第二段

    ...

可以在<video><audio>引入<track>标签,<track>要放在所有的<source>后面

    <video controls>
        <source src="example.mp4" type="video/mp4">
        <source src="example.webm" type="video/webm">
        <track kind="subtitles" src="subtitles_en.vtt" srclang="en">
    </video>

其中<track>标签有三个属性kindsrcsrclang

  • kind属性用来指明字幕的类型,可以有subtitlescaptionsdescriptions三种类型
  • src用来指明字幕文件路径
  • srclang指明字幕的语言类型

❕添加文本轨道还有利于SEO

object、iframe等其它嵌入技术

<iframe>详解

iframe使用

<iframe>元素可以让你将其它的web文档嵌入到当前文档中,这很适合将第三方内容嵌入网站内
但它有一些严重的安全隐患要考虑,需要谨慎设置

    <iframe src="目标地址"
            width="100%" height="500" frameborder="0"
            allowfullscreen sandbox>
    <p>备选文本</p>
    </iframe>
  • allowfullscreen:允许<iframe>通过全屏API设置为全屏模式
  • frameborder:默认情况为1绘制边框,设置为0删除边框,应该使用CSS设置border:none
  • src:指向要嵌入文档的地址
  • widthheight:和其它标签一样
  • sandbox:沙盒模式,能够提高安全性

❕为了提高速度,在主内容完成加载后,使用 JavaScript 设置<iframe>src属性更好

安全隐患

虽然<iframe>是有安全隐患的,但只需要谨慎和完善的设置就能够使用它

网络的黑客(hacker)常将iframe作为攻击目标,或称为攻击向量1

预防方法如下所示

  1. 只在必要时嵌入第三方内容,这样会免去许多麻烦
  2. 使用HTTPS为网站提供服务,绝对不能使用HTTP嵌入第三方内容
    • HTTPS减少了远程内容在传输过程中被篡改的机会
    • HTTPS防止嵌入式内容访问你的父文档和子文档的内容
  3. 始终使用sandbox属性
    • sandbox属性可以给嵌入的内容自动指定最低限度的权限
    • 使用sandbox=""设置权限
    • 永远不要同时添加allow-scriptsallow-same-originsandbox属性值内
  4. 配置CSP指令
    • CSP代表内容安全策略,它提供一组HTTP标头,旨在提高HTML文档安全性
    • 可以配置服务器,以防止其它网站嵌入你的网站内容配置X-Frame-Options

<embed><object>

这两个标签时用来嵌入多种类型外部内容的通用嵌入工具
例如嵌入Java小程序、Flash、PDF、视频、SVG、图像等等

然而它们已经老了,因此了解一下以防遇到它们是不知道是干什么用的

在这里插入图片描述

其它的嵌入标签

其它还有一些HTML5的嵌入标签
<canvas>用于 JS 生成的 2D 和 3D 图形
<svg> 用于嵌入矢量图形

嵌入矢量图形

什么是矢量图形

网络上主要有两种类型的图片

  • 像素图:包含的是像素位置和像素颜色等信息,放大会像素化
  • 矢量图:包含了图形和路径的定义,是使用算法计算出图形的图片,放大照样清晰

什么是SVG

SVG是用于描述矢量图像的XML语言,它基本上是像 HTML 一样的标记,只是你有许多不同的元素来定义要显示在图像中的形状,以及要应用于这些形状的效果

    <svg version="1.1"
        baseProfile="full"
        width="300" height="200"
        xmlns="http://www.w3.org/2000/svg">
    <rect width="100%" height="100%" fill="black" />
    <circle cx="150" cy="100" r="90" fill="blue" />
    </svg>

上面的代码将展示如下图案
在这里插入图片描述

虽然可以通过手动编写简单SVG,但遇到复杂图形时还是使用像inkscapeillustrator这样的编辑器更好

SVG的优点SVG的缺点
图像中的文本仍可访问,利于SEOSVG容易变复杂,使得文件大小处理速度上升
SVG可以被CSS、JS操作SVG创建可能更难
放大不会失真老旧浏览器不兼容它

添加SVG到页面

使用<img>添加SVG
    <img
        src="svg图像地址"
        alt="备选文本"
        height=""
        width="" />
优点缺点
使用方便快捷无法使用css、js操作svg
可以将其作为<img>对待不能应用css伪类重设图像样式
在HTML中引入SVG代码
    <svg width="300" height="200">
        <rect width="100%" height="100%" fill="green" />
    </svg>

直接打开SVG并复制它的代码到HTML中,这称为SVG内联

优点缺点
减少HTTP请求让HTML更加繁杂
可以用css、js操作会增加HTML大小
SVG唯一使用CSS交互、CSS动画的方法浏览器不把它当作普通图片对待
可以把它包裹在超链接内需要兼容老旧浏览器
使用<iframe>嵌入SVG
    <iframe src="triangle.svg" width="500" height="500" sandbox>
        <img src="triangle.png" alt="Triangle with three unequal sides" />
    </iframe>

这不是个好方法,如果浏览器不支持<iframe>则会回退到备选文本,此外除非SVG和网页同源,否则不能用js操作它

响应式图片

为什么用响应式图片

由于设备的不同,每个人的屏幕、分辨率都不一样
同样的图片在不同设备上显示的效果不同,有时会产生不理想的效果

即使响应式的改变图片的大小,图片仍然可能显示出不理想的效果
因此,有如下解决方法

  • 提供不同分辨率的图像,以适配清晰度不同的屏幕,称为分辨率切换问题
  • 为不同的屏幕提供裁剪过后不同大小的图片,以改进阅读体验,称为美术设计问题

分辨率切换:不同尺寸

可以在<img>内添加srcsetsizes属性来判断应该使用什么图片

<img
    srcset="图片1地址 图片1的宽度, 图片2地址 图片2的宽度"
    sizes="(max-width: 600px) 480px,
            800px"
    src="备选图片地址"
    alt="备选文本" />

srcset属性定义了一系列的图片信息,每个图片信息之间用,隔开,一个图片信息包括

  1. 图片地址
  2. 空格
  3. 图片的宽度,真实单位是像素但是写出来的单位应该是w

sizes定义了一组媒体条件,当条件为真时选择一个期望尺寸,每个条件之间同样以,隔开

  1. 一个媒体条件如(max-width:600px)视口宽度小于等于600px
  2. 一个空格
  3. 条件为真时,期望宽度大小

❕示例中有一个没有媒体条件的,那是使用在无匹配条件时的默认选项

在有了这些属性后,浏览器会如下运行:

  1. 检查设备宽度
  2. 检查sizes列表真假值,并最终得到期望宽度大小
  3. 加载srcset中最接近期望宽度大小的图片

❕如果在把浏览器宽度设置到最小时,没有加载更小的图,应该检查一下此时的视口大小document.querySelector('html').clientWidth,不同浏览器可以缩小到的最小宽度不同,有时会超过这个最小宽度

❕在<head>中存在这样的元数据<meta name="viewport" content="width=device-width">,这行代码会强制让手机浏览器采用它们真实可视窗口的宽度来加载网页,这样才能使用响应式

分辨率切换:同尺寸,不同分辨率

结合srcsetx语法能够让浏览器选择合适分辨率的图片

    <img srcset="elva-fairy-320w.jpg, elva-fairy-480w.jpg 1.5x, elva-fairy-640w.jpg 2x"
        src="elva-fairy-640w.jpg"
        alt="Elva dressed as a fairy" />

浏览器会计算出正在显示的显示器的分辨率,然后srcset引用的最适合的图片,2x代表用两个或更多设备像素表示一个显示像素

美术设计

美术设计问题涉及到更改显示的图像以适应不同的显示尺寸
分辨率切换是改图像尺寸不改图像内容,美术设计是改更改图像内容、尺寸

    <picture>
        <source media="(max-width: 799px)" srcset="elva-480w-close-portrait.jpg" />
        <source media="(min-width: 800px)" srcset="elva-800w.jpg" />
        <img src="elva-800w.jpg" alt="Chris standing up holding his daughter Elva" />
    </picture>

<source>可以包含mediasrcsetsizestype
mediasrcset不应该一起用,media应该用在美术设计时
type<source>中起到的作用和在<video>起到的作用一样,用于选择合适的格式
任何情况下,都应该提供一个<img>作为备选图片

    <source media="(max-width: 799px)" srcset="elva-480w-close-portrait.jpg" />
    <source media="(min-width: 800px)" srcset="elva-800w.jpg" />
    <img src="elva-800w.jpg" alt="Chris standing up holding his daughter Elva" />
</picture>

`<source>`可以包含`media`、`srcset`、`sizes`、`type`  
`media`和`srcset`不应该一起用,`media`应该用在美术设计时  
`type`在`<source>`中起到的作用和在`<video>`起到的作用一样,用于选择合适的格式  
任何情况下,都应该提供一个`<img>`作为备选图片  


  1. 攻击向量就是攻击者用来获取本地或远程网络和计算机的一种方法,一般用于描述攻击者(或恶意软件)的攻击路径 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/390282.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

知识图谱:py2neo将csv文件导入neo4j

文章目录 安装py2neo创建节点-连线关系图导入csv文件删除重复节点并连接边 安装py2neo 安装python中的neo4j操作库&#xff1a;pip install py2neo 安装py2neo后我们可以使用其中的函数对neo4j进行操作。 图数据库Neo4j中最重要的就是结点和边&#xff08;关系&#xff09;&a…

【论文精读】BERT

摘要 以往的预训练语言表示应用于下游任务时的策略有基于特征和微调两种。其中基于特征的方法如ELMo使用基于上下文的预训练词嵌入拼接特定于任务的架构&#xff1b;基于微调的方法如GPT使用未标记的文本进行预训练&#xff0c;并针对有监督的下游任务进行微调。 但上述两种策略…

机器学习——聚类问题

&#x1f4d5;参考&#xff1a;西瓜书ysu老师课件博客&#xff08;3&#xff09;聚类算法之DBSCAN算法 - 知乎 (zhihu.com) 目录 1.聚类任务 2.聚类算法的实现 2.1 划分式聚类方法 2.1.1 k均值算法 k均值算法基本原理&#xff1a; k均值算法算法流程&#xff1a; 2.2 基于…

代码随想录算法训练营第31天|● 理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

文章目录 理论基础分发饼干思路&#xff1a;代码&#xff1a; 摆动序列思路一 贪心算法&#xff1a;代码&#xff1a; 思路二&#xff1a;动态规划&#xff08;想不清楚&#xff09;代码&#xff1a; 最大子序和思路&#xff1a;代码&#xff1a; 理论基础 贪心算法其实就是没…

Android Jetpack Compose 沉浸式状态栏的实现

目录 概述效果展示代码实现总结 概述 说到沉浸式状态栏&#xff0c;很多小伙伴可能不太熟悉&#xff0c;其实让Android的状态栏的颜色和APP的主题颜色相同&#xff0c;给人感觉状态栏和APP就是一体的。沉浸式的状态栏让页面看起来更舒服&#xff0c;实现沉浸式状态栏也很简单&…

精品jsp+ssm基于Java的疫苗接种管理系统

《[含文档PPT源码等]精品jspssm基于Java的疫苗接种管理系统[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 使用技术&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版…

2024年!PyCharm快捷键大全

收藏&#xff01;PyCharm快捷键大全 工欲善其事必先利其器&#xff0c;PyCharm 是最popular的Python开发工具&#xff0c;它提供的功能非常强大&#xff0c;是构建大型项目的理想工具之一&#xff0c;如果能挖掘出里面实用技巧&#xff0c;能带来事半功倍的效果。 本文主要向大…

PLC_博图系列☞FBD

PLC_博图系列☞FBD 文章目录 PLC_博图系列☞FBD背景介绍FBD优势局限性 FBD 元素 关键字&#xff1a; PLC、 西门子、 博图、 Siemens 、 FBD 背景介绍 这是一篇关于PLC编程的文章&#xff0c;特别是关于西门子的博图软件。我并不是专业的PLC编程人员&#xff0c;也不懂电路…

Linux程序地址空间

引言 以下为示意草图 下面以代码验证一下&#xff1a; 1 #include<stdio.h> 2 #include<stdlib.h>3 …

C++数据结构与算法——双指针法

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

Flutter 动画(显式动画、隐式动画、Hero动画、页面转场动画、交错动画)

前言 当前案例 Flutter SDK版本&#xff1a;3.13.2 显式动画 Tween({this.begin,this.end}) 两个构造参数&#xff0c;分别是 开始值 和 结束值&#xff0c;根据这两个值&#xff0c;提供了控制动画的方法&#xff0c;以下是常用的&#xff1b; controller.forward() : 向前…

【开源】在线办公系统 JAVA+Vue.js+SpringBoot+MySQL

目录 1 功能模块1.1 员工管理模块1.2 邮件管理模块1.3 人事档案模块1.4 公告管理模块 2 系统展示3 核心代码3.1 查询用户3.2 导入用户3.3 新增公告 4 免责声明 本文项目编号&#xff1a; T 001 。 \color{red}{本文项目编号&#xff1a;T001。} 本文项目编号&#xff1a;T001。…

前端vue3实现本地及在线文件预览(含pdf/txt/mp3/mp4/docx/xlsx/pptx)

一、仅需实现在线预览&#xff0c;且文件地址公网可访问 &#xff08;一&#xff09;微软office免费预览&#xff08;推荐&#xff09; 支持doc/docx/xls/xlsx/ppt/pptx等多种office文件格式的免费预览 //示例代码//​在https://view.officeapps.live.com/op/view.aspx?src…

骨传导耳机是什么?如何选择骨传导耳机不会踩雷?

骨传导耳机是利用骨传导技术研发而成一种新型蓝牙耳机&#xff0c;其传声方式很独特&#xff0c;不通过空气传导&#xff0c;而是通过人体骨骼来传递声音。 详细传声原理请看下图&#xff1a; 随着骨传导耳机逐渐热门&#xff0c;如何选购耳机成为了问题&#xff0c;下面跟大家…

计算机设计大赛 深度学习YOLO图像视频足球和人体检测 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络4 Yolov5算法5 数据集6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习YOLO图像视频足球和人体检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非…

1_opencv3环境搭建与测试

之前2020年5月写过一次&#xff0c;时隔3年多&#xff0c;有机会再重新写一次。相比之前&#xff0c;应该是有一点儿进步的。之前是使用默认安装路径&#xff0c;所以无需配置共享库的搜索路径。这次是自定义安装路径&#xff0c;略有区别。随着写程序的时间增长&#xff0c;编…

Dockerfile 常用指令

1、FROM 指定base镜像。 2、Docker history 显示镜像的构建历史&#xff0c;也就是Dockerfile的执行过程。 Missing 表示无法获取IMAGE ID&#xff0c;通常从Docker Hub下载的镜像会有这个问题。 3、调试Dockerfile&#xff0c;使用sudo docker run -it XXXX&#xff0c;XXXX…

036-安全开发-JavaEE应用第三方组件Log4j日志FastJson序列化JNDI注入

036-安全开发-JavaEE应用&第三方组件&Log4j日志&FastJson序列化&JNDI注入 #知识点&#xff1a; 1、JavaEE-组件安全-Log4j 2、JavaEE-组件安全-Fastjson 3、JavaEE-基本了解-JNDI-API 演示案例&#xff1a; ➢Java-三方组件-Log4J&JNDI ➢Java-三方组件-Fa…

【开源】SpringBoot框架开发大学生相亲网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询会员4.2 查询相亲大会4.3 新增留言4.4 查询新闻4.5 新增新闻 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的大学生相亲网站&#xff0c;包含了会员管理模块、新闻管…

炬芯ATS2819 soundbar音响系统开发完全手册

加我微信hezkz17,可申请加入数字音频系统研究开发交流答疑群,赠送音频项目核心开发资料 ATS2819音响系统开发完全手册 1 硬件原理实现 图1 硬件原理框图 2 SOC ATS2819介绍 3 E800 板子项目实物…