Mam stronę internetową z wyrównanym centralnie DIV. Teraz niektóre strony wymagają przewijania, niektóre nie. Kiedy przechodzę od jednego typu do drugiego, wygląd paska przewijania przesuwa stronę o kilka pikseli w bok. Czy jest jakiś sposób, aby tego uniknąć bez wyraźnego wyświetlania pasków przewijania na każdej stronie?
218
overflow-y: overlay
w tym wątku?overflow-y: overlay
Odpowiedzi:
przepełnienie-y: przewijanie jest poprawne, ale powinieneś go używać z tagiem html, a nie z treścią, bo w IE 7 pojawia się podwójny pasek przewijania
Tak więc poprawny css byłby:
źródło
Zawiń zawartość przewijalnego elementu w div i zastosuj
padding-left: calc(100vw - 100%);
.Sztuczka polega na tym, że
100vw
reprezentuje 100% rzutni, w tym pasek przewijania. Po odjęciu100%
, czyli dostępnej przestrzeni bez paska przewijania, kończy się szerokość paska przewijania lub0
jego brak. Utworzenie dopełnienia o tej szerokości po lewej stronie zasymuluje drugi pasek przewijania, przesuwając wyśrodkowaną treść z powrotem w prawo.Pamiętaj, że zadziała to tylko wtedy, gdy przewijalny element wykorzystuje całą szerokość strony, ale nie powinno to stanowić większego problemu, ponieważ istnieje tylko kilka innych przypadków, w których wyśrodkowałeś przewijaną zawartość.
źródło
100vw
i100%
mierzyłem różne rzeczy, więc nauczyłem się z tego czegoś pożytecznego!@media screen and (min-width: 800px) {...}
. W przypadkach, gdy treść będzie pasować do szerokości strony. Na przykład przy małych rozdzielczościach pojawi się niepotrzebna luka, przesuwająca treść w prawoMyślę, że nie. Ale stylizacji
body
zeoverflow: scroll
powinien robić. Wydaje się, że o tym wiesz.źródło
overflow-y: scroll
:)Z przewijaniem zawsze wyświetlanym, być może nie jest dobry dla układu.
Spróbuj ograniczyć szerokość ciała za pomocą css3
vw
to szerokość rzutni (zobacz ten link w celu wyjaśnienia)calc
oblicz w css334px
oznacza podwójną szerokość paska przewijania (zobacz to dla stałej lub to do obliczenia, jeśli nie ufasz ustalonym rozmiarom)źródło
padding-left: 34px;
aby równomiernie wyśrodkować stronę.Przykład . Kliknij przycisk „zmień minimalną wysokość”.
Za pomocą
calc(100vw - 100%)
możemy obliczyć szerokość paska przewijania (a jeśli nie zostanie wyświetlony, będzie wynosił 0). Pomysł: używając ujemnego marginesu z prawej strony, możemy zwiększyć szerokość<html>
do tej szerokości. Zobaczysz poziomy pasek przewijania - należy go ukryć za pomocąoverflow-x: hidden
.źródło
calc(100% - 100vw)
zamiast pomnożyć przez-1
?Nie wiem, czy to stary post, ale miałem ten sam problem i jeśli chcesz przewijać w pionie, tylko powinieneś spróbować
overflow-y:scroll
źródło
Jeśli zmieniasz rozmiar lub po załadowaniu niektórych danych dodajesz pasek przewijania, możesz spróbować wykonać, utworzyć klasę i zastosować tę klasę.
źródło
Rozwiązałem problem na jednej z moich stron internetowych, jawnie ustawiając szerokość ciała w javascript według rozmiaru okienka ekranu pomniejszonego o szerokość paska przewijania. Używam udokumentowanej tutaj funkcji opartej na jQuery , aby określić szerokość paska przewijania.
źródło
Rozwijanie odpowiedzi za pomocą tego:
Jeden z komentatorów zasugerował dodanie lewy dopełnienie również w celu utrzymania centrowania:
Ale wtedy rzeczy nie wyglądają poprawnie, jeśli treść jest szersza niż rzutnia. Aby to naprawić, możesz użyć zapytań o media, takich jak to:
Gdzie 1058px = szerokość treści + 17 * 2
Dzięki temu poziomy pasek przewijania obsługuje przepełnienie x i utrzymuje wyśrodkowaną treść w środku, gdy rzutnia jest wystarczająco szeroka, aby pomieścić zawartość o stałej szerokości
źródło
Poza odpowiedzią Rapti powinno to działać równie dobrze, ale dodaje więcej marginesu po prawej stronie
body
i ukrywa go zhtml
marginesem ujemnym , zamiast dodawać dodatkowe wypełnienie, które może potencjalnie wpłynąć na układ strony. W ten sposób nic się nie zmienia na rzeczywistej stronie (w większości przypadków), a kod nadal działa.źródło
overflow-x: hidden
i to naprawiło.Rozwiązanie @ kashesandr działało dla mnie, ale aby ukryć poziomy pasek przewijania, dodałem jeszcze jeden styl dla ciała. oto kompletne rozwiązanie:
CSS
JS
Tylko rozwiązanie JS (gdy 2. modal otwiera się od 1. modalu):
źródło
Próbowałem naprawić prawdopodobnie ten sam problem, który był spowodowany
.modal-open
zastosowaną klasą bootowania na Twitterzebody
. Rozwiązaniehtml {overflow-y: scroll}
nie pomaga. Jednym z możliwych rozwiązań jest dodanie{width: 100%; width: 100vw}
dohtml
elementu.źródło
html { width: 100vw; }
pracował dla mnieZwykle mam ten problem, ale najprostszym sposobem rozwiązania tego problemu jest (działa dla mnie):
na typ pliku CSS:
tak proste! :)
źródło
Rozwiązania opublikowane przy użyciu funkcji calc (100vw - 100%) są na dobrej drodze, ale jest z tym problem: na zawsze będziesz mieć margines po lewej stronie rozmiaru paska przewijania, nawet jeśli zmienisz rozmiar okna, aby zawartość wypełnia całą rzutnię.
Jeśli spróbujesz obejść ten problem za pomocą zapytania o media, będziesz miał niezręczny moment przyciągania, ponieważ margines nie będzie stopniowo zmniejszał się podczas zmiany rozmiaru okna.
Oto rozwiązanie, które obejdzie ten problem, a AFAIK nie ma wad:
Zamiast używać marginesu: auto do centrowania treści, użyj tego:
Zamień 500px na połowę maksymalnej szerokości treści (więc w tym przykładzie maksymalna szerokość treści to 1000px). Zawartość pozostanie wyśrodkowana, a margines będzie stopniowo zmniejszał się do końca, aż zawartość wypełni obszar ekranu.
Aby zatrzymać margines przed ujemnym, gdy rzutnia jest mniejsza niż maksymalna szerokość, po prostu dodaj zapytanie medialne:
Zrobione!
źródło
Jeśli szerokość tabeli się nie zmieni, możesz ustawić szerokość elementu (np. Tbody) zawierającego pasek przewijania> 100% (pozwalając na dodatkowe miejsce dla paska przewijania) i ustawić overflow-y na „nakładkę” (więc że pasek przewijania pozostaje stały i nie przesunie tabeli w lewo, gdy się pojawi. Ustaw także stałą wysokość elementu za pomocą paska przewijania, aby pasek przewijania pojawił się po przekroczeniu wysokości. Tak jak:
Uwaga: będziesz musiał ręcznie ustawić szerokość%, ponieważ% miejsca zajmowanego przez pasek przewijania będzie zależny od szerokości stołu (tj. Mniejsza szerokość stołu, więcej% wymagane do dopasowania paska przewijania, ponieważ jego rozmiar w pikselach jest stały )
Przykład tabeli dynamicznej:
źródło
Wystarczy ustawić szerokość elementu kontenera w ten sposób
Spowoduje to, że element ten zignoruje pasek przewijania i będzie działać z kolorem tła lub obrazami.
źródło
Użyłem trochę jquery do rozwiązania tego
źródło
źródło
W przeciwieństwie do przyjętej odpowiedzi, która sugeruje stały pasek przewijania w oknie przeglądarki, nawet jeśli zawartość nie przepełnia ekranu , wolałbym używać:
Wynika to z faktu, że wygląd paska przewijania ma większy sens, jeśli zawartość faktycznie się przepełnia .
Ma to większy sens niż to .
źródło