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

发布于 2024-09-05 22:35:10 字数 1199 浏览 2 评论 0原文

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

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

I've got a horizontal navigation bar made from an unordered list, and each list item has a lot of padding to make it look nice, but the only area that works as a link is the text itself. How can I enable the user to click anywhere in the list item to active the link?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(11

夜访吸血鬼 2024-09-12 22:35:11

将锚标记 css 属性定义为:

{display:block}

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

Define your anchor tag css property as:

{display:block}

Then the anchor will occupy the entire list area, so your click will work in the empty space next to your list.

庆幸我还是我 2024-09-12 22:35:11

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

Make the anchor tag contain the padding rather than the li. This way, it will take up all the area.

青巷忧颜 2024-09-12 22:35:11

超级超级晚了,但无论如何:您也可以将锚点设置为弹性项目。这对于动态调整大小/排列的列表项特别有用。

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

(警告:flexboxes 仍然没有得到很好的支持。Autoprefixer 来救援!)

Super, super late to this party, but anyway: you can also style the anchor as a flex item. This is particularly useful for dynamically sized/arranged list items.

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

(Caveat: flexboxes are obvs still not well supported. Autoprefixer to the rescue!)

迟月 2024-09-12 22:35:11

使用以下:

a {
  display: list-item;
  list-style-type: none;
}

Use following:

a {
  display: list-item;
  list-style-type: none;
}
孤君无依 2024-09-12 22:35:11

或者你可以使用 jQuery:

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

Or you could use jQuery:

$("li").click(function(){
   window.location=$(this).find("a").attr("href"); 
   return false;
});
人生戏 2024-09-12 22:35:11

您应该在 li 中使用此 CSS 属性和值:

pointer-events:all;

因此,您可以使用 jQuery 或 JavaScript 处理链接,或者使用 a 标记,但内部的所有其他标记元素li 应该具有 CSS 属性:

pointer-events:none;

You should use this CSS property and value into your li:

pointer-events:all;

So, you can handle the link with jQuery or JavaScript, or use an a tag, but all other tag elements inside the li should have the CSS property:

pointer-events:none;
习ぎ惯性依靠 2024-09-12 22:35:11

只需简单地应用下面的 css :

<style>
  #nav ul li {
    display: inline;
  }

  #nav ul li a {
    background: #fff;// custom background
    padding: 5px 10px;
  }
</style>

Just simply apply the below css :

<style>
  #nav ul li {
    display: inline;
  }

  #nav ul li a {
    background: #fff;// custom background
    padding: 5px 10px;
  }
</style>
清引 2024-09-12 22:35:11

这是我的做法

制作 内联块并从

  • 中删除填充
  • 然后您可以使用 width< /code> 和

  • height
  • width 改为以 100% 作为开始,看看它是如何工作的

    PS:- 在更改 heightwidth 时获取 Chrome 开发者工具的帮助

    here is how I did it

    Make the <a> inline-block and remove the padding from your <li>

    Then you can play with the width and the height of the <a> in the <li>

    Put the width to 100% as a start and see how it works

    PS:- Get the help of Chrome Developer Tools when changing the height and width

    小耗子 2024-09-12 22:35:11

    如果您有一些限制,需要保持

  • 结构不变,并且希望 a 标签占据 li 元素内的整个区域,您可以执行以下操作:
  • a {
        display: flex !important;
        width: -webkit-fill-available;
        height: -webkit-fill-available;
        justify-content: center;
        align-items: center;
    }
    

    If you have some constraint where you need to keep <li> structure as is and would like your a tag to take up the full area within the li element you can do the following:

    a {
        display: flex !important;
        width: -webkit-fill-available;
        height: -webkit-fill-available;
        justify-content: center;
        align-items: center;
    }
    
    一身仙ぐ女味 2024-09-12 22:35:11

    将列表项放在超链接内,而不是相反。

    例如您的代码:

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

    Put the list item within the hyperlink instead of the other way round.

    For example with your code:

    <a href="#"><li>One</li></a>
    
    花开浅夏 2024-09-12 22:35:10

    不要在“li”项中放置填充。相反,将锚标记设置为 display:inline-block; 并对其应用填充。

    Don't put padding in the 'li' item. Instead set the anchor tag to display:inline-block; and apply padding to it.

    ~没有更多了~
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文