前言
本篇文章主要是记录 HTML 部分可用于实际开发中的小技巧,部分章节是翻译整理而来,所有章节后都附有原文地址或者其他参考资料,本文将持续更新;
添加键盘快捷键
通过使用 accesskey
特性,我们可以为用户激活或聚焦在一个元素上赋予一个快捷键。这个特性的值必须是一个单独的字符。
值得注意的是每个浏览器提供了不同的组合键来触发快捷方式。
浏览器 | macOS | Windows | Linux |
---|---|---|---|
Chrome | alt + ctrl + key |
alt + key |
alt + key |
Firefox | alt + ctrl + key |
alt + shift + key |
alt + shift + key |
Safari | alt + ctrl + key |
n/a | n/a |
在下面的示例代码中,在 macOS Chrome 中按下组合键 alt
+ ctrl
+ e
会触发按钮的 click
事件。
1 | <button accesskey="e" onclick="alert('Edit')">Edit</button> |
判断浏览器是否支持一个元素属性
我们可以检测当前浏览器是否支持给定的特性,以 pattern
为例,如下:
1 | const isPatternSupported = 'pattern' in document.createElement('input'); |
如果你想检查某些特性值,则需要多几个步骤。下面的示例代码判断原生的日期输入框标签是否被支持:
1 | const isDateInputSupported = () => { |
如果浏览器支持 date input
,调用 setAttribute
并传入一个非法的日期将不会在 value
特性上生效。因此,ele.value
将会是一个空字符串。
否则,这个输入框会被当做普通文本输入框,同时 ele.value
会返回原始的值。
通过 :is 伪类选择器组合样式
:is
伪类选择器为其参数中列出的选择器匹配到的所有元素应用样式,而不是写分开的选择器:
1 | header a:hover, |
我们可以把它们组合成一个单独的,如下:
1 | :is(header, nav, footer) a:hover { |
创建一个一次性的事件处理器
有时候我们想要一个给定元素的事件触发一次。通常,这可以通过绑定一个移除自身的处理器实现:
1 | const handler = (e) => { |
我们可以使用一个命名函数表达式使代码缩短一点:
1 | element.addEventListener('click', function handler(e) { |
然而,现代浏览器提供了一个新的 once
选项让事情变得更简单了。我们不再需要去跟踪处理器的引用了。
1 | element.addEventListener( |
强制给定必须的参数
在 ES6 中,默认参数值在参数缺省时被计算。这让我们可以强制给定某个必须的参数:
1 | const required = () => { |
不带参数调用 getAges()
函数会抛出 Missing parameter
异常。
在 CSS 属性选择器中忽略大小写敏感
默认情况下,CSS 属性选择器是大小写敏感的。这意味着 a[href$=".png"]
只对带有 .png
扩展名的链接起作用。
设想你正在创建一个文件管理应用。这可能需要根据文件的扩展名来添加一个图标。比如,下面的 CSS 为任意的 .png
文件插入一个图标。
1 | a[href$='.png']:after { |
在现实中,文件是由用户上传的,我们不能控制文件的扩展名。一个 png 文件可以被命名为 .png
,.PNG
,.pNG
。
为了接受所有这些变种,我们可以在选择器的 ]
前面添加 i
。
1 | a[href$='.png' i]:after { |