W CSS overflow:hidden
jest ustawiany na kontenerach nadrzędnych, aby umożliwić rozszerzanie się wraz z wysokością ich pływających dzieci.
Ale ma też inną interesującą funkcję w połączeniu z margin: auto
...
Jeśli POPRZEDNIE rodzeństwo jest elementem pływającym, w rzeczywistości pojawi się obok niego. Oznacza to, że jeśli rodzeństwo jest, float:left
to kontener z float:none overflow:hidden
pojawi się po prawej stronie rodzeństwa, bez nowej linii - tak jakby płynął w normalnym przepływie. Jeśli poprzednim rodzeństwem jest, float:right
kontener pojawi się po lewej stronie rodzeństwa. Zmiana rozmiaru tego kontenera pokaże dokładnie, że jest wyśrodkowany pomiędzy pływającymi elementami. Powiedzmy, że jeśli masz dwoje poprzedniego rodzeństwa, jedno float:left
drugie float:right
, pojemnik pojawi się pośrodku między nimi.
Więc oto problem ...
Jak zachować ten typ układu BEZ maskowania dzieci?
Wyszukiwanie w internecie daje mi sposoby na clear:both
powiększanie i rozszerzanie kontenera ... ale nie mogę znaleźć żadnego alternatywnego rozwiązania, aby utrzymać lewe / prawe wyśrodkowanie poprzedniego dziecka. Jeśli utworzysz kontener, overflow:visible
wówczas kontener nagle zignoruje przepływ układu elementów pływających i pojawi się warstwowo na wierzchu elementu pływającego.
Więc pytanie :
Muszę mieć kontener, overflow:hidden
żeby zachować układ ...
jak mogę to zrobić, żeby dzieci nie były zamaskowane? Potrzebuję ustawić dziecko bezwzględnie względem rodzica poza pojemnikiem.
LUB
W jaki overflow:visible
sposób mogę absolutnie ustawić dziecko względem rodzica poza kontenerem ... JESZCZE zachować przepływ typu float-like-layout-rodzeństwa?
overflow:hidden
w ogóle. Zastosowanie wyraźnego poprawki do nadrzędnego elementu div nie pozwala, aby wszystkie komponenty podrzędne były „zawarte” w tej samej wysokości co element nadrzędny.Żadna z opublikowanych odpowiedzi nie zadziałała dla mnie.
position: absolute
Jednak ustawienie elementu podrzędnego zadziałało.źródło
position: fixed
lub bezwzględnie ustawione względem czegoś poza rodzicem, co mavisibility: hidden
, będzie widoczne. Jednak często trzeba (chcieć) ustawić go względem elementu nadrzędnego, aby był bardziej odporny na zmiany kodu. Wtedy te rozwiązania nie są alternatywą.To stare pytanie, ale sam je spotkałem.
Mam pół-rozwiązania, które działają sytuacyjnie w przypadku poprzedniego pytania („Dzieci widoczne w przepełnieniu: ukryty rodzic”)
Jeśli nadrzędny element div nie musi być pozycją: względna, po prostu ustaw style potomne na visibility: visible.
Jeśli nadrzędny element DIV musi być pozycją: względną, jedynym możliwym sposobem pokazania dzieci jest pozycja: ustalona. To zadziałało na szczęście w mojej sytuacji, ale wyobrażam sobie, że nie zadziała w innych.
Oto kiepski przykład, po prostu opublikuj go w pliku HTML, aby go wyświetlić.
<div style="background: #ff00ff; overflow: hidden; width: 500px; height: 500px; position: relative;"> <div style="background: #ff0000;position: fixed; top: 10px; left: 10px;">asd <div style="background: #00ffff; width: 200px; overflow: visible; position: absolute; visibility: visible; clear:both; height: 1000px; top: 100px; left: 10px;"> a</div> </div> </div>
źródło
left
. Użyciemargin-left
zamiast tego przyniosłoby ten sam efekt, więc nie musiałem już używać pozycji względnej.W innych przypadkach, jeśli clearfix nie rozwiąże tego problemu, dodaj marginesy do niepływającego rodzeństwa, które jest / są takie same jak szerokość (y) pływającego rodzeństwa (ów).
źródło