Ответ 1
Не помещайте дополнение в элемент "li". Вместо этого привяжите тег привязки к display:inline-block;
и примените к нему прокладку.
У меня есть горизонтальная панель навигации, сделанная из неупорядоченного списка, и в каждом элементе списка есть много отступов, чтобы он выглядел красиво, но единственной областью, которая работает как ссылка, является сам текст. Как я могу позволить пользователю щелкнуть в любом месте элемента списка, чтобы активировать ссылку?
#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>
Не помещайте дополнение в элемент "li". Вместо этого привяжите тег привязки к display:inline-block;
и примените к нему прокладку.
Определите свойство css для привязки тега как:
{display:block}
Затем якорь будет занимать всю область списка, поэтому ваш клик будет работать в пустом месте рядом с вашим списком.
Сделать якорный тэг содержать дополнение, а не li
. Таким образом, это займет всю область.
Использовать следующее:
a {
display: list-item;
list-style-type: none;
}
Супер, супер поздно для этой вечеринки, но в любом случае: вы можете также привязать якорь к элементу flex. Это особенно полезно для элементов динамического размера/упорядоченного списка.
a {
/* This flexbox code stretches the link clickable
* area to fit its parent block. */
display: flex;
flex-grow: 1;
flex-shrink: 1;
justify-content: center;
}
(Caveat: flexboxes obvs все еще не поддерживается. Autoprefixer для спасения!)
Или вы можете использовать jQuery:
$("li").click(function(){
window.location=$(this).find("a").attr("href");
return false;
});
Вы должны использовать этот CSS-свойство и значение в своем li
:
pointer-events:all;
Итак, вы можете обрабатывать ссылку с помощью jQuery или JavaScript или использовать тег a
, но все остальные элементы тега внутри li
должны иметь свойство CSS:
pointer-events:none;
Просто примените следующую CSS:
<style>
#nav ul li {
display: inline;
}
#nav ul li a {
background: #fff;// custom background
padding: 5px 10px;
}
</style>
Вы всегда можете обернуть весь тег 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>
Поместите элемент списка внутри гиперссылки, а не наоборот.
Например, с кодом:
<a href="#"><li>One</li></a>