Nie jestem pewien, jak najlepiej zadać / wyszukać to pytanie:
Kliknięcie linku zakotwiczenia przenosi Cię do tej sekcji strony, w której obszar linków znajduje się teraz na BARDZO NA GÓRZE strony. Chciałbym, aby link do zakotwiczenia odsyłał mnie do tej części strony, ale chciałbym mieć trochę miejsca na górze. Tak jak w przypadku, nie chcę, aby wysyłał mnie do połączonej części z tym na BARDZO TOP, chciałbym tam około 100 pikseli.
Czy to ma sens? czy to możliwe?
Edytowano, aby pokazać kod - to tylko tag kotwicy:
<a href="#anchor">Click me!</a>
<p id="anchor">I should be 100px below where I currently am!</p>
javascript
html
css
anchor
damon
źródło
źródło
Odpowiedzi:
Pozwoli to przeglądarce wykonać za nas pracę polegającą na skakaniu do kotwicy, a następnie użyjemy tej pozycji do przesunięcia.
EDYCJA 1:
Jak wskazał @erb, działa to tylko wtedy, gdy jesteś na stronie, podczas gdy hash jest zmieniany. Wpisanie strony z
#something
już w adresie URL nie działa z powyższym kodem. Oto inna wersja, która sobie z tym poradzi:UWAGA: Aby użyć jQuery, możesz po prostu wymienić
window.addEventListener
się$(window).on
w przykładach. Dzięki @Neon.EDYCJA 2:
Jak wskazało kilka osób, powyższe nie powiedzie się, jeśli klikniesz to samo łącze zakotwiczenia dwa lub więcej razy z rzędu, ponieważ nie ma
hashchange
zdarzenia wymuszającego przesunięcie.To rozwiązanie jest bardzo nieznacznie zmodyfikowaną wersją sugestii @Mave i dla uproszczenia wykorzystuje selektory jQuery
JSFiddle dla tego przykładu jest tutaj
źródło
example.com/#anchor
odexample.com/about/
.$('a[href^="#"]').on('click', function() { offsetAnchor(); });
. W ten sposób, jeślihref
się za
elementu zaczyna się od#
, wywołać tę samą funkcję.$(window).on("hashchange",
zwindow.addEventListener("hashchange",
Pracując tylko z css, możesz dodać dopełnienie do zakotwiczonego elementu (jak w rozwiązaniu powyżej) Aby uniknąć niepotrzebnych białych znaków, możesz dodać ujemny margines o tej samej wysokości:
Nie jestem pewien, czy to w każdym przypadku najlepsze rozwiązanie, ale dla mnie działa dobrze.
źródło
position: relative
właściwości css. A więc byłoby takposition: relative; top: -50px;
Jeszcze lepsze rozwiązanie:
Wystarczy umieścić
<a>
znacznik z pozycjonowaniem bezwzględnym wewnątrz względnie położonego obiektu.Działa podczas wchodzenia na stronę lub poprzez zmianę skrótu na stronie.
źródło
href="#anchor"
w nim wskazywała tam, zamiast wskazywać<p>
bezpośrednio na element. Ale jedno ostrzeżenie: używajid
zamiastname
HTML5, zobacz: stackoverflow.com/questions/484719/html-anchors-with-name-or-idOto odpowiedź w 2020 roku:
Ponieważ jest szeroko obsługiwany !
źródło
Najlepsze rozwiązanie
źródło
To zadziała bez jQuery i podczas ładowania strony.
źródło
Aby utworzyć link do elementu, a następnie „umieścić” ten element w dowolnej odległości od góry strony, używając czystego CSS, musisz użyć
padding-top
, w ten sposób element nadal jest umieszczony u góry okna, ale wydaje się być w widoczny sposób umieszczony w pewnej odległości od górnej części okienka widoku, na przykład:CSS:
Demo JS Fiddle .
Aby użyć prostego podejścia JavaScript:
Demo JS Fiddle .
źródło
To powinno działać:
Po prostu zmień .top-49 na taki, który pasuje do twojego linku kotwicy.
źródło
Jeśli używasz jawnych nazw kotwic, takich jak,
następnie w css możesz po prostu ustawić
Będzie to działać, o ile tagi kotwicy HREF nie określają również atrybutu NAME
źródło
Odpowiedź Erica jest świetna, ale naprawdę nie potrzebujesz tego czasu. Jeśli używasz jQuery, możesz po prostu poczekać, aż strona się załaduje. Proponuję więc zmienić kod na:
To również pozwala nam pozbyć się tego arbitralnego czynnika.
źródło
wypróbuj ten kod, ma już płynną animację po kliknięciu linku.
źródło
Najłatwiejsze rozwiązanie:
CSS
HTML
źródło
Wariant rozwiązania Thomasa: selektory elementu CSS > elementu mogą być przydatne tutaj:
CSS
HTML
Kliknięcie linku przesunie pozycję przewijania do 100px powyżej miejsca, w którym znajduje się element z klasą
paddedAnchor
.Obsługiwane w przeglądarkach innych niż IE oraz w IE od wersji 9. Aby
<!DOCTYPE>
zapewnić obsługę IE 7 i 8, należy zadeklarować a.źródło
Właśnie znalazłem dla siebie łatwe rozwiązanie. Miał górny margines 15 pikseli
HTML
CSS
źródło
Używając tylko css i nie mając wcześniej problemów z zakrytą i nieklikowalną zawartością (chodzi o to pointer-events: none):
CSS
HTML
źródło
Umieść to w stylu:
i użyj tej klasy w osobnym
div
tagu przed linkami, przykład:lub użyj tego kodu php dla tagu linku echo:
źródło
Wiem, że jest trochę za późno, ale znalazłem coś bardzo ważnego do umieszczenia w kodzie, jeśli używasz Scrollspy Bootstrap. ( http://getbootstrap.com/javascript/#scrollspy )
To doprowadzało mnie do szału na wiele godzin.
Przesunięcie dla szpiega przewijania MUSI odpowiadać wartości window.scrollY, bo inaczej ryzykujesz:
źródło
Opierając się na rozwiązaniu @Eric Olson , po prostu zmodyfikuj trochę, aby uwzględnić element kotwicy, który chcę konkretnie przejść
źródło
Po prostu mam ten sam problem. Mam piksele z nawigacją i chcę, aby angkor zaczął działać pod nawigacją. Rozwiązanie
window.addEventListener...
nie działa dla mnie, ponieważ ustawiłem moją stronęscroll-behavior:smooth
tak, aby ustawić przesunięcie zamiast przewinąć do angkor.setTimeout()
pracy, jeśli czas jest anough do przewijania do końca, ale to wciąż nie wygląda dobrze. więc moim rozwiązaniem było dodanie postawionego absolutnego div w angkor, zheight:[the height of the nav]
ibottom:100%
. w tym przypadku ten element div kończył się u góry elementu angkor i zaczynał w miejscu, w którym chcesz przewinąć angkor. teraz wszystko, co robię, to ustawiam link angkor do tego absolutnego div i robię wszystko :)źródło
napotkałem podobny problem i rozwiązałem go za pomocą następującego kodu
źródło
źródło