form
## placeholder/title
输入框的规范的提示属性,没有提供 placeholder 的情况下需要传入 title
如果输入框 input#id 有对应的 label[for=id],则只需要至少其中之一传入 title
input(title='username')
input#uname
label(for='uname' title='username') 用户名 另外 没有内容文字的按钮和超链接也需要添加 title
## :focus-visible
outline 2px solid transparent // 覆盖暗黑模式情况下白色优先
&:focus-visible
outline-color: rgb(var(--black)) 使用键盘获取焦点时应该实现这个样式。默认是黑白。
使用全局css变量 --outline-color-*:focus 可以覆盖这个颜色RGB值
input[data-primary] 等元件预设了 --outline-color-*:focus 主题色覆盖黑白。
button- 支援:Tab Enter Shift
a- 链接 支援:Tab Enter Shift
input- 支援:Tab
- 支援:Tab Space Shift
- 支援:Tab ←→ ↑↓ Shift
textarea- 支援:Tab
selectoption- 支援:Tab Space Enter ←→ ↑↓ Shift
## wrapper
把 input 放在 .na-input-wrapper 这个容器中可以用来显示前缀后缀
该容器启用 .na-input-wrapper[data-primary] 也会覆盖全局css变量 --outline-color-*:focus 和继承某些样式
直接使用局部变量 --color-input*-wrapper 也可以设置主题以及焦点时颜色RGB值,优先级低于 --color-input。 其中的星号 * 意味着这是一个广义的 input,也能作用于 select、textarea
label.na-form-item
span(style="white-space:nowrap") 单号
.na-input-wrapper(data-primary)
input.na-input(title='单号' value='114514')
label.na-form-item
span(style="white-space:nowrap") 流水号
.na-input-wrapper
input.na-input(title='流水号' value='1919810' style={
'--color-input': 'var(--yellow-5)'
}) 注意,使用 * 可能需要转义:
ipt.style.setProperty('--color-input*-wrapper', '0 255 255')ipt.style = '--color-input\*-wrapper: 0 255 255'
## form-item
.na-form-item/label.na-form-item可以用来给表单项布局.na-form-item[data-inline]可以行内布局.na-form-item-message可以显示提示消息.na-input-wrapper[data-validate]开启表单校验 (覆盖[data-primary]主題色为danger)
form#formitems-kanban(onsubmit=function(){console.log(this.elements);return false})
.na-form-item
label(for="keywords") 卡号
.na-input-wrapper(data-validate)
input#keywords.na-input(
name="keywords"
type="search"
class="na-input"
placeholder="请输入卡号"
required
)
span.na-form-item-message(data-primary="danger") 卡号必填
.na-form-item
span 类型
.na-input-wrapper(data-validate)
each item in [
{ label: "银联", value: "UnionPay" },
{ label: "万事达", value: "MasterCard" },
{ label: "美国运通", value: "AmericanExpress" },
]
span.na-radio
input.na-input(
id=item.value
type="radio"
name="type"
title=item.label
value=item.value
required
)
label.na-radio-label(for=item.value)= item.label
span.na-form-item-message(data-primary="danger") 类型必填
input.na-button(type="reset" value="重置")
input.na-button(type="submit" value="查找" data-primary) [data-validate] 使用 :invalid 來自定义校验样式,你也可以使用如 vue 等响应式库来控制