在构建菜单或其他链接列表时,通常建议使用 `display: block;` 或 `display: inline-block;`,以便您可以增加链接目标的大小。简单的事实是:更大的链接目标更容易点击,并带来更好的用户体验。
让我们来看一个这样的简单链接列表
<ul>
<li><a href="#">This little</a></li>
<li><a href="#">piggy went to</a></li>
<li><a href="#">market</a></li>
</ul>
没有任何 CSS 的情况下,列表项将是块级元素,而锚链接将是内联元素。因此,我们的链接目标仅限于文本本身的大小。
我们可以通过确保列表中的链接为块级元素来做得更好,这样它们就可以与它们的列表项父元素一样宽。
ul a { display: block; }
我们可以做得更好,方法是
- 确保列表项没有内边距,但链接有
- 不使用边距,因此没有不可点击的间隙
ul li { padding: 0; margin: 0; }
ul a { padding: 5px; display: block; }
今天的文章由相当明显的基金会、嗯,但我经常看到它的公司和个人烦恼合作社赞助。
正是像这样的文章让我意识到我还有多少关于 CSS 的东西需要学习。
谢谢! :)
我也是!很简单的东西,但非常有用。对于像我这样的新手来说,这是一篇很棒的文章。
如果你一直沉浸于此,那这很明显。对于我们其他人来说,这真是太棒了。
正如你所说,这很明显,不应该说出来,但仍然……人们一直都在看到它。
有时很容易忽略简单的事情,所以总的来说,这是一篇简短但内容丰富的文章。
我可以稍微不同意一下吗?我同意更大的点击区域更好(依我拙见,通常最糟糕的违规者——差距相当大——是分页链接),但我经常发现,为水平列表中的项目获取过多的水平空间可能会存在问题:你最终可能会得到大块的空白区域,这些区域出乎意料地可点击。(这在一定程度上取决于演示文稿:具有斑马纹行的轮廓分明的列表比普通的无约束空白空间问题要小得多。)
想象一下在一个白色页面上的一个列表,其中有十几个非常短的条目和一个非常长的条目,然后想象所有链接的长度都相同——如果你正在进入看起来是死的但实际上不是的区域,那么这有点令人困惑(而且我不知道其他人怎么样,但当我把手放在鼠标上时,我经常发现我会意外地点击,所以当我阅读时,我倾向于本能地将光标放在任何看起来像死空间的地方,如果找到死空间实际上是一个挑战,那么这会让我感到困扰)。
因此,我同意消除链接之间的不可点击空间,并在文本的两侧添加一些固定的边距(有效地为链接添加“出血”),我只是认为,如果你必须将链接在水平方向上扩展到超出文本范围很多,那么至少视觉样式需要支持这一点。
因此,就我个人而言,我倾向于采用类似的样式,但 `li` 元素上的“`display: block`”除外,可能会添加一些左右内边距来弥补它。依我拙见/依我经验/依情况而定等等 :)
我同意你的说法,但一个快速的解决方案是使用一些可见的 `:hover` 效果,例如更改背景,以便你可以看到它是一个活动区域。
我某种程度上同意你的观点,但我认为这专门用于侧边栏和导航。
如果这是在主体内容中,那么是的,它绝不应该是一个块级元素,内联元素绝对是首选。
我又学到了一点东西!!
向大师致敬 :)
如果你想选择其中一个列表项(引用当前页面),使其不包含链接,就会出现问题。在这种情况下,你可以插入 `span` 代替链接,或者为 `li.selected` 指定内边距。
是的,这是一个经典的担忧。另一个解决方案可能是只使用没有 `href` 属性的 `` 标签。或者无论如何都包含 `href`,或者包含 `href` 但使用指针事件(https://css-tricks.cn/pointer-events-current-nav/)
这真是太有用了。我从未意识到
“`pointer-events: none;`”
属性。完全学到了新东西。关于你当前的文章,很棒!:)
我实际上有时喜欢链接之间有一点间隙,但这只是我的意见。
这是一个很棒的建议,我也从未了解过指针事件,奇怪的是我以前从未见过你发表的这篇文章,因为我每天都阅读你的博客。关于这篇文章,我不认为链接之间留有空格是一个大问题,除非当然在导航栏中留有大量的空格,但我认为链接的可点击区域之间留有间隙有时比整个区域都可点击要好。
如果很明显列表项引用了当前页面,我真的看不出保留 `` 标签(包括列表中的 `href`)有什么问题。
相当明显的基金会还想指出最后一句话中的错别字 buy => by。
但这是一个非常有用的技巧,你可以在如何制作列表和链接的 HTML 教程中看到它,但没有多少关于像这样的实用技巧。我在所有链接中都使用它。
谢谢,已修复。
我总是记不住!
就像试图重新发明轮子一样;也许我会把它贴在墙上。
呵呵。
非常好。
有时我在列表中的链接方面遇到问题。
已解决。谢谢 Chris。
你的免责声明让我笑了。
我喜欢你写的这些关于你发现/经历/等等的小片段的短文章。
它们比其他博客上那些我永远也读不完的长文章好多了。
你非常善于认识到最简单事物的重要性。注重细节!!!
这真是天才!起初我在想为什么这对我不起作用……然后我意识到我在重置中删除了内边距,所以这在我的页面上一直都是这种情况,我只是从未注意到它。重置真棒!
感谢分享,Chris!
我从未理解为什么似乎没有人这样做。多年来,我一直默认将我的链接列表设置为这种方式(一旦我了解了 `display:block` :-))
这是那些容易被忽视的简单事情之一,感谢你发布……很棒的技巧。
谢谢。我在 http://www.chefsconsortium.com/ [左侧栏“即将举行的活动”列表] 中添加了一个更复杂的情况,其中每个列表项有多个链接。我最终在每个链接周围插入了一个 `span` 并为其分配了 `display:block`。外观得到了改善。感谢提醒。
(抱歉今天没有建设性的话题,但是…)我非常喜欢这个网站。我从中学到了很多东西。它给了我很多想法……我尽可能经常访问它。谢谢。
优秀的入门指南。
简单而强大…
是的,这是一个好习惯..我同意…将内边距设置为“a”对我来说是新东西..谢谢。
好的建议。这里还有一个重要的收获,就是记住在为 ul/li/a 列表设置样式时,始终从内到外进行操作。所以首先用 padding/block 针对 <a>,然后转到下一个。
再次感谢 Chris,很棒的(
我模糊地理解,搜索引擎不喜欢大片的可点击空白区域。我认为内联块可能是更好的解决方案,它仍然允许为目标大小构建一些额外的填充。
我认为搜索引擎并不真正关心你如何设置链接的样式。
我以为这很明显,看到它不是这样真的很震惊=/。
经典问题的经典解决方案..感谢提示
感谢提示。您的视觉效果帮助我比阅读书籍中的文字更好地理解(和记住)这个概念。
我已经使用这个一段时间了,但看到它写下来还是很好!
除此之外,我想强调一下为链接设置不同的悬停和焦点状态的重要性,以便用户可以清楚地知道哪个链接被点击了。尤其是在这种链接之间没有边距的情况下。
你真是个天才!……这是一篇很棒的文章。
很好的建议。这是值得记住的一点… :)
Chris,文章很棒,一如既往,但我担心我必须略微不同意。我同意你扩大点击区域的观点,但我经常发现自己有意地在导航区域的链接元素之间添加间隙。
在我看来,间隙(以及当鼠标移动到整个导航时,此间隙在光标中产生的闪烁)是另一个视觉线索,它将元素彼此分开——从而将点击时执行的操作分开。在我看来,间隙可能是一个有用的 UX 模式——就像两扇门之间的墙壁可能表示它们不是同一个房间一样。
但是,我没有研究来支持这个理论 :) 我也意识到显著的悬停效果可以解决问题(消除对间隙的需求)。但这就是我的观点——可能需要间隙。
我的天啊,真是浪费时间……如果这对您来说是新的,您真的应该从 CSS 教程第 1 部分开始。
我会说这是一个很好的建议。我唯一想说的是,列表项之间(垂直方向)的非常小的边距可以防止您意外点击相邻链接之一。尤其是在触摸设备上,很容易“错过”链接,对于轻微的错过没有响应比点击不同的链接并在页面加载后返回要好。
总的来说,这是一个很棒的建议。谢谢!
这就是重点!更多基础知识供我们新手学习。 :)
这是学习的最佳文章类型:实用、简短且简单!:D
我没有向 <a> 添加填充,我通常会这样做
li { height: 40px; }
a { display: block; line-height: 40px; }
这可以在不向顶部和底部添加填充的情况下垂直居中文本。
我也经常这样做。但此解决方案仅适用于单行菜单项。如果链接中的文本因宽度限制而换行,则行之间的空间过大。
好的建议。几乎每天都在用这个。
有一件事让我困扰,那就是人们无目的地使用块级锚点。如果您正在更改背景颜色或其他样式以使其看起来更像按钮或类似的东西,那太棒了。
当人们在普通的旧列表上使用 display: block; 并且链接上唯一更改的是颜色或下划线时,我宁愿使用默认列表样式。假设您有一个 300px 宽的区域,但大多数链接只有 50 或 100px。您将鼠标悬停在该 300px 区域的右侧,链接会在最左侧被下划线,因为它是一个块级元素。这当然不是什么大问题,但在我看来它看起来和行为都有些奇怪。
感谢这篇文章,我一直在寻找解决方法!太棒了!
很棒。文章非常简单,但非常有用。
跑题了;-)
网站的新设计非常棒!
Chris,设计很棒。
现在更大的挑战来了。使 <a> 区域比容器更大,以便您可以在导航中悬停,其中辅助导航与主导航之间间隔几个像素。我终于在 http://www.printcopyfactory.com 上实现了它,但至于它的逻辑?我需要花点时间盯着那个 CSS 看。
是的!我一直想知道如何做到这一点。谢谢!
嗨,Chris,
我喜欢你的新设计。
如果对您有帮助,评论部分中的一些头像在我的浏览器中被截断了。
屏幕截图:http://img225.imageshack.us/img225/6866/commentscsstricks.png
我正在使用最新版本的 Google Chrome,我的屏幕分辨率为 1024 x 768。
简单,但如此真实!这应该是所有 Web 开发人员首先学习的内容之一!没有什么比难以点击的链接更令人沮丧的了!
太棒了。这绝对比我以前的方法好。
对于感兴趣的人:我的方法只是将 < li < 包裹在 < a < 中。当然,这无法验证(并且在某些浏览器中不起作用)。
简单但非常有用。一个问题是,我们是否应该为具有块级样式的单个锚链接(例如“阅读更多”链接)声明宽度和高度?
我在寻找解决 IE7 中无序列表菜单显示不正确问题的方案时偶然发现了这篇文章。这篇文章提供了一些解决方案,但我注意到它并没有真正解决水平菜单的问题。也许有一天 Chris 会重新审视这个话题。提示提示。=)