Как сделать так, чтобы вся область элемента списка на моей панели навигации была кликабельна как ссылка? - PullRequest
84 голосов
/ 19 июня 2010

У меня есть горизонтальная панель навигации, сделанная из неупорядоченного списка, и каждый элемент списка имеет много отступов, чтобы он выглядел хорошо, но единственной областью, которая работает как ссылка, является сам текст. Как я могу позволить пользователю щелкнуть в любом месте элемента списка, чтобы активировать ссылку?

#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;
}
<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>

Ответы [ 9 ]

102 голосов
/ 19 июня 2010

Не помещайте отступы в элемент 'li'.Вместо этого установите тег привязки на display:inline-block; и примените к нему заполнение.

43 голосов
/ 28 июля 2012

Определите ваше свойство css тега привязки как:

{display:block}

Тогда якорь займет всю область списка, поэтому ваш щелчок будет работать в пустом месте рядом с вашим списком.

12 голосов
/ 19 июня 2010

Заставить тег привязки содержать отступ, а не li.Таким образом, он займет всю площадь.

8 голосов
/ 24 августа 2015

Используйте следующее:

a {
  display: list-item;
  list-style-type: none;
}
7 голосов
/ 13 июня 2015

Супер, супер поздно на эту вечеринку, но в любом случае: вы также можете оформить якорь как гибкий элемент. Это особенно полезно для динамически изменяемых / упорядоченных элементов списка.

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;
}

(Предостережение: flexbox-ы - это obvs, но они не очень хорошо поддерживаются. Авторефиксатор на помощь!)

6 голосов
/ 15 апреля 2014

Или вы можете использовать jQuery:

$("li").click(function(){
   window.location=$(this).find("a").attr("href"); 
   return false;
});
1 голос
/ 12 мая 2016

Вы должны использовать это свойство CSS и значение в вашем li:

pointer-events:all;

Таким образом, вы можете обрабатывать ссылку с помощью jQuery или JavaScript или использовать тег a, но все остальные элементы тега внутри li должны иметь свойство CSS:

pointer-events:none;
0 голосов
/ 25 июля 2018

Вы всегда можете обернуть весь тег li в тег hiperlink. Вот мое решение:

#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;
  text-align: center;
  float: left;
  width: 40px;
  padding: 25px 10px;
}

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

#nav a {
  color: white;
  font-family: Helvetica, Arial, sans-serif;
  text-decoration: none;
}
<div id="nav">
  <img src="/images/renderedicon.png" alt="Icon" height="57" width="57" />
  <ul>
    <a href="#"><li>One1</li></a>
    <a href="#"><li>Two</li></a>
    <a href="#"><li>Three</li></a>
    <a href="#"><li>Four</li></a>
  </ul>
</div>
<div>
  <h2>Heading</h2>
</div>
0 голосов
/ 18 августа 2013

Поместите элемент списка в гиперссылку, а не наоборот.

Например, с вашим кодом:

<a href="#"><li>One</li></a>
...