Bagaimana cara membuat seluruh area item daftar di bilah navigasi saya, dapat diklik sebagai tautan?


95

Saya memiliki bilah navigasi horizontal yang dibuat dari daftar yang tidak berurutan, dan setiap item daftar memiliki banyak padding agar terlihat bagus, tetapi satu-satunya area yang berfungsi sebagai tautan adalah teks itu sendiri. Bagaimana saya dapat mengaktifkan pengguna untuk mengklik di mana saja dalam item daftar untuk mengaktifkan 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>

Jawaban:


109

Jangan letakkan padding di item 'li'. Alih-alih, atur tag anchor ke display:inline-block;dan terapkan padding padanya.


display: inline; zoom: 1;dalam komentar bersyarat untuk IE6 dan IE7 akan menggantikan display: inline-block;meskipun ya, jika item daftar sudah mengambang, display: block;akan baik-baik saja juga
FelipeAls

Itu bekerja dengan baik hanya satu keluhan, tampaknya tidak bekerja dengan: pemilih setelah. Saya ingin >simbol muncul setelah teks tautan saya, tetapi tidak memasukkannya ke dalam konten ... Saya akhirnya hanya memasukkannya ke dalam konten. Akan penasaran jika ada cara yang lebih baik untuk mencapai itu.
mengimbangi

46

Tentukan properti css tag anchor Anda sebagai:

{display:block}

Kemudian jangkar akan menempati seluruh area daftar, jadi klik Anda akan berfungsi di ruang kosong di sebelah daftar Anda.


1
Saya berharap, saya dapat menyeret jawaban ini ke atas daftar jawaban ... Ini adalah solusi terbaik untuk masalah ini !!!!
Rishabh

1
Akan memutus baris jika ada hal lain di dalam li, seperti ikon.
Gringo Suave

13

Buatlah tag anchor berisi padding daripada li. Dengan cara ini, itu akan mengambil semua area.


3
Saya juga menyarankan untuk memindahkan status hover ke anchor juga dari li untuk dukungan browser yang lebih baik.
NinjaBomb

10

Sangat, sangat terlambat ke pesta ini, tapi bagaimanapun: Anda juga bisa mengatur gaya jangkar sebagai item fleksibel. Ini sangat berguna untuk item daftar yang berukuran / tersusun secara dinamis.

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

(Peringatan: flexboxes adalah obvs masih belum didukung dengan baik. Autoprefixer untuk menyelamatkan!)


Tapi sekarang (beberapa tahun kemudian), flex bekerja dengan baik jadi menurut saya ini adalah jawaban terbaik saat membangun menu dengan uldan flexbox.
Ludovic Kuty

10

Gunakan berikut ini:

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

6

Atau Anda bisa menggunakan jQuery:

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

3
Dapat dikatakan bahwa solusi ini adalah 'solusi jquery kotor yang tidak diperlukan karena Anda dapat melakukannya dengan mudah dengan css'. Tetapi jujur ​​saja - terkadang Anda menemukan diri Anda dalam situasi bekerja dengan bukan-kode-Anda dan Anda tidak punya waktu untuk mengetahui semua struktur DOM dan stylesheet css (dan mencoba memahami 'apa yang dipikirkan pembuat kode'). Jadi +1.
lemoid

Setuju dengan @lemoid, kita harus ingat solusi "cantik" tidak selalu praktis di Kehidupan Nyata.
UncaAlby

1

Anda harus menggunakan properti dan nilai CSS ini ke dalam li:

pointer-events:all;

Jadi, Anda dapat menangani tautan dengan jQuery atau JavaScript, atau menggunakan atag, tetapi semua elemen tag lain di dalam liharus memiliki properti CSS:

pointer-events:none;

0

Cukup terapkan css di bawah ini:

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

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

0

inilah cara saya melakukannya

Buat <a>blok segaris dan hapus bantalan dari Anda<li>

Kemudian Anda bisa bermain dengan widthdan heightdari <a>dalam<li>

Menempatkan widthuntuk 100%sebagai awal dan melihat cara kerjanya

NB: - Dapatkan bantuan Alat Pengembang Chrome saat mengubah heightdanwidth


-1

Anda selalu dapat membungkus seluruh tag li dengan tag hiperlink Berikut adalah solusi saya:

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


Untuk mencuri komentar dari jawaban lain yang tidak disukai: "Ini berfungsi, tetapi secara sintaksis tidak valid."
topskip

-2

Letakkan item daftar di dalam hyperlink, bukan sebaliknya.

Misalnya dengan kode Anda:

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

@DannyBeckett Ini valid dalam HTML5.
Tek


Anda benar, saya sedang memikirkan elemen blok yang diizinkan di dalam jangkar tetapi saya tidak tahu bahwa anak-anak adalah salah satu pengecualian dari aturan tersebut. w3.org/html/wg/drafts/html/master/… Terima kasih atas koreksi cepatnya.
Tek

Oh tidak, tidak, tidak ... sintaksis dan markup semantik Anda baru saja keluar dari jendela. Jangan pernah melakukan ini lagi sobat, itu hanya membuat web menjadi tempat yang mengerikan.
Teodor Sandu
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.