Jeśli na stronie HTML mam nagłówek nieprzewijający, przymocowany do góry, o określonej wysokości:
Czy istnieje sposób użycia zakotwiczenia adresu URL ( #fragment
części), aby przeglądarka przewinęła się do określonego miejsca na stronie, ale nadal szanowała wysokość stałego elementu bez pomocy JavaScript ?
http://foo.com/#bar
ŹLE (ale powszechne zachowanie): PRAWIDŁOWO: + --------------------------------- + + -------------- ------------------- + | BAR ///////////////////// nagłówek | | //////////////////////// header | + --------------------------------- + + -------------- ------------------- + | Oto reszta tekstu | | BAR | | ... | | | | ... | | Oto reszta tekstu | | ... | | ... | + --------------------------------- + + -------------- ------------------- +
.dislocate50px, #bar { padding: 50px 0 0; margin: -50px 0 0; -webkit-background-clip: content-box; background-clip: content-box; }
scroll-padding-top
: css-tricks.com/… Odpowiadająca odpowiedź: stackoverflow.com/a/56467997/247696Odpowiedzi:
Miałem ten sam problem. Rozwiązałem go, dodając klasę do elementu kotwiczącego o wysokości górnego paska jako wartości dopełnienia.
A potem po prostu css:
źródło
margin-top: -90px;
aby zlikwidować lukę utworzoną przez wypełnienie..anchor:target {padding-top: 90px;}
tak, że dodało to dopełnienie tylko wtedy, gdy użyli tagu kotwicy. W ten sposób nie zawsze jest mnóstwo dopełnienia, jeśli strona ładuje się u góry. Tylko wtedy, gdy ładuje określony punkt niżej na stronie.Jeśli nie możesz lub nie chcesz ustawić nowej klasy, dodaj
::before
pseudoelement o stałej wysokości do:target
pseudoklasy w CSS:Lub przewiń stronę względem
:target
jQuery:źródło
:target
było po prostu genialne!Używam tego podejścia:
Dodaje niewidoczny element przed każdym celem. Działa IE8 +.
Oto więcej rozwiązań: http://nicolasgallagher.com/jump-links-and-viewport-positioning/
źródło
Oficjalna przyjęta odpowiedź Bootstrap:
Kredyty
Łączyć
źródło
display: flex;
lubpadding-top
.<a name="my_link">{leave this empty}</a>
W takich przypadkach używaj dedykowanego elementu kotwiczącego (podobnego ).od: https://css-tricks.com/fixed-headers-on-page-links-and-overlapping-content-oh-my/
źródło
Najlepszym sposobem na rozwiązanie tego problemu jest (zamień 65 pikseli na ustaloną wysokość elementu):
Jeśli nie chcesz używać selektora docelowego , możesz to zrobić w ten sposób:
Uwaga: ten przykład nie zadziała, jeśli element docelowy ma kolor tła inny niż jego element nadrzędny. na przykład:
w tym przypadku zielony kolor elementu my-target nadpisze jego macierzysty czerwony element w rozmiarze 65 pikseli. Nie znalazłem żadnego czystego rozwiązania CSS do obsługi tego problemu, ale jeśli nie masz innego koloru tła, to rozwiązanie jest najlepsze.
źródło
Chociaż niektóre z proponowanych rozwiązań działają w przypadku fragmentarycznych linków (= linków skrótu) na tej samej stronie (np. Linku menu przewijanego w dół), stwierdziłem, że żadne z nich nie działało w bieżącym Chrome, gdy chcesz użyć fragmentów linków pochodzących z innych strony .
Tak więc wywołanie od podstaw www.mydomain.com/page.html#foo NIE zrównoważy celu w obecnym Chrome za pomocą żadnego z podanych rozwiązań CSS lub JS.
Istnieje również raport o błędach jQuery opisujący niektóre szczegóły problemu.
ROZWIĄZANIE
Jedyną dostępną do tej pory opcją, która naprawdę działa w Chrome, jest JavaScript, który nie jest wywoływany onDomReady, ale z opóźnieniem.
PODSUMOWANIE
Bez opóźnień JS rozwiązania prawdopodobnie będą działać w Firefox, IE, Safari, ale nie w Chrome.
źródło
Ponieważ specyfikacja CSS Scroll Snap wchodzi do gry, jest to możliwe z
scroll-margin-top
właściwością. Obecnie działa na Chrome i Operze (kwiecień 2019). Również Safari 11+ powinno to obsługiwać, ale nie udało mi się uruchomić go na Safari 11. Prawdopodobnie musimy poczekać, aż faceci to naprawią.Przykład Codepen
źródło
scroll-padding-top
iscroll-margin-top
?scroll-margin-top
w tym przypadku użycia niestety nie jest zaimplementowany w Safari 11-13: bugs.webkit.org/show_bug.cgi?id=189265scroll-snap-margin-top
: caniuse.com/#search=scroll-margin-topW przypadku Chrome / Safari / Firefox możesz dodać a
display: block
i użyć ujemnego marginesu, aby skompensować przesunięcie, na przykład:Zobacz przykład http://codepen.io/swed/pen/RrZBJo
źródło
Możesz to zrobić za pomocą jQuery:
źródło
Właśnie odkryłem inne czyste rozwiązanie CSS, które działało dla mnie jak urok!
Znalezione na tej stronie !
źródło
Możesz spróbować:
Ustaw górną wartość dopełniania na rzeczywistą wysokość nagłówka. Spowoduje to wprowadzenie niewielkiej dodatkowej przerwy w górnej części nagłówka, ale będzie widoczne tylko wtedy, gdy użytkownik wskoczy na kotwicę, a następnie przewinie w górę. Właśnie wymyśliłem to rozwiązanie dla mojej witryny, ale pokazuje tylko mały stały pasek u góry strony, nic zbyt wysokiego.
źródło
Mam go łatwo współpracować z CSS i HTML, używając wyżej wspomnianej metody „anchor: before”. Myślę, że działa najlepiej, ponieważ nie tworzy masywnego wypełnienia między twoimi divami.
Wydaje się, że nie działa dla pierwszego div na stronie, ale możesz temu przeciwdziałać, dodając dopełnianie do tego pierwszego diva.
Oto działające skrzypce: http://jsfiddle.net/FRpHE/24/
źródło
Mi to pasuje:
HTML LINK to Anchor:
Kotwica HTML:
CSS:
źródło
Korzystam z odpowiedzi @ Jpsy, ale ze względu na wydajność ustawiam timer tylko wtedy, gdy skrót znajduje się w adresie URL.
źródło
Miałem wiele problemów z wieloma odpowiedziami tutaj i gdzie indziej, ponieważ moje zakotwiczone zakładki były nagłówkami sekcji na stronie często zadawanych pytań, więc przesunięcie nagłówka nie pomogło, ponieważ reszta treści pozostanie tam, gdzie była. Więc pomyślałem, że opublikuję.
Skończyło się na kilku rozwiązaniach:
CSS:
Gdzie „120px” to ustalona wysokość nagłówka (może plus margines).
Link do zakładki HTML:
Kod HTML treści z zakładkami:
Zaletą tego rozwiązania jest to, że
span
element jest nie tylko ukryty, ale przede wszystkim jest zwinięty i nie usuwa zawartości.Nie mogę liczyć na duże uznanie za to rozwiązanie, ponieważ pochodzi ono z różnych zasobów, ale w mojej sytuacji najlepiej się sprawdzało.
Rzeczywisty wynik można zobaczyć tutaj .
źródło
<span>
z kotwicą w przęsle, wraz z dopełnieniem i marginesem działało dla mnie. Dziękujemy bardzo za poświęcenie czasu na przesłanie tej odpowiedzi, pomimo wieku wątku!Nie miałem szczęścia z powyższą odpowiedzią i ostatecznie skorzystałem z tego rozwiązania, które działało idealnie ...
Utwórz pusty zakres, w którym chcesz ustawić kotwicę.
I zastosuj następującą klasę:
To rozwiązanie będzie działać, nawet jeśli sekcje mają różne kolorowe tła! Znalazłem rozwiązanie pod tym linkiem.
źródło
Moim purystycznym umysłom wydaje się to nieco nieprzyzwoite, ale jako rozwiązanie dostępne tylko w css można dodać dopełnienie do aktywnego zakotwiczonego elementu za pomocą
:target
selektora:źródło
Odkryłem, że musiałem używać zarówno rozwiązań CSS firmy MutttenXd, jak i Badabam , ponieważ pierwszy nie działał w Chrome, a drugi w Firefox:
źródło
Sposób, w jaki uważam się za najczystszego, jest następujący:
źródło
Minimalnie inwazyjne podejście przy użyciu jQuery:
Połączyć:
Zadowolony:
Scenariusz:
Przypisując do linków klasę anchor-link, nie ma to wpływu na zachowanie innych linków (takich jak kontrolki akordeonu lub tabulatorów).
Pytanie nie chce javascript, ale inne popularne pytanie jest zamknięte z tego powodu i nie mogłem tam odpowiedzieć.
źródło
Potrzebowałem czegoś, co działa na linki przychodzące, linki na stronie ORAZ i może być celem JS, aby strona mogła reagować na zmiany wysokości nagłówka
HTML
CSS
z-index: -1
Pozwala linki w „obszaru dopełnienia” powyżej fragmentu docelowymi aby nadal być klikalne, jak komentował @MuttenXd na jego odpowiedźNie znalazłem jeszcze problemu w IE 11, Edge 15+, Chrome 38+, FF 52+ lub Safari 9.1+
źródło
Ten kod powinien załatwić sprawę. Zamień 45px na wysokość paska nagłówka.
EDYCJA: Jeśli korzystasz z jQuery jest opcją, również odniosłem sukces używając jQuery.localScroll z ustawioną wartością przesunięcia. Opcja offset jest częścią jQuery.scrollTo, na której zbudowano jQuery.localScroll. Demo jest dostępne tutaj: http://demos.flesler.com/jquery/scrollTo/ (drugie okno, pod „offsetem”)
źródło
Oto kompletne rozwiązanie jquery, które będzie działać w IE:
Załóżmy, że elementy paska nawigacji wyglądają mniej więcej tak:
Aby przesunąć przewijanie, możesz użyć następującego fragmentu jquery:
źródło
Wdrożenie przy użyciu
:before
działało świetnie, dopóki nie zdaliśmy sobie sprawy, że pseudoelement faktycznie zakrywa i blokuje zdarzenia wskaźnika znajdujące się w obszarze pseudoelementu. Używanie czegośpointer-events: none
na:before
kotwicy lub nawet bezpośrednio na kotwicy nie miało wpływu.Skończyło się na tym, że położenie kotwicy było absolutne, a następnie dostosowanie jego pozycji, aby było przesunięciem / wysokością ustalonego obszaru.
Przesunięcie kotwicy bez blokowania zdarzeń wskaźnika
Wartość tego polega na tym, że nie blokujemy żadnych elementów, które mogłyby mieścić się w tych 300px. Minusem jest to, że pobieranie pozycji tego elementu z Javascript musi uwzględniać to przesunięcie, więc wszelkie logiki muszą zostać dostosowane.
źródło
W ten sposób udało mi się w końcu przejść do właściwego miejsca po kliknięciu nawigacji. Dodałem moduł obsługi zdarzeń dla kliknięć nawigacji. Następnie możesz po prostu użyć „scrollBy”, aby przejść w górę o przesunięcie.
źródło
Utworzyłem div z kilkoma podziałami linii i podałem ten identyfikator, a następnie umieściłem poniżej kod, który chciałem pokazać. Link zabierze Cię następnie do miejsca nad obrazem, a nagłówek nie będzie już przeszkadzał:
Oczywiście możesz zmienić liczbę podziałów linii w zależności od potrzeb. Działa to dla mnie idealnie, nie jestem pewien, czy są jakieś problemy, wciąż uczę się HTML.
źródło
<br>
znaczników przed każdym nagłówkiem.Użyłem tego skryptu
źródło
Myślę, że to podejście jest bardziej przydatne:
<h2 id="bar" title="Bar">Bar</h2>
źródło
Możesz teraz używać przewijania marginesu , który jest dość powszechnie stosowany .
Po prostu dodaj następujący CSS do elementu, do którego chcesz przewinąć:
źródło
scroll-margin-top
został zasugerowany wcześniej w tym wątku