使整个 <li> 成为正确 HTML 的链接

Posted

技术标签:

【中文标题】使整个 <li> 成为正确 HTML 的链接【英文标题】:Make whole <li> as link with proper HTML 【发布时间】:2012-11-24 14:01:18 【问题描述】:

我知道这已经出现过很多次了,但在我的具体情况下我找不到任何解决方案。

我有一个导航栏,如果你愿意的话,我希望整个&lt;li&gt; 都被“链接”或“可点击”。现在只有&lt;a&gt;(和我摆弄过的&lt;div&gt;)是“可点击的”。

我已经尝试过li a display: inner-block; height: 100%; width: 100% 方法,但结果太糟糕了。

来源可以在这里找到:http://jsfiddle.net/prplxr/BrcZK/

html

<!DOCTYPE html>
<html>
    <head>
        <title>asdf</title>
    </head>
    <body>
        <div id="wrapper">
            <div id="menu">
                <div id="innermenu">    
                    <ul id="menulist">       
                        <li class="menuitem"><a href="index.php"><div class="menulink">Lnk1</div></a></li>
                        <li class="menuitem"><a href="index.php"><div class="menulink">Lnk2</div></a></li>
                        <li class="menuitem"><a href="index.php"><div class="menulink">Lnk3</div></a></li>
                        <li class="menuitem"><a href="index.php"><div class="menulink">Lnk4</div></a></li>
                    </ul>
                </div>
            </div>
        </div>
    </body>
</html>

有人对此有一个巧妙的解决方案吗?

提前谢谢你!

【问题讨论】:

如果你想让&lt;li&gt; 具有可点击性,那么你需要使用javascript,可以吗? 【参考方案1】: 摆脱&lt;div&gt;s。 将&lt;a&gt; 标签设置为display: block 将填充从&lt;li&gt; 移动到&lt;a&gt;&lt;li&gt;s 需要浮动或display: inline-block

示例:http://jsfiddle.net/8yQ57/

【讨论】:

完美!这正是我想要达到的目标!非常感谢你,史蒂夫! 节省了我尝试获取链接以应用于 Sharepoint 网站上的整个幻灯片的时间。只需添加高度:100%。【参考方案2】:

只需使用“显示块”作为链接。

ul 
  display: block;
  list-style-type: none;


li 
  display: inline-block; /* or block with float left */
  /* margin HERE! */


li a 
  display: block;
  /* padding and border HERE! */

这是http://jsfiddle.net/TWFwA/ 的示例:)

【讨论】:

这并不能解决整个问题。如果对li(它是)应用了填充,那么a 周围仍然会有不可点击的空间(这将占用直到填充的所有水平空间。跨度> 当然,填充应该在链接内部:) 它在我的 jsfiddle 示例中的内部链接。我认为这很明显。【参考方案3】:

我自己也遇到了这个问题。

答案再简单不过了:

<li class="menuitem"><a href="index.php"><div class="menulink">Lnk1</div></a></li>
Wrong:
.menuitem 
    list-style-type:        none;
    display:                 inline;
    margin-left:            5px;
    margin-right:            5px;
    font-family:            Georgia;
    font-size:                11px;
    background-color:        #c0dbf1;
    border:                 1px solid black;
    padding:                10px 20px 10px 20px;


Correct
.menuitem a 
    list-style-type:        none;
    display:                 block;
    margin-left:            5px;
    margin-right:            5px;
    font-family:            Georgia;
    font-size:                11px;
    background-color:        #c0dbf1;
    border:                 1px solid black;
    padding:                10px 20px 10px 20px;

换句话说,您想将 LI 所具有的 css 应用到 A 元素。确保A是块线元素

【讨论】:

+1 用于在您的答案中包含代码示例,并使用 OP 提供的实际 CSS。【参考方案4】:

我想你可能指的是inline-block,而不是inner-block

li a display: inline-block; height: 100%; width: 100%; 

另外,inline-block 在旧版 IE 浏览器中也存在一系列问题,可能不会像您预期的那样做出反应。

【讨论】:

是的,我做到了。我现在可能睡得太少了。 :-)【参考方案5】:

先生,您使用 jquery 吗? 如果是的话,你可以试试:

$("li").click(function()
   $(this).find('a').click();
);

或者您也可以将其用作 css:

li
  position:relative;

li a 
  position:absolute;top:0px;left:0px;width:100%;height:100%;

选择一个... 祝你好运

【讨论】:

不是非常好的解决这个问题。 jQuery 太过分了(尤其是在没有提到 JavaScript 的情况下)。而position: absolute 将导致li 失去高度和宽度。【参考方案6】:

只需使用您的样式直接格式化a 而不是li

我已经改变了你的小提琴http://jsfiddle.net/BrcZK/1/

【讨论】:

【参考方案7】:

这是我的工作:

a  display: block; 

然后按照我认为合适的方式设置锚的样式。

这是小提琴:http://jsfiddle.net/erik_lopez/v4P5h/

【讨论】:

【参考方案8】:

您应该将a 元素设为display:blockdisplay:inline-block

【讨论】:

因为出现可点击与实际上可点击不同。而且用户体验更差。【参考方案9】:

移动&lt;a&gt; 标记,以便它们包裹&lt;li&gt; 标记。根据this的回答,锚标签必须包含内联元素,看起来你的&lt;li&gt;是内联的,所以这应该是有效的。

【讨论】:

很遗憾,&lt;li&gt; 位于除&lt;ul&gt; 之外的任何位置下都是无效的。不允许ul a li 元素的内联或块性质在 HTML 规范中定义,不会被 CSS 显示属性更改。 display: inline 只是让某些东西看起来是内联的,实际上并没有使其内联。 其实&lt;ul&gt;不能包含任何东西,除了&lt;li&gt;的。

以上是关于使整个 <li> 成为正确 HTML 的链接的主要内容,如果未能解决你的问题,请参考以下文章

如何将硒与UL中的LI分开

html如何使三级下拉菜单第一级竖直排列

将 <li> 附加到 <ul> 但不能成为可拖动的 jQuery [重复]

HTML5 导航标签正确用法

重定向到新页面时如何使 <li> 保持突出显示?

如何使 HTML 列表环绕浮动内容