Form
Text
- W3C 定义默认的大小为 20 字符,需要
width: 100%
(待溯源) - 表单中只有一个
input
时哪怕没有提交按钮,回车时也会发生提交 (待溯源)
html
<input /> <input style="width:100%; padding: 0" />
Radio
- 系统行为:使用键盘上下左右可以在相同
name
属性的选项间切换,跳过disabled
元素。 - 系统行为:每当选中下一个元素时,浏览器会滚动至该
input
所在位置。 - 系统行为:已经选中的选项点击后不会再发生
change
事件。 - 系统行为:回车提交表单。
设计 Radio
结构如下:
html
<label>
<input type="radio" name="XXX" />
<slot>Description</slot>
</label>
label CSS 关键点
css
:where(label.\[SF\]) {
position: relative;
display: flex;
}
- 提供相对定位给
<input />
以避免上述浏览器滚动到<input />
元素位置的默认行为使得页面乱跳。 - 提供 flex 布局以在自身具有固定高度时让其内部的
<slot />
元素跟着自己撑开。
input CSS 关键点
css
label.\[SF\] input:where([type='radio'], [type='checkbox'], [type='file']) {
position: absolute;
inset: 0;
width: 1px;
height: 1px;
pointer-events: none;
opacity: 0;
}
- 绝对定位以不影响其他元素的布局。
- 缩小自己的大小,由于它是替换元素所以其实并不能缩到 1px, 在 chrome 下是 4px。
- 由于它仍然有大小,需要避免自己被鼠标点击,防止压着其它的绝对定位元素。
- 透明。
样例如下:
Code
File
注意示例使用 FileReader.prototype.readAsText()
直接读取非媒体素材的全部内容,故非媒体素材示例限制文件大小仅10M,大文件会卡顿。
Require calling preventDefault()
on both dragover
events and drop
events.