Załóżmy, że masz trochę stylu i znaczników:
ul
{
white-space: nowrap;
overflow-x: visible;
overflow-y: hidden;
/* added width so it would work in the snippet */
width: 100px;
}
li
{
display: inline-block;
}
<div>
<ul>
<li>1</li> <li>2</li> <li>3</li>
<li>4</li> <li>5</li> <li>6</li>
<li>7</li> <li>8</li> <li>9</li>
<li>1</li> <li>2</li> <li>3</li>
<li>4</li> <li>5</li> <li>6</li>
<li>7</li> <li>8</li> <li>9</li>
<li>1</li> <li>2</li> <li>3</li>
<li>4</li> <li>5</li> <li>6</li>
<li>7</li> <li>8</li> <li>9</li>
</ul>
</div>
Kiedy to obejrzysz. <ul>
Ma paska przewijania na dole chociaż mam określonego widocznych i ukrytych wartości przelewowym x / y.
(obserwowane w Chrome 11 i operze (?))
Domyślam się, że musi istnieć specyfikacja W3C lub coś takiego, ale przez całe życie nie mogę zrozumieć, dlaczego.
AKTUALIZACJA: - Znalazłem sposób na osiągnięcie tego samego wyniku poprzez dodanie kolejnego elementu owiniętego wokół ul
. Sprawdź to.
overflow-x hidden;
go ustawię , usuwa on przewijanie, ale ponieważ potrzebuję elementów li, aby ukryć ramkę na dole, aby uzyskać pożądany efekt przerywany. Nie rozumiem, dlaczegooverflow-x: visible
tworzy pasek przewijania. Nie powinno być afaik.overflow: hidden;
i dziecku wstawionym wokół<ul>
istotyoverflow: visible
.Odpowiedzi:
Po poważnych poszukiwaniach wydaje się, że znalazłem odpowiedź na moje pytanie:
z: http://www.brunildo.org/test/Overflowxy2.html
również specyfikacja W3C mówi:
Krótka wersja:
Jeśli używasz
visible
dla jednegooverflow-x
luboverflow-y
drugiego i dla czegoś innego niżvisible
dla drugiej,visible
wartość jest interpretowana jakoauto
.źródło
overflow-x:visible
czasieoverflow-y:hidden
bez hack rodzic / dziecko? Dość piętrowa, IMO.overflow-y: visible
. Boo CSS!kolejny tani hack, który wydaje się załatwić:
style="padding-bottom: 250px; margin-bottom: -250px;"
na elemencie, w którym odcina się pionowy przelew,250
reprezentując tyle pikseli, ile potrzeba do rozwijania itp.źródło
position: relative
lub używanie opakowań nie było możliwe, było to jedyne rozwiązanie, które działało, chociaż wymagało również dodawania wielu brzydkich marginesów do elementów potomnych wewnątrz elementu, który chciałem ustawić,overflow-x: hidden
aby zrekompensować hacky wyściółka. To mnie jednak uratowało, więc dzięki!Pierwotnie znalazłem sposób CSS na ominięcie tego podczas korzystania z wtyczki Cycle jQuery. Cykl używa JavaScript do ustawienia slajdu
overflow: hidden
, więc kiedy ustawiam moje zdjęcia,width: 100%
będą wyglądały na wycięte w pionie, więc zmusiłem je do widoczności!important
i unikania pokazywania animacji slajdów z pudełka, które ustawiłemoverflow: hidden
na div pojemnika ślizgać się. Mam nadzieję, że Ci się uda.AKTUALIZACJA - Nowe rozwiązanie:
Oryginalny problem -> http://jsfiddle.net/xMddf/1/ (Nawet jeśli
overflow-y: visible
go użyję, staje się „automatyczny”, a właściwie „przewijać”.)Nowe rozwiązanie -> http://jsfiddle.net/xMddf/2/ (Znalazłem obejście za pomocą otoki opakowania do zastosowania
overflow-x
ioverflow-y
do różnych elementów DOM, jak doradzał James Khoury w sprawie problemu łączeniavisible
ihidden
pojedynczego elementu DOM).źródło
overflow-x:visible;
ioverflow-y:hidden
. Nie na odwrót.overflow-x
i-y
: zaktualizowaną skrzypce .Zabrakło mi w tej kwestii, gdy próbuje zbudować stałe umieszczony w ramce z zarówno w pionie, można przewijać zawartość i zagnieżdżonych absolutny umieszczony dzieci mają być wyświetlane poza granice bocznym .
Moje podejście polegało na zastosowaniu osobno:
overflow: visible
nieruchomość do elementu bocznegooverflow-y: auto
właściwościom sidebar wewnętrzną owijkęSprawdź poniższy przykład lub internetowy codepen .
źródło
auto
zamiast zamiasthidden
.position
Użyłem tego
content+wrapper
podejścia ... ale zrobiłem coś innego niż wspomniano do tej pory: upewniłem się, że granice mojego opakowania NIE pokrywają się z granicami treści w kierunku, w którym chciałem być widoczny .Ważna uwaga: To było dość łatwe do uzyskania
content+wrapper, same-bounds
podejście do pracy na jednej przeglądarce lub inny w zależności od różnych kombinacjach cssposition
,overflow-*
itp ... ale nigdy nie może korzystać z tego podejścia, aby je wszystkie poprawne (Edge, Chrome, Safari. ..).Ale kiedy miałem coś takiego:
... wszystkie przeglądarki były zadowolone.
źródło
Istnieje teraz nowy sposób rozwiązania tego problemu - jeśli usuniesz pozycję: krewny z kontenera, który musi mieć widoczne przepełnienie-y, możesz ukryć przepełnienie-y i przelew-x i odwrotnie (mieć przepełnienie- x widoczny i przelew-ukryty, po prostu upewnij się, że kontener z właściwością visible nie jest odpowiednio ustawiony).
Zobacz ten post z CSS Tricks, aby uzyskać więcej informacji - zadziałało dla mnie: https://css-tricks.com/popping-hidden-overflow/
źródło