Saya tidak yakin cara terbaik untuk menanyakan / mencari pertanyaan ini:
Saat Anda mengklik tautan jangkar, ini membawa Anda ke bagian halaman dengan area tertaut ke sekarang di SANGAT ATAS halaman. Saya ingin tautan jangkar mengirim saya ke bagian halaman itu, tetapi saya ingin beberapa ruang di bagian atas. Seperti di, saya tidak ingin itu mengirim saya ke bagian yang ditautkan dengannya di SANGAT TOP, saya ingin 100 atau lebih piksel ruang di sana.
Apakah ini masuk akal? Apakah ini mungkin?
Diedit untuk menampilkan kode - itu hanya tag jangkar:
<a href="#anchor">Click me!</a>
<p id="anchor">I should be 100px below where I currently am!</p>
javascript
html
css
anchor
Damon
sumber
sumber
Jawaban:
Ini akan memungkinkan browser melakukan pekerjaan melompat ke jangkar untuk kita dan kemudian kita akan menggunakan posisi itu untuk mengimbangi.
EDIT 1:
Seperti yang ditunjukkan oleh @erb, ini hanya berfungsi jika Anda berada di halaman saat hash diubah. Memasuki halaman dengan yang
#something
sudah ada di URL tidak bekerja dengan kode di atas. Berikut adalah versi lain untuk mengatasinya:CATATAN: Untuk menggunakan jQuery, Anda bisa mengganti
window.addEventListener
dengan$(window).on
dalam contoh. Terima kasih @Neon.EDIT 2:
Seperti yang ditunjukkan oleh beberapa orang, hal di atas akan gagal jika Anda mengklik tautan jangkar yang sama dua kali atau lebih berturut-turut karena tidak ada
hashchange
peristiwa untuk memaksa pengimbangan.Solusi ini adalah versi yang sedikit dimodifikasi dari saran dari @Mave dan menggunakan pemilih jQuery untuk kesederhanaan
JSFiddle untuk contoh ini ada di sini
sumber
example.com/#anchor
dariexample.com/about/
.$('a[href^="#"]').on('click', function() { offsetAnchor(); });
. Dengan cara ini, jikahref
dari sebuaha
elemen dimulai dengan a#
, Anda memanggil fungsi yang sama.$(window).on("hashchange",
denganwindow.addEventListener("hashchange",
Bekerja hanya dengan css Anda dapat menambahkan padding ke elemen berlabuh (seperti dalam solusi di atas) Untuk menghindari spasi kosong yang tidak perlu Anda dapat menambahkan margin negatif dengan tinggi yang sama:
Saya tidak yakin apakah ini adalah solusi terbaik dalam hal apa pun, tetapi berfungsi dengan baik untuk saya.
sumber
position: relative
properti css. Jadi, ini akan menjadi sepertiposition: relative; top: -50px;
Solusi yang lebih baik:
Posisikan saja
<a>
tag dengan pemosisian absolut di dalam objek yang posisinya relatif.Berfungsi saat memasuki halaman atau melalui perubahan hash dalam halaman.
sumber
href="#anchor"
di dalamnya akan mengarah ke sana, alih-alih menunjuk ke<p>
elemen secara langsung. Tapi satu peringatan: gunakanid
bukanname
di HTML5, lihat: stackoverflow.com/questions/484719/html-anchors-with-name-or-idInilah jawaban tahun 2020 untuk ini:
Karena itu didukung secara luas !
sumber
Solusi terbaik
sumber
Ini akan bekerja tanpa jQuery dan saat memuat halaman.
sumber
Untuk menautkan ke sebuah elemen, dan kemudian 'memposisikan' elemen itu pada jarak yang sewenang-wenang dari bagian atas halaman, menggunakan CSS murni, Anda harus menggunakan
padding-top
, dengan cara itu elemen masih diposisikan di bagian atas jendela, tetapi itu muncul , tampak, untuk diposisikan agak jauh dari atas port tampilan, misalnya:CSS:
Demo JS Fiddle .
Untuk menggunakan pendekatan JavaScript biasa:
Demo JS Fiddle .
sumber
Ini harus bekerja:
Ubah saja .top-49 menjadi yang sesuai dengan tautan jangkar Anda.
sumber
Jika Anda menggunakan nama jangkar eksplisit seperti,
lalu di css Anda cukup mengaturnya
Ini akan bekerja selama tag anchor HREF Anda tidak juga menentukan atribut NAME
sumber
Jawaban Eric bagus, tetapi Anda benar-benar tidak membutuhkan waktu tunggu itu. Jika Anda menggunakan jQuery, Anda tinggal menunggu halaman dimuat. Jadi saya sarankan untuk mengubah kode menjadi:
Ini juga membuat kita menyingkirkan faktor sembarangan itu.
sumber
coba kode ini, sudah animasi yang mulus saat mengklik link.
sumber
Solusi termudah:
CSS
HTML
sumber
Varian solusi Thomas: elemen CSS > pemilih elemen dapat digunakan di sini:
CSS
HTML
Sebuah klik pada link akan memindahkan posisi scroll ke 100px di atas dimanapun elemen dengan kelas
paddedAnchor
diposisikan.Didukung di browser non-IE, dan di IE dari versi 9. Untuk dukungan pada IE 7 dan 8, a
<!DOCTYPE>
harus diumumkan.sumber
Saya baru saja menemukan solusi mudah untuk diri saya sendiri. Memiliki margin-top 15px
HTML
CSS
sumber
Hanya menggunakan css dan tidak memiliki masalah dengan konten yang tertutup dan tidak dapat diklik sebelumnya (intinya adalah pointer-events: none):
CSS
HTML
sumber
Taruh ini dengan gaya:
dan gunakan kelas ini dalam
div
tag terpisah sebelum tautan, contoh:atau gunakan kode php ini untuk tag tautan gema:
sumber
Saya tahu ini agak terlambat, tetapi saya menemukan sesuatu yang sangat penting untuk dimasukkan ke dalam kode Anda jika Anda menggunakan Scrollspy Bootstrap. ( http://getbootstrap.com/javascript/#scrollspy )
Ini membuatku gila selama berjam-jam.
Offset untuk mata-mata gulir HARUS cocok dengan window.scrollY atau Anda akan menjalankan risiko:
sumber
Berdasarkan solusi @Eric Olson cukup modifikasi sedikit untuk memasukkan elemen jangkar yang ingin saya tuju secara khusus
sumber
Saya hanya memiliki masalah yang sama. Saya memiliki nav posited pixed dan saya ingin angkor mulai di bawah nav. Solusi
window.addEventListener...
tidak berhasil untuk saya karena saya mengatur halaman saya menjadiscroll-behavior:smooth
jadi itu mengatur offset bukan gulir ke angkor. yangsetTimeout()
bekerja jika waktu yang anough untuk gulir sampai akhir tetapi masih tidak terlihat baik. jadi solusi saya adalah menambahkan div absolut yang ditempatkan di angkor, denganheight:[the height of the nav]
danbottom:100%
. dalam hal ini div ini berakhir di bagian atas elemen angkor, dan mulai dari posisi di mana Anda ingin menggulir angkor. sekarang yang saya lakukan hanyalah mengatur tautan angkor ke div absolut ini dan selesai :)sumber
saya menghadapi masalah serupa dan saya menyelesaikannya dengan menggunakan kode berikut
sumber
sumber