如何通过单击<li>激活HTML链接?


73

我有以下标记,

<ul id="menu">              
    <li><a href="#">Something1</a></li>
    <li><a href="#">Something2</a></li>
    <li><a href="#">Something3</a></li>
    <li><a href="#">Something4</a></li>
</ul>

<li>是有点大,在其左边的一个小图像,我必须真正在点击<a>激活链接。如何单击<li>激活链接?

编辑1:

ul#menu li
{
    display:block;
    list-style: none;
    background: #e8eef4 url(images/arrow.png) 2% 50% no-repeat;
    border: 1px solid #b2b2b2;
    padding: 0;
    margin-top: 5px;
}

ul#menu li a
{

    font-weight: bold;
    text-decoration: none;
    line-height: 2.8em;
    padding-right:.5em;
    color: #696969;
}

Answers:


121
#menu li { padding: 0px; }
#menu li a { margin: 0px; display: block; width: 100%; height: 100%; }

可能需要对IE6进行一些调整,但这就是您的操作方式。


1
这就是我要做的。它将链接扩展到<li>标记的大小。
奥斯丁·海德

它可以正常工作,但是当我给padding-right时,文本(链接)仍停留在右边框上:.5em,<a>走出<li>

继续进行调整,您会发现它看起来很完美。检查是否有负边距和填充,这可能是没有加总和崩溃的原因。另外,请确保您没有错误的text-align:卡在里面。
柯蒂斯·塔斯克

通过给<li>一个padding-right:0.5em并让<li>和<a>具有相同的背景色,我为text(link)设置了一个右填充。但是,现在<li>的.5em右侧部分无法单击,但这很好。

San:通过智能地将填充物放置在链接本身上来解决该问题:li {padding-top:.3em; padding-bottom:.3em; {{display:block; 边距:0px; 左填充:10%;宽度:90%; 高度:100%; }}
阿里·格谢

21

正如Marineio所说,您可以通过javascript使用的onclick属性<li>change location.href

<li onclick="location.href='http://example';"> ... </li>

另外,您可以删除中的任何边距或内边距<li>,并在的左侧添加一个较大的内边距,<a>以避免文本越过子弹。


1
您能对此进行扩展吗?为什么是一个坏主意
NuclearPeon

14

只是把这个选项扔在那里:

<ul id="menu">
    <a href="#"><li>Something1</li></a>
    <a href="#"><li>Something2</li></a>
    <a href="#"><li>Something3</li></a>
    <a href="#"><li>Something4</li></a>
</ul>

这是我在菜单中使用的样式,它使列表项本身成为超链接(类似于使图像成为链接的方式)。
对于样式,我通常应用以下内容:

nav ul a {
    color: inherit;
    text-decoration: none;
}

然后,我可以将任何样式应用于所需的<li>。

注意:验证者会抱怨这种方法,但是如果您像我一样,不以自己为生,那应该就可以了。


1
ul元素的子代(直接后代)必须全部是li元素。这纯粹是句法要求。根据ul中ul的正确语义-此答案将导致无效的HTML
EGC

1
狂野的验证者出现了。:)
邓肯

12

只需将链接文本添加到'p'标签或类似内容中,然后在该元素中添加边距和填充,这样就不会影响MiffTheFox给您的设置,即

<li> <a href="#"> <p>Link Text </p> </a> </li>

这实际上是对我最好的。我使用<span>,并将显示设置为阻止。Span似乎比该段落更正确。无论哪种方式,它都运行良好。
Storm Muller '18

7

这将使整个<li>对象成为一个链接:

<li onclick="location.href='page.html';"  style="cursor:pointer;">...</li>

1

以下似乎有效:

ul#menu li a {
    color:#696969;
    display:block;
    font-weight:bold;
    line-height:2.8;
    text-decoration:none;
    width:100%;
}

1

jqyery这是另一个版本,jquery的缩写要短一些。假设该<a>元素在de <li>element内部

$(li).click(function(){
    $(this).children().click();
});

1
这将触发连续循环。由于单击子项->也单击父项。
Rocky Kev

1

或者,您可以在末尾创建一个空链接<li>

<a href="link"></a>

.menu li{position:relative;padding:0;}
.link{
     bottom: 0;
     left: 0;
     position: absolute;
     right: 0;
     top: 0;
}

这将创建一个完整的可点击文件<li>,并使您的格式保持在实际链接上。它也可能对<div>标签有用



0

您可以在LI标签内尝试“ onclick”事件,然后像在javascript中一样更改“ location.href”。

您也可以尝试将li标记放在a标记内,但这可能不是有效的HTML。


以我的经验,通过Javascript伪造链接几乎总是导致不良的用户体验。
Chuck

毕竟,这只是他的网站,这是他考虑的一种选择。而且他可以在其中保留普通的<a>链接,即使关闭了Java脚本,该链接也可以正常工作(如果单击li,则不会如此)。
Marineio


-1

如何通过单击<li>激活HTML链接?

通过使链接与您的Li一样大:只需移动说明

display: block;

从li到a,您就完成了。

那是:

#menu li
{
    /* no more display:block; on list item */

    list-style: none;
    background: #e8eef4 url(arrow.gif) 2% 50% no-repeat;
    border: 1px solid #b2b2b2;
    padding: 0;
    margin-top: 5px;
}

#menu li a
{
    display:block; /* moved to link */
    font-weight: bold;
    text-decoration: none;
    line-height: 2.8em;
    padding-right:.5em;
    color: #696969;
}

旁注:您可以从两个选择器中删除“ ul”:#menu是一个充分的指示,除非您需要权衡这两个规则以覆盖其他指令。


1
这对我不起作用。当我将<a>链接的显示更改为“ block”时,它会将自己放在与项目符号点不同的行上。
cartbeforehorse 2012年

让我细化一下响应...我上面解释的行为发生在Firefox和Opera中,而不发生在Chrome中。在Chrome浏览器中工作正常。
cartbeforehorse 2012年

如果您继续显示:在li和a上同时阻止,该怎么办?否则,请在另一个问题上发表您的问题。
FelipeAls 2012年


-2

使用jQuery,因此您不必在<li>元素上编写内联javascript :

$(document).ready(function(){
    $("li > a").each(function(index, value) {
        var link = $(this).attr("href");
        $(this).parent().bind("click", function() {
            location.href = link;
        });
    });
}); 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.