html5
属性
contentEditable 属性
指定该属性的元素可以被编辑
1 |
|
designMode 属性
该属性可以指定页面是否可编辑,只能通过js设置该属性
document.body.designMode = 'off/on' IE8出于安全考虑不支持 IE9允许 chrome3和Safari,允许内嵌的iframe可编辑 Firefox和Opera 允许
spellcheck 属性
允许 input,textarea,可编辑元素 进行拼写 检验
1 | <p contenteditable="true" spellcheck="true" style="width:400px;height:150px;"></p> |
- tabindex 属性
通过设置 tabindex的数值,控制每次点击tab键时,页面焦点的切换顺序。通常用于表单
标签
1 | <article></article>//独立内容 |
表单
1 |
|
自定义错误信息
使用js 调用个 input元素的 setCustomValidity 方法来定义自动校验
点击submit自动给校验手动校验
checkValidity():判断值是否合法
每个表单元素都有这个方法,返回 Boolean取消校验
input元素 formnovalidate 属性 取消当前元素验证
如果对 submit元素使用 formnovalidate 属性,整个表单验证都会失效
ol优化
start 指定开始序号
reversed 序号反转
1 |
|
css计数器
1 | <ul> |
字体相关
1 | text-shadow:文字阴影 |
背景边框相关
1 | background-clip 指定那个背景显示范围 |
轮廓
1 | outline: color style width; |
resize属性
允许用户修改元素尺寸
none 不能修改
both 可以修改宽高
horizontal 可修改宽
vertical 可修改高
取消元素样式指定
1 | initial 属性值 |
自定义web组件
主要包括三种技术模块:自定义元素、影子DOM、HTML模板。
生命周期回调函数处理一些业务:
- connectedCallback 自定义元素被插入文档DOM时,调用。
- disconnectedCallback 自定义元素从文档删除时,调用。
- adoptedCallback 自定义元素被移动到新的文档时,调用。
- attributeChangedCallback 自定义元素增加、删除、修改属性时 ,调用。
触发此回调函数,必须监听变化的属性static get observedAttributes() ,返回监听的属性。
1 | <style> |
影子dom
要把一个自定义元素转换为真正的Web组件,还需要使用一个强大的封装机制:影子DOM(shadow DOM)。
在影子根节点之下定义的样式对该子树是私有的,永远不会影响外部的阳光DOM元素(影子根节点可以为其宿主元素定义默认样式,但这些样式可以被阳光DOM样式覆盖)。
影子DOM中发生的某些事件(如“load”)会被封闭在影子DOM中。另外一些事件,像focus、mouse和键盘事件则会向上冒泡、穿透影子DOM。当一个发源于影子DOM内的事件跨过了边界开始向阳光DOM传播时,其target属性会变成影子宿主元素,就好像事件直接起源于该元素一样。
要把一个阳光DOM元素转换为影子宿主,只要调用其attachShadow()方法,传入{mode:”open”}这个唯一的参数即可。这个方法返回一个影子根节点对象,同时也将该对象设置为这个宿主的shadowRoot属性的值。这个影子根节点对象是一个DocumentFragment,可以使用DOM方法为它添加内容,也可以直接将其innerHTML属性设置为一个HTML字符串
1 |
|
http-equiv(http响应头)
http-equiv
相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变量值。
语法:
meta标签的http-equiv属性语法格式是:
1 | <meta http-equiv=”参数” content=”参数变量值”>; |
其中http-equiv属性主要有以下几种参数:
1、Expires(期限)
可以用于设定网页的到期时间。一旦网页过期,必须到服务器上重新传输。
1 | <meta http-equiv="expires" content="Wed, 20 Jun 2017 12:05:00 GMT"> //必须使用GMT的时间格式。 |
2、Pragma(cache模式)
是用于设定禁止浏览器从本地机的缓存中调阅页面内容,设定后一旦离开网页就无法从Cache中再调出
1 | <meta http-equiv="Pragma" content="no-cache"> //这样设定,访问者将无法脱机浏览。 |
3、Refresh(刷新)
自动刷新并指向新页面。
1 | <meta http-equiv="Refresh" content="2;URL=http://www.baidu.com/">//2指的是2秒后跳转到URL指定的网址 |
4、Set-Cookie(cookie设定)
如果网页过期,那么存盘的cookie将被删除。
1 | <meta http-equiv="Set-Cookie" content="cookievalue=xxx;expires=Wednesday, 20-Jun-2007 22:33:00 GMT; path=/">//必须使用GMT的时间格式。 |
5、Window-target(显示窗口的设定)
强制页面在当前窗口以独立页面显示。
1 | <meta http-equiv="Window-target" content="_top"> //用来防止别人在框架里调用自己的页面 |
6、content-Type(显示字符集的设定)
设定页面使用的字符集。
1 | <meta http-equiv="content-Type" content="text/html; charset=gb2312"> |
7、Pics-label(网页等级评定)
1 | <meta http-equiv="Pics-label" contect=""> //在IE的internet选项中有一项内容设置,可以防止浏览一些受限制的网站,而网站的限制级别就是通过meta属性来设置的。 |
8、Page_Enter、Page_Exit
设定进出页面时的特殊效果
1 | <meta http-equiv="Page-Enter" contect="revealTrans(duration=1.0,transtion=12)"> //进入页面时的效果 |
9、清除缓存(再访问这个网站要重新下载)
设定页面使用的字符集。
1 | <meta http-equiv="cache-control" content="no-cache"> |
10、设定网页的到期时间
1 | <meta http-equiv="expires" content="0"> |
11、关键字,给搜索引擎用的
1 | <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> |
12、页面描述
1 | <meta http-equiv="description" content="This is my page"> |
Cache Manifest 缓存使用
已被 Service Worker 取代,在 w3c 标准中 去除了
manifest是一个后缀名为minifest的文件,在文件中定义那些需要缓存的文件,支持manifest的浏览器,会将按照manifest文件的规则,像文件保存在本地,从而在没有网络链接的情况下,也能访问页面。缓存大小限制 ~=5M
1 |
|
// 通过javascript操作 跟新
1 | window.applicationCache.update(); |
第一行CACHE MANIFEST是固定的格式,且必须要写在第一行,也必须要有,NETWORK和FALLBACK为可选项。
FALLBACK中的资源必须和manifest文件同源。
引用manifest的html必须与manifest文件同源,在同一个域下。
当manifest文件发生改变时,资源请求本身也会触发更新
注释不仅仅起到不执行的作用,上述已经详细解释了,可以是版本号,时间戳或者md5码等等。
manifest文件中的cache部分不能使用通配符,必须手动指定,没有自动化工具。
// 问题
1、在开发过程中,通过ajax与WCF进行数据交互时,常常头一次或头几次数据加载成功,以后均加载失败。
因为启用的web离线缓存机制,所以每次ajax加载数据时是从本地缓存文件中读取的,用的是ajax的get模式,因为get模式缓存,所以不会重新向服务器请求数据,导致数据加载失败。
改成ajax post方式后,数据 never cache,所以每次刷新网站,均会向service请求数据。
报错: Application Cache Error event: Manifest fetch failed (404)
解决方法:
manifest 文件需要配置正确的 MIME-type,即 “text/cache-manifest”。
manifest 的 contentType = text/cache-manifest,扩展名建议为 .appcache
且必须在 web 服务器上进行配置,不同的服务器配置方法不一样。
2、页面离线,ajax更新。
首先,你可以修改下 manifest 文件来更新这个页面,但是作为文章内容页面离线以后,就会存储在本地了,如果你是一篇章的话,那么这个文章的内容页就被存下来了,你如果以相同的 url 去访问,不管你文章里面的数据更新没有,这个离线下来的页面都不会更新了 ( 除非你更新manifest 文件 ) 。所以,你所有的动态数据,都得用 ajax 方式去获取,就像客户端一样,离线的页面应该是一个没有数据的空壳,然后通过 ajax 去拉去数据填补这个空壳。然后要注意的是,ajax 的请求地址,要写到manifest 的 network 中。
3、离线页面的更新(长尾问题)
网站更新了,如何更新用户本地的离线页面呢?
与很多文章中说的一样,先上线你的文件,然后修改一下页面中引入的cache.manifest文件即可,比如修改下注释,修改后,如果再访问页面,就会先去校验manifest 时候有更新,如有更新,再次刷新页面的时候,页面就会更新了。
长尾问题(非常重要):
就像前面说到的一样,如果你的 manifest 文件更新了,你访问页面,需要刷新一次,更新的页面才能 load加载进来,那么这样就有一个问题,如果你的后端数据,就是给 js ajax 接口的数据变化了,你对应的 js 也修改了。那么你修改 manifest 上线的时候,第一次开页面,页面就会出 bug 了。再刷一次页面,就好了。那么,这个第一次访问的 bug ,是我们不想看到的。
而且你不能知道用户什么时候第二次再来访问你的页面,所以你的页面一旦使用 manifest 离线,就像客户端一样,这样就出现了长尾问题。还好, manifest 有一些 js 接口,可以来判断, load 更新文件。
4、cache.status属性返回当前离线应用状态
UNCACHED ( 数值 0) :未启用离线应用
IDLE ( 数值 1) :已开启离线应用,但本地缓存的资源是最新的,并且未标记为废弃资源
CHECKING ( 数值 2) :当前更新缓存的状态为 “ 检查中 ”
DOWNLOADING ( 数值 3) :当前更新缓存的状态为 “ 下载资源中 ”
UPDATEREADY ( 数值 4) :当前更新缓存的状态为 “ 更新完毕 ”
OBSOLETE ( 数值 5) :已开启离线应用,但缓存资源都已标记为废弃
5、如果文件超出缓存5M的大小,会造成什么。
比如我A频道维护了自己的Application Cache,B频道也维护了自己的,这个时候A频道如果使用达到了一个峰值,会导致B频道所有的缓存失效。
所以,建议Application Cache存储公共资源,不要存储业务资源!
由更新机制来说,首次更新manifest时,因为页面加载已经开始甚至已经完成,缓存更新尚未完成,浏览器仍然会使用过期的资源;浏览器是当Application Cache有更新时,该次不会使用新资源,第二次才会使用。这个时候update事件中执行window.reload事件。
1 | window.applicationCache.addEventListener("updateready", function(){ |
6、由上例可以知道,缓存的不只是显示定义的文件,比如上例中的applicationcache/时便会默认保存index.html为映射的数据,并且包含demo.appcache文件,很多时候会遇到一次文件更新线上老是不更新,这个时候随便在manifest配置文件中做一点修改即可更新。
做一下代码更改:
1 | <html manifest="A.appcache"> |
这个时候如果不做A.appcache的更新的话,缓存将不会更新,原因是index.html被缓存了,检测的仍然是原manifest清单
各个页面统一管理自己的manifest清单,意思是a页面配置了common.js,b页面也配置了common.js,意思是a页面更新后,
b页面的manifest不更改的话,b页面依旧读取的是老版本的文件,这个有一定道理却也有一定浪费,需要公共页面做处理。
Service Worker
代替 Cache Manifest
input
1 | type File |
input 有哪些 type
- button
没有默认行为的按钮,上面显示 value 属性的值,默认为空。
1 | <input type="button" name="button" /> |
- checkbox
复选框,可设为选中或未选中。
1 | <input type="checkbox" name="checkbox" /> |
- color
用于指定颜色的控件;在支持的浏览器中,激活时会打开取色器。
1 | <input type="color" name="color" /> |
- date
输入日期的控件(年、月、日,不包括时间)。在支持的浏览器激活时打开日期选择器或年月日的数字滚轮。
1 | <input type="date" name="date" /> |
- datetime-local
输入日期和时间的控件,不包括时区。在支持的浏览器激活时打开日期选择器或年月日的数字滚轮。
1 | <input type="datetime-local" name="datetime-local" /> |
编辑邮箱地址的区域。类似 text 输入,但在支持的浏览器和带有动态键盘的设备上会有确认参数和相应的键盘。
1 | <input type="email" name="email" /> |
- file
让用户选择文件的控件。使用 accept 属性规定控件能选择的文件类型。
1 | <input type="file" accept="image/*, text/*" name="file" /> |
- hidden
不显示的控件,其值仍会提交到服务器。举个例子,右边就是一个隐形的控件。
1 |
- image
带图像的 submit 按钮。显示的图像由 src 属性规定。如果 src 缺失,alt 属性就会显示。
1 | <input type="image" name="image" src="" alt="image input" /> |
- month
输入年和月的控件,没有时区。
1 | <input type="month" name="month" /> |
- number
用于输入数字的控件。如果支持的话,会显示滚动按钮并提供缺省验证(即只能输入数字)。拥有动态键盘的设备上会显示数字键盘。
1 | <input type="number" name="number" /> |
- password
单行的文本区域,其值会被遮盖。如果站点不安全,会警告用户。
1 | <input type="password" name="password" /> |
- radio
单选按钮,允许在多个拥有相同 name 值的选项中选中其中一个。
1 | <input type="radio" name="radio" /> |
- range
此控件用于输入不需要精确的数字。控件是一个范围组件,默认值为正中间的值。同时使用 htmlattrdefmin 和 htmlattrdefmax 来规定值的范围。
1 | <input type="range" name="range" min="0" max="25" /> |
- reset
此按钮将表单的所有内容重置为默认值。不推荐。
1 | <input type="reset" name="reset" /> |
- search
用于搜索字符串的单行文字区域。输入文本中的换行会被自动去除。在支持的浏览器中可能有一个删除按钮,用于清除整个区域。拥有动态键盘的设备上的回车图标会变成搜索图标。
1 | <input type="search" name="search" /> |
- submit
用于提交表单的按钮。
1 | <input type="submit" name="submit" /> |
- tel
用于输入电话号码的控件。拥有动态键盘的设备上会显示电话数字键盘。
1 | <input type="tel" name="tel" /> |
- text
默认值。单行的文本区域,输入中的换行会被自动去除。
1 | <input type="text" name="text" /> |
- time
用于输入时间的控件,不包括时区。
1 | <input type="time" name="time" /> |
- url
用于输入 URL 的控件。类似 text 输入,但有验证参数,在支持动态键盘的设备上有相应的键盘。
1 | <input type="url" name="url" /> |
- week
用于输入以年和周数组成的日期,不带时区。
1 | <input type="week" name="week" /> |
手机直接捕获摄像头数据
1 | <body> |
- 本文作者: 王不留行
- 本文链接: https://wyf195075595.github.io/2022/06/17/programming/htmlcss/html/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!