Saya membuat menu horizontal menggunakan daftar HTML dan CSS. Semuanya berfungsi sebagaimana mestinya kecuali ketika Anda mengarahkan kursor ke tautan. Anda lihat, saya membuat status hover tebal untuk tautan, dan sekarang tautan menu bergeser karena perbedaan ukuran tebal.
Saya mengalami masalah yang sama dengan posting SitePoint ini . Namun, pos tersebut tidak memiliki solusi yang tepat. Saya telah mencari solusi di mana-mana dan tidak dapat menemukannya. Tentunya saya tidak bisa menjadi satu-satunya yang mencoba melakukan ini.
Adakah yang punya ide?
PS: Saya tidak tahu lebar teks dalam item menu jadi saya tidak bisa hanya mengatur lebar item li.
.nav { margin: 0; padding: 0; }
.nav li {
list-style: none;
display: inline;
border-left: #ffffff 1px solid;
}
.nav li a:link, .nav li a:visited {
text-decoration: none;
color: #000;
margin-left: 8px;
margin-right: 5px;
}
.nav li a:hover{
text-decoration: none;
font-weight: bold;
}
.nav li.first { border: none; }
<ul class="nav">
<li class="first"><a href="#">item 0</a></li>
<li><a href="#">item 1</a></li>
<li><a href="#">item 2</a></li>
<li><a href="#">item 3</a></li>
<li><a href="#">item 4</a></li>
</ul>
margin-top: -1px
untuk:after
menghindari menciptakan ruang 1px tinggi.:
vs::
"Setiap browser yang mendukung::
sintaks kolon ganda CSS3 juga hanya mendukung:
sintaks, tetapi IE 8 hanya mendukung kolon-tunggal, jadi untuk sekarang, disarankan untuk menggunakan kolon-tunggal untuk dukungan browser terbaik." css-tricks.com/almanac/selectors/a/after-and-beforeUL
ataua::after
, dengan kata lain - reset semua padding / marging / line-heights / font-size dll.Solusi yang dikompromikan adalah dengan memalsukan huruf tebal dengan teks-bayangan, misalnya:
Untuk perbandingan yang lebih baik saya membuat contoh-contoh ini:
Melewati
text-shadow
nilai yang sangat rendahblur-radius
akan membuat efek kabur tidak begitu terlihat.Secara umum semakin Anda mengulangi
text-shadow
semakin berani teks Anda akan tetapi pada saat yang sama kehilangan bentuk asli huruf.Saya harus memperingatkan Anda bahwa pengaturan
blur-radius
fraksi tidak akan membuat yang sama di semua browser! Safari misalnya membutuhkan nilai yang lebih besar untuk menyajikannya dengan cara yang sama seperti Chrome.sumber
Jika Anda tidak dapat mengatur lebar, maka itu berarti lebar akan berubah ketika teks menjadi tebal. Tidak ada cara untuk menghindari ini, kecuali dengan kompromi seperti memodifikasi padding / margin untuk setiap negara.
sumber
Gagasan lain adalah menggunakan
letter-spacing
sumber
Satu baris dalam jquery:
sunting: Walaupun ini dapat menghasilkan solusi, orang harus menyebutkan bahwa itu tidak bekerja bersama dengan kode di posting asli. "display: inline" harus diganti dengan parameter mengambang agar pengaturan lebar menjadi efektif dan menu horizontal itu berfungsi sebagaimana mestinya.
sumber
ul.nav li a
dengana
karya?Solusi CSS3 - Eksperimental
(Keberanian palsu)Pemikiran untuk berbagi solusi berbeda yang tidak disarankan di sini. Ada properti yang disebut
text-stroke
yang akan berguna untuk ini.Di sini, saya menargetkan teks di dalam
span
tag dan kami membelai dengan pikselblack
yang akan mensimulasikanbold
gaya untuk teks tertentu.Perhatikan bahwa properti ini tidak didukung secara luas, seperti sekarang (saat menulis jawaban ini), hanya Chrome dan Firefox yang tampaknya mendukung ini. Untuk informasi lebih lanjut tentang dukungan browser untuk
text-stroke
, Anda dapat merujuk ke CanIUse .Hanya untuk berbagi beberapa hal tambahan, Anda dapat menggunakan
-webkit-text-stroke-width: 1px;
jika Anda tidak ingin menetapkancolor
untuk stroke Anda.sumber
Anda bisa menggunakan sejenisnya
dan kemudian di css Anda cukup atur konten rentang dengan tebal dan sembunyikan dengan visibilitas: disembunyikan, sehingga menjaga dimensinya. Kemudian Anda dapat menyesuaikan margin elemen-elemen berikut untuk membuatnya cocok dengan benar.
Saya tidak yakin apakah pendekatan ini ramah SEO.
sumber
Saya baru saja memecahkan masalah dengan solusi "bayangan". Tampaknya yang paling sederhana dan efektif.
Tidak perlu mengulangi bayangan tiga kali (hasilnya sama untuk saya).
sumber
Saya punya masalah yang serupa dengan masalah Anda. Saya ingin tautan saya dicetak tebal saat Anda mengarahkan kursor, tetapi tidak hanya di menu tetapi juga di teks. Ketika Anda menebak itu akan menjadi tugas nyata mencari tahu semua lebar yang berbeda. Solusinya cukup sederhana:
Buat kotak yang berisi teks tautan dalam huruf tebal tetapi berwarna seperti latar belakang Anda dan tetapi tautan asli Anda di atasnya. Ini contoh dari halaman saya:
CSS:
Tentu saja Anda perlu mengganti # FFFFE0 dengan warna latar belakang halaman Anda. Indeks-z tampaknya tidak perlu tetapi saya tetap menempatkannya (karena elemen "hypo" akan muncul setelah elemen "hyper" dalam HTML-Code). Sekarang, untuk menaruh tautan di halaman Anda, sertakan yang berikut ini:
HTML:
Yang kedua "di sini" tidak akan terlihat dan disembunyikan di bawah tautan Anda. Karena ini adalah kotak statis dengan teks tautan Anda dalam huruf tebal, sisa teks Anda tidak akan bergeser lebih lama karena sudah bergeser sebelum Anda mengarahkan kursor ke tautan.
Semoga saya bisa membantu :).
Sangat lama
sumber
Anda dapat bekerja dengan properti "margin":
Pastikan margin kiri dan kanan cukup besar sehingga ruang ekstra dapat berisi teks tebal. Untuk kata-kata panjang, Anda dapat memilih margin yang berbeda. Ini hanyalah solusi lain tetapi melakukan pekerjaan untuk saya.
sumber
Saya lebih suka menggunakan text-shadow. Terutama karena Anda dapat menggunakan transisi untuk menghidupkan bayangan teks.
Yang Anda butuhkan adalah:
Untuk navigasi lengkap lihat jsfiddle ini: https://jsfiddle.net/831r3yrb/
Dukungan browser dan info lebih lanjut tentang bayangan teks: http://www.w3schools.com/cssref/css3_pr_text-shadow.asp
sumber
Saya akan menyarankan agar beralih font (°) pada hover. Dalam hal ini hanya item menu yang bergerak sedikit, tetapi saya telah melihat kasus di mana paragraf lengkap akan diformat ulang karena pelebaran menyebabkan bungkus kata tambahan. Anda tidak ingin melihat ini terjadi ketika satu-satunya hal yang Anda lakukan adalah memindahkan kursor; jika Anda tidak melakukan apa pun, tata letak halaman tidak boleh berubah.
Pergeseran juga dapat terjadi ketika beralih antara normal dan miring. Saya akan mencoba mengubah warna, atau beralih garis bawah jika Anda memiliki ruang di bawah teks. (garis bawah harus tetap jelas dari batas bawah)
Saya akan dicemooh jika saya menggunakan pergantian font untuk kelas Desain Formulir saya :-)
(°) Kata font sering disalahgunakan. "Verdana" adalah jenis huruf , "Verdana normal" dan "Verdana bold" adalah font yang berbeda dari jenis huruf yang sama.
sumber
sumber
Saya menggunakan solusi teks-bayangan seperti yang disebutkan di sini:
perbedaannya adalah saya tidak menentukan warna bayangan, jadi solusi ini bersifat universal untuk semua warna font.
sumber
Pendekatan alternatif adalah "meniru" teks tebal melalui text-shadow. Ini memiliki bonus (/ malus, tergantung pada kasus Anda) untuk bekerja juga pada ikon font.
Agak hacky, meskipun itu menyelamatkan Anda dari menggandakan teks (yang berguna jika banyak, seperti dalam kasus saya).
sumber
Ini solusi yang saya sukai. Ini membutuhkan sedikit JS tetapi Anda tidak perlu properti judul Anda sama persis dan CSS Anda bisa tetap sangat sederhana.
sumber
Bagaimana dengan ini? Solusi javascript - CSS3 gratis.
http://jsfiddle.net/u1aks77x/1/
sumber
Bukan solusi yang sangat elegan, tetapi "berhasil":
sumber
Saya telah menggabungkan banyak teknik di atas untuk memberikan sesuatu yang tidak sepenuhnya menyedot dengan js dimatikan dan bahkan lebih baik dengan sedikit jQuery. Sekarang dukungan browser untuk penempatan huruf subpixel membaik, sangat bagus untuk menggunakannya.
sumber
Lebih baik menggunakan :: sebelum daripada :: setelah seperti ini:
Untuk detail lebih lanjut: https://jsfiddle.net/r25foavy/
sumber
a::before
lebih baik dari itua::after
? Itu tampak seperti bagian kunci dari jawaban Anda, tetapi tidak jelas mengapa yang satu lebih disukai daripada yang lain dalam hal ini.Saya memperbaiki menu ketika membawa kesuksesan yang berani. Ini mendukung responsif, ini kode saya:
sumber
Jika Anda tidak suka menggunakan Javascript, Anda dapat mengatur lebar yang tepat setelah halaman ditampilkan. Inilah cara saya melakukannya (menggunakan Prototipe):
sumber
Saya benar-benar tidak tahan ketika seseorang mengatakan kepada Anda untuk tidak melakukan sesuatu seperti itu ketika ada solusi sederhana untuk masalah tersebut. Saya tidak yakin tentang elemen li, tapi saya baru saja memperbaiki masalah yang sama. Saya memiliki menu yang terdiri dari tag div.
Cukup atur tag div menjadi "display: inline-block". Sebaris sehingga mereka duduk bersebelahan dan menghalangi agar Anda dapat mengatur lebar. Cukup atur lebarnya cukup lebar untuk mengakomodasi teks yang dicetak tebal dan atur pusat teks.
(Catatan: Tampaknya menghapus html saya [di bawah], tetapi setiap item menu memiliki tag div yang dililitkan dengan ID korespondensi dan nama kelas SearchBar_Cateogory. Yaitu:
<div id="ROS_SearchSermons" class="SearchBar_Category">
HTML (saya memiliki tag jangkar yang melilit setiap item menu, tetapi saya tidak dapat mengirimkannya sebagai pengguna baru)
CSS:
sumber
coba ini:
sumber
Anda juga dapat mencoba margin negatif jika teks tebal lebih lebar dari biasanya. (tidak selalu) Jadi idenya adalah menggunakan kelas sebagai ganti style: hover state.
jQuery:
CSS:
Saya harap saya bisa membantu!
sumber