如何在导航栏中创建列表项的整个区域,可单击作为链接?

Cur*_*ous 90 html css anchor

我有一个由无序列表组成的水平导航栏,每个列表项都有很多填充,使它看起来不错,但作为链接的唯一区域是文本本身.如何让用户单击列表项中的任意位置以激活链接?

#nav {
  background-color: #181818;
  margin: 0px;
  overflow: hidden;
}

#nav img {
  float: left;
  padding: 5px 10px;
  margin-top: auto;
  margin-bottom: auto;
  vertical-align: bottom;
}

#nav ul {
  list-style-type: none;
  margin: 0px;
  background-color: #181818;
  float: left;
}

#nav li {
  display: block;
  float: left;
  padding: 25px 10px;
}

#nav li:hover {
  background-color: #785442;
}

#nav a {
  color: white;
  font-family: Helvetica, Arial, sans-serif;
  text-decoration: none;
}
Run Code Online (Sandbox Code Playgroud)
<div id="nav">
  <img src="/images/renderedicon.png" alt="Icon" height="57" width="57" />
  <ul>
    <li><a href="#">One1</a></li>
    <li><a href="#">Two</a></li>
    <li><a href="#">Three</a></li>
    <li><a href="#">Four</a></li>
  </ul>
</div>
<div>
  <h2>Heading</h2>
</div>
Run Code Online (Sandbox Code Playgroud)

Stu*_*ssa 106

不要在'li'项目中添加填充.而是将锚标记设置为display:inline-block;并对其应用填充.


小智 44

将锚标记css属性定义为:

{display:block}
Run Code Online (Sandbox Code Playgroud)

然后锚点将占据整个列表区域,因此您的点击将在列表旁边的空白区域中起作用.


Aar*_*run 12

使锚标记包含填充而不是填充li.这样,它将占用所有区域.

  • 我还建议将悬停状态移动到锚点以及更好的浏览器支持. (3认同)

Sab*_*y62 9

使用以下:

a {
  display: list-item;
  list-style-type: none;
}
Run Code Online (Sandbox Code Playgroud)


cri*_*eep 7

超级,这个派对超级晚了,但无论如何:你也可以将锚定为柔性项目.这对动态调整大小/排列的列表项特别有用.

a {
  /* This flexbox code stretches the link's clickable 
   * area to fit its parent block. */
  display:        flex;
  flex-grow:      1;
  flex-shrink:    1;
  justify-content: center;
}
Run Code Online (Sandbox Code Playgroud)

(警告:flexboxes是obvs仍然没有很好的支持.自动修复器拯救!)

  • 但现在(几年后),flex 运行良好,所以我认为这是使用“ul”和 flexbox 构建菜单时的最佳答案。 (2认同)

小智 6

或者你可以使用jQuery:

$("li").click(function(){
   window.location=$(this).find("a").attr("href"); 
   return false;
});
Run Code Online (Sandbox Code Playgroud)

  • 可以说这个解决方案是'脏jquery解决方案,不需要因为你可以用css轻松完成'.但说实话 - 有时你会发现自己处于不使用代码的情况下,你根本没有时间去了解所有DOM结构和css样式表(并试图理解'编码器在想什么').所以+1. (3认同)