ナビゲーションバーのリストアイテムの領域全体をリンクとしてクリック可能にするにはどうすればよいですか?


95

順序付けられていないリストから作成された水平ナビゲーションバーがあり、各リストアイテムには見栄えをよくするために多くのパディングがありますが、リンクとして機能する唯一の領域はテキスト自体です。ユーザーがリストアイテムの任意の場所をクリックしてリンクをアクティブにできるようにするにはどうすればよいですか?

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

回答:


109

「li」アイテムにパディングを入れないでください。代わりに、アンカータグをに設定し、それにdisplay:inline-block;パディングを適用します。


display: inline; zoom: 1;IE6とIE7の条件付きコメントでは置き換えられdisplay: inline-block;ますが、リストアイテムが既にフロートdisplay: block;されている場合、問題はありません
FelipeAls

これは1つの不満だけでうまく機能し、:afterセレクターでは機能しなかったようです。>リンクテキストの後に記号を表示したいのですが、コンテンツに配置しませんでした...コンテンツに配置するだけになりました。それを達成するためのより良い方法があるかどうか興味があります。
counterbeing

46

アンカータグのcssプロパティを次のように定義します。

{display:block}

次に、アンカーがリスト領域全体を占めるため、クリックはリストの横の空のスペースで機能します。


1
この回答を回答リストの上にドラッグしたいのですが、これがこの問題の最善の解決策です!!!!
リシャブ2017年

1
liアイコンなど、他に何かがある場合は、行を分割します。
Gringo Suave 2017

13

アンカータグに、ではなくパディングを含めますli。このようにして、すべての領域を占有します。


3
また、ブラウザーのサポートを改善するために、ホバー状態をアンカーからliに移動することもお勧めします。
NinjaBomb 2010年

10

スーパー、このパーティーに遅刻しますが、とにかく、アンカーをフレックスアイテムとしてスタイル設定することもできます。これは、動的にサイズ変更/配置されたリスト項目に特に役立ちます。

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

(警告:フレックスボックスはまだサポートされていません。Autoprefixerが助けになります!)


しかし、今(数年後)、フレックスはうまく機能しているので、フレックスulボックスを使用してメニューを構築する場合に最良の答えだと思います。
Ludovic Kuty


6

または、jQueryを使用することもできます。

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

3
このソリューションは、「CSSで簡単に実行できるため不要な汚いjqueryソリューション」と言えます。しかし、正直に言うと、自分のコードではなく、すべてのDOM構造とcssスタイルシートを知る時間がない(そして、「コーダーが考えていたもの」を理解しようとしている)場合があります。だから+1。
レモイド'25

@lemoidに同意します。「かなり」のソリューションは、現実の生活では必ずしも実用的ではないことを覚えておく必要があります。
UncaAlby

私は本当にあなたが好き!!
カスティブランコ

1

次のCSSプロパティと値を使用する必要がありますli

pointer-events:all;

したがって、jQueryまたはJavaScriptでリンクを処理するか、aタグを使用できますが、内の他のすべてのタグ要素にliはCSSプロパティが必要です。

pointer-events:none;

0

以下のCSSを適用するだけです:

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

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

0

ここに私がやった方法があります

作る<a>インラインブロックを、あなたからのパディングを削除<li>

そして、あなたはと遊ぶことができるwidthheight<a><li>

置くwidth100%スタートとして、それがどのように動作するかを見ます

PS:- heightおよびを変更するときにChromeデベロッパーツールのヘルプを利用するwidth


-1

タグli全体を常にハイパーリンクタグでラップできます。これが私の解決策です。

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


別の反対票を投じた回答からコメントを盗むには、「これは機能しますが、構文的には無効です。」
topskip

-2

リストアイテムを逆にではなくハイパーリンク内に配置します。

例えばあなたのコードで:

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

@DannyBeckett HTML5で有効です。
Tek


あなたが正しい、私はアンカー内で許可されたブロック要素を考えていましたが、ulの子がルールの例外の1つであることを知りませんでした。w3.org/html/wg/drafts/html/master/… 迅速な修正に感謝します。
2015

ああ、いやいやいや...あなたの構文と意味のマークアップはちょうど窓から出ました。二度とこれをしないでください、それはウェブを恐ろしい場所にするだけです。
Teodor Sandu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.