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 mutedposter="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文件

    WEBVTT100:00:22.230 --> 00:00:24.606第一段字幕200: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
    <imgsrc="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属性来判断应该使用什么图片

<imgsrcset="图片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. 攻击向量就是攻击者用来获取本地或远程网络和计算机的一种方法,一般用于描述攻击者(或恶意软件)的攻击路径 ↩︎

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像卷积、步长、填充、特征图、多通道卷积、权重共享、感受野、池化

图像卷积、步长、填充、特征图、多通道卷积、权重共享、感受野、池化 卷积神经网络的一些基本概念&#xff1a;图像卷积、步长、填充、特征图、多通道卷积、权重共享、感受野、池化 1.图像卷积、步长、填充 图像卷积&#xff1a;卷积核矩阵在一个原始图像矩阵上 “从上往下、…

CF1845 D. Rating System [思维题+数形结合]

传送门:CF [前题提要]:自己在做这道题的时候思路完全想错方向,导致怎么做都做不出来,看了题解之后感觉数形结合的思考方式挺好的(或者这种做法挺典的),故写篇题解记录一下 题目很简单,不再解释.先不考虑 k k k,想想是一种什么情况?很显然应该是跟下图一样是一个折线图的变化.…

ubuntu 22.04.3 live serveran图文安装

ubuntu 22.04.3 live server图文安装 一、在Vmware里安装ubuntu 22.04.3 live server操作系统 选择第一个选项开始安装 选择English语言 选择中间选项不更新安装&#xff0c;这是因为后续通过更换源之后再更新会比较快 键盘设计继续选择英文&#xff0c;可以通过语言选择…

TenorFlow多层感知机识别手写体

文章目录 数据准备建立模型建立输入层 x建立隐藏层h1建立隐藏层h2建立输出层 定义训练方式建立训练数据label真实值 placeholder定义loss function选择optimizer 定义评估模型的准确率计算每一项数据是否正确预测将计算预测正确结果&#xff0c;加总平均 开始训练画出误差执行结…

Spring Boot 笔记 012 创建接口_添加文章分类

1.1.1 实体类添加校验 package com.geji.pojo;import jakarta.validation.constraints.NotEmpty; import lombok.Data;import java.time.LocalDateTime;Data public class Category {private Integer id;//主键IDNotEmptyprivate String categoryName;//分类名称NotEmptypriva…

【MySQL】多表关系的基本学习

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-3oES1ZdkKIklfKzq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

【Linux】Framebuffer 应用

# 前置知识 LCD 操作原理 在 Linux 系统中通过 Framebuffer 驱动程序来控制 LCD。 Frame 是帧的意思&#xff0c; buffer 是缓冲的意思&#xff0c;这意味着 Framebuffer 就是一块内存&#xff0c;里面保存着一帧图像。 Framebuffer 中保存着一帧图像的每一个像素颜色值&…

17.3.1.3 灰度

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 灰度的算法主要有以下三种&#xff1a; 1、最大值法: 原图像&#xff1a;颜色值color&#xff08;R&#xff0c;G&#xff0c;B&a…

【python】网络爬虫与信息提取--requests库

导学 当一个软件想获得数据&#xff0c;那么我们只有把网站当成api就可以 requests库:自动爬取HTML页面&#xff0c;自动网络请求提交 robots协议&#xff1a;网络爬虫排除标准&#xff08;网络爬虫的规则&#xff09; beautiful soup库&#xff1a;解析HTML页面 工具&…

nginx2

mkdir /usr/local/develop cd /usr/local/develop 下载 wget http://nginx.org/download/nginx-1.17.4.tar.gz yum install git git clone https://github.com/arut/nginx-rtmp-module.git 解压文件 tar zxmf nginx-1.17.4.tar.gz 进入解压目录 cd nginx-1.17.4/ 安装编译…

《Go 简易速速上手小册》第9章:数据库交互(2024 最新版)

文章目录 9.1 连接数据库 - Go 语言的海底宝藏之门9.1.1 基础知识讲解安装数据库驱动数据库连接 9.1.2 重点案例&#xff1a;用户信息管理系统准备数据库Go 代码实现连接数据库添加新用户查询用户信息用户登录验证主函数 9.1.3 拓展案例 1&#xff1a;批量添加用户准备数据库Go…

【刷题】牛客— NC21 链表内指定区间反转

链表内指定区间反转 题目描述思路一&#xff08;暴力破解版&#xff09;思路二&#xff08;技巧反转版&#xff09;思路三&#xff08;递归魔法版&#xff09;Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&#xff01;下一篇文章见&…

IIC--集成电路总线

目录 一、IIC基础知识 1、设计IIC电路的原因&#xff1a; 2、上拉电阻阻值怎么确定 3、IIC分类 4、IIC协议 二、单片机使用IIC读写数据 1、 IIC发送一个字节数据&#xff1a; 2、IIC读取一个字节数据&#xff1a; 一、IIC基础知识 1、设计IIC电路的原因&#xff1a; (…

【机器学习案例5】语言建模 - 最常见的预训练任务一览表

自监督学习 (SSL) 是基于 Transformer 的预训练语言模型的支柱,该范例涉及解决有助于建模自然语言的预训练任务 (PT)。本文将所有流行的预训练任务放在一起,以便我们一目了然地评估它们。 SSL 中的损失函数 这里的损失函数只是模型训练的各个预训练任务损失的加权和。 以BE…

selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id‘

Selenium更新到 4.x版本后&#xff0c;以前的一些常用的代码的语法发生了改变 from selenium import webdriver browser webdriver.Chrome() browser.get(https://www.baidu.com) input browser.find_element_by_id(By.ID,kw) input.send_keys(Python)目标&#xff1a;希望通…

IP地址+子网掩码+CIDR学习笔记

目录 一、IP地址 1、表示方法&#xff1a; 2、特殊IP地址 二、子网掩码 1、判断网络位和主机位 2、子网划分 三、无分类编址CIDR 1、CIDR路由汇聚 汇聚规则&#xff1a; 汇聚ID&#xff1a; 2、最佳路由匹配原则 一、IP地址 1、表示方法&#xff1a; 机器中存放的…

STM32F1 - 中断系统

Interrupt 1> 硬件框图2> NVIC 中断管理3> EXTI 中断管理3.1> EXTI与NVIC3.2> EXTI内部框图 4> 外部中断实验4.1> 实验概述4.2> 程序设计 5> 中断向量表6> 总结 1> 硬件框图 NVIC&#xff1a;Nested Vectored Interrupt Controller【嵌套向量…

家庭动态网络怎么在公网访问主机数据?--DDNS配置(动态域名解析配置)

前言 Dynamic DNS是一个DNS服务。当您的设备IP地址被互联网服务提供商动态变更时,它提供选项来自动变更一个或多个DNS记录的IP地址。 此服务在技术术语上也被称作DDNS或是Dyn DNS 如果您没有一个静态IP,那么每次您重新连接到互联网是IP都会改变。为了避免每次IP变化时手动更…

WebStorm | 如何修改webstorm中新建html文件默认生成模板中title的初始值

在近期的JS的学习中&#xff0c;使用webstorm&#xff0c;总是要先新建一个html文件&#xff0c;然后再到里面书写<script>标签&#xff0c;真是麻烦&#xff0c;而且标题也是默认的title&#xff0c;想改成文件名还总是需要手动去改 经过小小的研究&#xff0c;找到了修…

【复现】Supabase后端服务 SQL注入漏洞_48

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 Supabase是什么 Supabase将自己定位为Firebase的开源替代品&#xff0c;提供了一套工具来帮助开发者构建web或移动应用程序。 Sup…