Scrollspy bootstrap, niezsynchronizowane podświetlanie linków z aktualnymi sekcjami

Scrollspy bootstrap, niezsynchronizowane podświetlanie linków z aktualnymi sekcjami
OD
  • Rejestracja:około 2 lata
  • Ostatnio:ponad rok
  • Postów:22
0

mam stronę w bootstrapie 5. gdy zjeżdżam do danej sekcji to podświetlenie w navbarze wskazuje nie tą sekcję, co trzeba.
kod:

Kopiuj
<!DOCTYPE html>
<html lang="PL">
<head>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.9.1/font/bootstrap-icons.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/hover.css/2.3.1/css/hover-min.css" rel="stylesheet"/>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<style>
html
{
scroll-behavior: smooth;
}
.herofull
{
background: linear-gradient(rgba(0, 0, 0, 0.193), rgba(0, 0, 0, 0.499)), url("https://i.ibb.co/fn7nD6D/image.png");
min-height: 100vh;
background-size: cover;
background-position: center;
display: flex;
font-weight:bold;
}
</style>
</head>
<body class="text-white bg-dark">
<nav class="navbar navbar-expand-lg bg-dark navbar-dark shadow-lg sticky-top">
<div class="container">
<a class="navbar-brand" href="">blogtemplate</a>
<button class="navbar-toggler shadow-none" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link" href="#stronaglowna">Strona główna</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#uslugi">Usługi</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#projekty">Projekty</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#zespol">Zespół</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#opinie">Opinie</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#blog">Blog</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#kontakt">Kontakt</a>
</li>
</ul>
</div>
</div>
</nav>
<div data-bs-spy="scroll">
<section class="herofull py-5 text-center justify-content-center align-items-center" id="stronaglowna">
<div class="container">
<h1>Strona główna</h1>
<p>Lorem<br><br><br><br>ipsum</p>
</div> 
</section>
<section class="text-center py-5" id="uslugi">
<div class="container">
<h1 class="pt-5">Usługi</h1>
<h2>lorem ipsum<br>lorem ipsum<br>lorem ipsum<br>lorem ipsum<br>lorem ipsum</h2>
</div>
</section>
<section class="text-center py-5" id="projekty">
<div class="container">
<h1 class="pt-4">Projekty</h1>
<h2>lorem ipsum<br>lorem ipsum<br>lorem ipsum<br>lorem ipsum<br>lorem ipsum</h2>
</div>
</section>
<section class="text-center py-5" id="zespol">
<div class="container">
<h1 class="pt-4">Zespół</h1>
<h2>lorem ipsum<br>lorem ipsum<br>lorem ipsum<br>lorem ipsum<br>lorem ipsum</h2>
</div>
</section>
<section class="text-center py-5" id="opinie">
<div class="container">
<h1 class="pt-4">Opinie</h1>
<h2>lorem ipsum<br>lorem ipsum<br>lorem ipsum<br>lorem ipsum<br>lorem ipsum</h2>
</div>
</section>
<section class="text-center py-5" id="blog">
<div class="container">
<h1 class="pt-4">Blog</h1>
<h2>lorem ipsum<br>lorem ipsum<br>lorem ipsum<br>lorem ipsum<br>lorem ipsum</h2>
</div>
</section>
<section class="text-center" id="kontakt">
<div class="container">
<h1>Kontakt</h1>
<h2>lorem ipsum<br>lorem ipsum<br>lorem ipsum<br>lorem ipsum<br>lorem ipsum</h2><br>
</div>
</section>
<footer class="bg-dark text-white shadow-sm py-2 text-center shadow-lg">
<div class="container pt-4">
<h1>!footer<br>ipsum<br>dolor</h1>
</div>
</footer>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

Uczę się tego frontendu.
Powoli się uczę, powoli.
Od tego uczenia trudnego
Raduje się serce i boli.
dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:16 minut
  • Lokalizacja:Rzeszów
1

Zanim zaczniesz cokolwiek przerabiać to zdefiniuj jasno, która to jest "ta" sekcja. Co chcesz osiągnąć w sytuacji, kiedy 3 sekcje mieszczą się na ekranie jedna pod drugą w całości zarówno przy przewijaniu w dół jak i przy przewijaniu do góry.

To, co robisz zawsze z jakiejś perspektywy "działa źle". No bo załóżmy na stronie masz widoczne na raz

Kopiuj
[projekty]
[zespół]
[opinie]

no i wydaje ci się, że chcesz, żeby

  • jak tylko sekcja pojawi się w kawałku na ekranie - to wtedy jest podświetlona w menu u góry. Tylko wtedy może być tak, że jednak na ekranie najbardziej widoczne są aktualnie projekty, a opinie to tylko kilka pikseli tytułu - czyli źle
  • no to może jak cała sekcja jest na ekranie to dopiero ją podświetlić? tylko wtedy masz akurat jedną długą sekcję (np. opinie), przeczytałeś ją w 80%, a ona nadal niepoświetlona, w dodatku problem, gdy kilka sekcji na raz w całości jest widoczne - czyli źle
  • no to może dopiero jak sekcja "dotknie" góry ekranu (człowiek czyta przecież od góry, więc najbardziej się by zgadzało podświetlenie z wzrokiem ludzkim)? Tylko wtedy jeżeli ostatnia sekcja jest krótka to nigdy się nie podświetli, bo nigdy nie dotknie góry ekranu (chyba, ze pod nią zrobisz mnóstwo pustej przestrzenii) - czyli nadal źle
  • tu zaczyna się kombinowanie - gdy 20, 40, 50% sekcji się pojawi na stronie to wtedy podświetlam - zaraz się okaże, że źle to wygląda dla przypadku X, (np. pierwsza sekcja jest krótka, druga dłuższa, w efekcie pierwsza nigdy nie zostaje podświetlona)
  • a potem dochodzi temat taki, że może i przy scrollowaniu w dół wyszło to "znośnie" to jednak przy scrollowaniu do góry znowu wygląda grubo "nie tak"

Ja zalecam porzucenie Ci tego pomysłu niestety. Mnóstwo razy to przerobiłem i zawsze klient niezadowolony i ty też będziesz niezadowolony.

Wyjątkiem jest sytuacja, kiedy masz pewność, że każda z sekcji ZAWSZE zajmuje przynajmniej cały ekran (aka. min-height: 100vh). Wtedy po wielu testach wyszło mi, źe najlepiej jest podświetlać sekcję, gdy ok 80% z niej jest widoczne.


OD
  • Rejestracja:około 2 lata
  • Ostatnio:ponad rok
  • Postów:22
0

co mogę użyć zamiast scrollspy?


Uczę się tego frontendu.
Powoli się uczę, powoli.
Od tego uczenia trudnego
Raduje się serce i boli.
edytowany 1x, ostatnio: dzek69
dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:16 minut
  • Lokalizacja:Rzeszów
0

A co jest nie tak ze scrollspy? Bo zmiana biblioteki nie pomoże jeżeli sam nie wiesz, co chcesz osiągnąć


OD
sam pisales ze jest nie tak, moje sekcje maja nie miec 80% height ekranu tylko o wiele mniej. co wiec mam uzyc zeby dzialalo poprawnie?
dzek69
Ale to nie biblioteka jest problemem tylko Twoja nieświadomość co w zasadzie chcesz uzyskać. Z mojej strony polecam nie używać tego efektu wcale, jeżeli sekcje nie zajmują przynajmniej całego ekranu na wysokość - inaczej zawsze będzie źle, niezależnie od biblioteki, bo oczekujesz rzeczy fizycznie niemożliwych.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)