这是一个普遍的担忧。
浏览器渲染的默认大纲是丑陋的。
请看这个例子:
形式,
标签{
保证金:1em自动;
}
标签{
显示:块;
}
< >形式
<label>点击查看下面的输入查看大纲</label>
<input type="text" placeholder="placeholder text" />
> < /形式
大多数人推荐的最常见的“解决方案”是大纲:没有——如果使用不当——对可访问性来说是灾难。
所以…大纲有什么用呢?
我发现有个网站解释得很清楚。
它为有“焦点”的链接提供视觉反馈
使用TAB键(或同等功能)浏览网页文档。这是
对于那些不能使用鼠标或视觉的人来说尤其有用
障碍。如果你去掉了大纲,你就是在制作你的网站
这些人无法进入。
好的,让我们试试上面的例子,现在使用TAB键来导航。
形式,
标签{
保证金:1em自动;
}
标签{
显示:块;
}
< >形式
<label>单击此文本,然后使用TAB键导航到代码段内部
<input type="text" placeholder="placeholder text" />
> < /形式
注意到即使不点击输入,你也能知道焦点在哪里?
现在,让我们尝试outline:none on our trusty <input>
因此,再次使用TAB键在单击文本后导航,看看会发生什么。
形式,
标签{
保证金:1em自动;
}
标签{
显示:块;
}
输入{
大纲:没有;
}
< >形式
<label>单击此文本,然后使用TAB键导航到代码段内部
<input type="text" placeholder="placeholder text" />
> < /形式
看到了吧,要想知道焦点在哪里更困难?唯一的标志就是闪烁的光标。我上面的例子过于简单了。在实际情况中,页面上不会只有一个元素。跟这个差不多。
.wrapper {
width: 500px;
max-width: 100%;
margin: 0 auto;
}
form,
label {
margin: 1em auto;
}
label {
display: block;
}
input {
outline: none;
}
<div class="wrapper">
<form>
<label>Click on this text and then use the TAB key to naviagte inside the snippet.</label>
<input type="text" placeholder="placeholder text" />
<input type="text" placeholder="placeholder text" />
<input type="text" placeholder="placeholder text" />
<input type="text" placeholder="placeholder text" />
<input type="text" placeholder="placeholder text" />
<input type="text" placeholder="placeholder text" />
</form>
<form>
First name:<br>
<input type="text" name="firstname"><br> Last name:<br>
<input type="text" name="lastname">
</form>
<form>
<input type="radio" name="gender" value="male" checked> Male<br>
<input type="radio" name="gender" value="female"> Female<br>
<input type="radio" name="gender" value="other"> Other
</form>
<form>
<label for="GET-name">Name:</label>
<input id="GET-name" type="text" name="name">
</form>
<form>
<label for="POST-name">Name:</label>
<input id="POST-name" type="text" name="name">
</form>
<form>
<fieldset>
<legend>Title</legend>
<input type="radio" name="radio" id="radio">
<label for="radio">Click me</label>
</fieldset>
</form>
</div>
现在,如果我们保留大纲,将其与相同的模板进行比较:
.wrapper {
width: 500px;
max-width: 100%;
margin: 0 auto;
}
form,
label {
margin: 1em auto;
}
label {
display: block;
}
<div class="wrapper">
<form>
<label>Click on this text and then use the TAB key to naviagte inside the snippet.</label>
<input type="text" placeholder="placeholder text" />
<input type="text" placeholder="placeholder text" />
<input type="text" placeholder="placeholder text" />
<input type="text" placeholder="placeholder text" />
<input type="text" placeholder="placeholder text" />
<input type="text" placeholder="placeholder text" />
</form>
<form>
First name:<br>
<input type="text" name="firstname"><br> Last name:<br>
<input type="text" name="lastname">
</form>
<form>
<input type="radio" name="gender" value="male" checked> Male<br>
<input type="radio" name="gender" value="female"> Female<br>
<input type="radio" name="gender" value="other"> Other
</form>
<form>
<label for="GET-name">Name:</label>
<input id="GET-name" type="text" name="name">
</form>
<form>
<label for="POST-name">Name:</label>
<input id="POST-name" type="text" name="name">
</form>
<form>
<fieldset>
<legend>Title</legend>
<input type="radio" name="radio" id="radio">
<label for="radio">Click me</label>
</fieldset>
</form>
</div>
因此,我们已经建立了以下
轮廓很难看
移除它们会让生活更加困难。
那么答案是什么呢?
去掉难看的轮廓,添加你自己的视觉线索来显示焦点。
这里有一个非常简单的例子来说明我的意思。
我删除了轮廓并在:focus和:active上添加了一个底部边框。我还删除了顶部,左侧和右侧的默认边界,通过将它们设置为透明的:focus和:active(个人偏好)
形式,
标签{
保证金:1em自动;
}
标签{
显示:块;
}
输入{
大纲:没有
}
输入:焦点,
输入:活跃的{
边框颜色:透明;
Border-bottom: 2px纯红色
}
< >形式
<label>点击查看下面的输入查看大纲</label>
<input type="text" placeholder="placeholder text" />
> < /形式
所以,我们在之前的“现实世界”例子中尝试上述方法:
.wrapper {
width: 500px;
max-width: 100%;
margin: 0 auto;
}
form,
label {
margin: 1em auto;
}
label {
display: block;
}
input {
outline: none
}
input:focus,
input:active {
border-color: transparent;
border-bottom: 2px solid red
}
<div class="wrapper">
<form>
<label>Click on this text and then use the TAB key to naviagte inside the snippet.</label>
<input type="text" placeholder="placeholder text" />
<input type="text" placeholder="placeholder text" />
<input type="text" placeholder="placeholder text" />
<input type="text" placeholder="placeholder text" />
<input type="text" placeholder="placeholder text" />
<input type="text" placeholder="placeholder text" />
</form>
<form>
First name:<br>
<input type="text" name="firstname"><br> Last name:<br>
<input type="text" name="lastname">
</form>
<form>
<input type="radio" name="gender" value="male" checked> Male<br>
<input type="radio" name="gender" value="female"> Female<br>
<input type="radio" name="gender" value="other"> Other
</form>
<form>
<label for="GET-name">Name:</label>
<input id="GET-name" type="text" name="name">
</form>
<form>
<label for="POST-name">Name:</label>
<input id="POST-name" type="text" name="name">
</form>
<form>
<fieldset>
<legend>Title</legend>
<input type="radio" name="radio" id="radio">
<label for="radio">Click me</label>
</fieldset>
</form>
</div>
这可以通过使用外部库来进一步扩展,这些库建立在修改“大纲”的思想之上,而不是像Materialize那样完全删除它
你可以用很少的努力就得到一些不难看的东西
body {
background: #444
}
.wrapper {
padding: 2em;
width: 400px;
max-width: 100%;
text-align: center;
margin: 2em auto;
border: 1px solid #555
}
button,
.wrapper {
border-radius: 3px;
}
button {
padding: .25em 1em;
}
input,
label {
color: white !important;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.1/css/materialize.min.css" />
<div class="wrapper">
<form>
<input type="text" placeholder="Enter Username" name="uname" required>
<input type="password" placeholder="Enter Password" name="psw" required>
<button type="submit">Login</button>
</form>
</div>