Jika saya memiliki tajuk non-gulir di halaman HTML, perbaiki ke atas, dengan ketinggian yang ditentukan:
Apakah ada cara untuk menggunakan jangkar URL ( #fragment
bagian) untuk membuat browser gulir ke titik tertentu di halaman, tetapi tetap menghormati ketinggian elemen tetap tanpa bantuan JavaScript ?
http://foo.com/#bar
SALAH (tetapi perilaku umum): BENAR: + --------------------------------- + + -------------- ------------------- + | BAR ///////////////////// header | | ////////////////////////// header | + --------------------------------- + + -------------- ------------------- + | Ini adalah sisa dari Teks | | BAR | | ... | | | | ... | | Ini adalah sisa dari Teks | | ... | | ... | + --------------------------------- + + -------------- ------------------- +
.dislocate50px, #bar { padding: 50px 0 0; margin: -50px 0 0; -webkit-background-clip: content-box; background-clip: content-box; }
scroll-padding-top
sini: css-tricks.com/... Jawaban yang sesuai: stackoverflow.com/a/56467997/247696Jawaban:
Saya memiliki masalah yang sama. Saya memecahkannya dengan menambahkan kelas ke elemen jangkar dengan tinggi topbar sebagai nilai padding-top.
Dan kemudian css:
sumber
margin-top: -90px;
untuk mengimbangi celah yang dibuat oleh bantalan..anchor:target {padding-top: 90px;}
sehingga hanya menambahkan padding ketika mereka menggunakan tag anchor. Dengan cara ini tidak selalu ada banyak padding jika halaman memuat di atas. Hanya ketika memuat titik tertentu lebih rendah pada halaman.Jika Anda tidak bisa atau tidak ingin mengatur kelas baru, tambahkan
::before
elemen pseudo- tinggi-tetap ke kelas:target
semu di CSS:Atau gulir halaman relatif ke
:target
dengan jQuery:sumber
:target
hanya brilian!Saya menggunakan pendekatan ini:
Itu menambahkan elemen tak terlihat sebelum setiap target. Ini berfungsi IE8 +.
Berikut adalah solusi lainnya: http://nicolasgallagher.com/jump-links-and-viewport-positioning/
sumber
Jawaban Resmi Bootstrap Diadopsi:
Kredit
Menggabungkan
sumber
display: flex;
ataupadding-top
. Jangan gunakan elemen jangkar khusus (seperti<a name="my_link">{leave this empty}</a>
) dalam kasus tersebut.dari: https://css-tricks.com/fixed-headers-on-page-links-and-overlapping-content-oh-my/
sumber
Cara terbaik yang saya temukan untuk menangani masalah ini adalah (ganti 65px dengan tinggi elemen tetap Anda):
Jika Anda tidak suka menggunakan pemilih target, Anda juga dapat melakukannya dengan cara ini:
Catatan: contoh ini tidak akan berfungsi jika elemen target memiliki warna latar belakang yang berbeda dari orang tuanya. sebagai contoh:
dalam hal ini warna hijau elemen target saya akan menimpa elemen merah induknya di 65px. Saya tidak menemukan solusi CSS murni untuk menangani masalah ini tetapi jika Anda tidak memiliki warna latar belakang yang lain, solusi ini adalah yang terbaik.
sumber
Sementara beberapa solusi yang diusulkan bekerja untuk tautan fragmen (= tautan hash) di halaman yang sama (seperti tautan menu yang menggulir ke bawah), saya menemukan bahwa tidak ada yang bekerja di Chrome saat ini ketika Anda ingin menggunakan tautan fragmen yang masuk dari yang lain halaman .
Jadi menelepon www.mydomain.com/page.html#foo dari awal TIDAK akan mengimbangi target Anda di Chrome saat ini dengan salah satu dari solusi CSS atau solusi JS yang diberikan.
Ada juga laporan bug jQuery menjelaskan beberapa detail masalah.
LARUTAN
Satu-satunya opsi yang saya temukan sejauh ini yang benar-benar berfungsi di Chrome adalah JavaScript yang tidak dipanggil onDomReady tetapi dengan penundaan.
RINGKASAN
Tanpa JS penundaan solusi mungkin akan berfungsi di Firefox, IE, Safari, tetapi tidak di Chrome.
sumber
Saat spec CSS Scroll Snap masuk ke dalam game, hal ini mudah dilakukan
scroll-margin-top
properti . Saat ini berjalan di Chrome dan Opera (April 2019). Safari 11+ juga harus mendukung ini, tetapi saya tidak dapat menjalankannya di Safari 11. Mungkin kita harus menunggu orang untuk memperbaikinya di sana.Contoh codepen
sumber
scroll-padding-top
danscroll-margin-top
?scroll-margin-top
untuk kasus penggunaan ini sayangnya tidak diterapkan di Safari 11-13: bugs.webkit.org/show_bug.cgi?id=189265scroll-snap-margin-top
: caniuse.com/#search=scroll-margin-topUntuk Chrome / Safari / Firefox Anda bisa menambahkan
display: block
dan menggunakan margin negatif untuk mengkompensasi offset, seperti:Lihat contoh http://codepen.io/swed/pen/RrZBJo
sumber
Anda dapat melakukan ini dengan jQuery:
sumber
Baru saja menemukan solusi CSS murni lain yang berfungsi seperti pesona bagi saya!
Ditemukan di situs ini !
sumber
Anda bisa mencoba ini:
Setel nilai padding atas ke tinggi aktual header Anda. Ini akan menimbulkan sedikit celah ekstra di bagian atas tajuk Anda, tetapi itu hanya akan terlihat ketika pengguna melompat ke jangkar dan kemudian gulir ke atas. Saya telah membuat solusi untuk situs saya sekarang, tetapi hanya menampilkan bilah tetap kecil di bagian atas halaman, tidak ada yang terlalu tinggi.
sumber
Saya sudah membuatnya bekerja dengan mudah dengan CSS dan HTML, menggunakan metode "jangkar: sebelum" yang disebutkan di atas. Saya pikir itu yang terbaik, karena tidak membuat bantalan besar antara divs Anda.
Tampaknya tidak berfungsi untuk div pertama di halaman, tetapi Anda bisa mengatasinya dengan menambahkan padding ke div pertama.
Ini biola yang berfungsi: http://jsfiddle.net/FRpHE/24/
sumber
Ini bekerja untuk saya:
LINK HTML ke Anchor:
Anchor HTML:
CSS:
sumber
Saya menggunakan jawaban Jpsy, tetapi untuk alasan kinerja saya hanya mengatur timer jika hash ada di URL.
sumber
Saya punya banyak masalah dengan banyak jawaban di sini dan di tempat lain karena jangkar saya yang dibookmark adalah header bagian di halaman FAQ, jadi mengimbangi header tidak membantu karena konten lainnya hanya akan tetap berada di tempatnya. Jadi saya pikir saya akan memposting.
Apa yang akhirnya saya lakukan adalah gabungan dari beberapa solusi:
CSS:
Di mana "120px" adalah tinggi header tetap Anda (mungkin ditambah margin).
HTML tautan bookmark:
HTML konten yang di-bookmark:
Hal yang baik tentang solusi ini adalah bahwa
span
elemen tersebut tidak hanya disembunyikan, pada dasarnya runtuh dan tidak konten Anda.Saya tidak dapat mengambil banyak pujian untuk solusi ini karena berasal dari berbagai sumber daya yang berbeda, tetapi ini bekerja paling baik untuk saya dalam situasi saya.
Anda dapat melihat hasil aktual di sini .
sumber
<span>
dengan jangkar dalam rentang, bersama dengan menambahkan padding dan margin bekerja untuk saya. Terima kasih banyak telah meluangkan waktu untuk mengirimkan jawaban ini terlepas dari usia utasnya!Saya tidak beruntung dengan jawaban yang tercantum di atas dan akhirnya menggunakan solusi ini yang bekerja dengan sempurna ...
Buat rentang kosong tempat Anda ingin mengatur jangkar.
Dan terapkan kelas berikut:
Solusi ini akan berfungsi bahkan jika bagian-bagian memiliki latar belakang berwarna yang berbeda! Saya menemukan solusinya di tautan ini.
sumber
Rasanya agak gila di pikiran saya, tetapi sebagai solusi css saja Anda dapat menambahkan padding ke elemen berlabuh aktif menggunakan
:target
pemilih:sumber
Saya menemukan saya harus menggunakan kedua MutttenXd 's dan Badabam ' solusi CSS s bersama-sama, sebagai yang pertama tidak bekerja di Chrome dan yang kedua tidak bekerja di Firefox:
sumber
Cara saya menemukan menjadi terbersih adalah yang berikut:
sumber
Pendekatan intrusif minimal menggunakan jQuery:
Tautan:
Kandungan:
Naskah:
Dengan menetapkan kelas tautan-jangkar ke tautan, perilaku tautan lain (seperti akordeon atau kontrol tab) tidak terpengaruh.
Pertanyaannya tidak ingin javascript tetapi pertanyaan lain yang lebih populer ditutup karena yang ini dan saya tidak bisa menjawabnya.
sumber
Saya membutuhkan sesuatu yang berfungsi untuk tautan masuk, tautan di halaman, DAN yang dapat ditargetkan oleh JS sehingga laman dapat menanggapi perubahan ketinggian header.
HTML
CSS
Itu
z-index: -1
memungkinkan link di 'daerah bantalan' di atas sebuah fragmen-target yang masih dapat diklik, seperti berkomentar oleh @MuttenXd pada jawabannyaSaya belum menemukan masalah di IE 11, Edge 15+, Chrome 38+, FF 52+, atau Safari 9.1+
sumber
Kode ini harus melakukan trik. Tukar 45px untuk ketinggian bilah header Anda.
EDIT: Jika menggunakan jQuery adalah sebuah opsi, saya juga telah berhasil menggunakan jQuery.localScroll dengan set nilai offset. Opsi offset adalah bagian dari jQuery.scrollTo, yang menjadi dasar jQuery.localScroll. Demo tersedia di sini: http://demos.flesler.com/jquery/scrollTo/ (jendela kedua, di bawah 'offset')
sumber
Berikut ini adalah solusi jquery lengkap yang akan bekerja di IE:
Misalkan elemen bilah navigasi adalah seperti ini:
Anda dapat menggunakan cuplikan jquery berikut untuk mengimbangi gulir:
sumber
Diimplementasikan menggunakan
:before
berfungsi dengan baik sampai kami menyadari bahwa elemen pseudo sebenarnya menutupi dan memblokir peristiwa pointer yang berada di dalam area elemen pseudo. Menggunakan sesuatu sepertipointer-events: none
pada:before
atau bahkan langsung pada jangkar tidak berpengaruh.Apa yang akhirnya kami lakukan adalah membuat posisi jangkar menjadi absolut dan kemudian menyesuaikan posisinya menjadi offset / ketinggian area tetap.
Jangkar Offset tanpa Peristiwa Blocker Pointer
Nilai dengan ini adalah bahwa kami tidak memblokir elemen apa pun yang mungkin termasuk dalam 300px tersebut. The downside adalah bahwa mengambil posisi elemen itu dari Javascript perlu memperhitungkan yang mengimbangi sehingga setiap logika harus disesuaikan.
sumber
Ini adalah bagaimana saya mendapatkannya untuk akhirnya pergi ke tempat yang tepat ketika Anda mengklik navigasi. Saya menambahkan pengendali acara untuk klik navigasi. Kemudian Anda bisa menggunakan "scrollBy" untuk naik pada offset.
sumber
Saya membuat div dengan beberapa jeda baris dan memberikan id itu, saya kemudian meletakkan kode yang ingin saya perlihatkan di bawahnya. Tautan kemudian akan membawa Anda ke ruang di atas gambar dan tajuk tidak akan lagi menghalangi:
Tentu saja, Anda dapat mengubah jumlah jeda baris sesuai dengan kebutuhan Anda. Ini berfungsi dengan baik untuk saya, tidak yakin apakah ada masalah, saya masih belajar HTML.
sumber
<br>
tag sebelum setiap pos.Gunakan skrip ini
sumber
Saya pikir pendekatan ini lebih bermanfaat:
<h2 id="bar" title="Bar">Bar</h2>
sumber
Anda sekarang dapat menggunakan scroll-margin-top , yang cukup banyak diadopsi .
Cukup tambahkan CSS berikut ke elemen yang ingin Anda gulir:
sumber
scroll-margin-top
telah disarankan sebelumnya di utas ini