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>

Curyous
sumber

Jawaban:

109

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

Stussa
sumber
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.

suren
sumber
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.

Aaron Harun
sumber
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!)

crisis.sheep
sumber
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;
}
Sabby62
sumber
6

Atau Anda bisa menggunakan jQuery:

$("li").click(function(){
   window.location=$(this).find("a").attr("href"); 
   return false;
});
Kieran
sumber
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;
dnvtrn.dll
sumber
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>
vabi
sumber
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

hs18
sumber
-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>

Marcello Perri
sumber
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>
Spudious
sumber
@DannyBeckett Ini valid dalam HTML5.
Tek
@Tek Tidak .
Danny Beckett
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