Mam kilka pojemników, a ich dzieci są tylko bezwzględne / względnie ustawione. Jak ustawić wysokość pojemników, aby ich dzieci były w nich?
Oto kod:
HTML
<section id="foo">
<header>Foo</header>
<article>
<div class="one"></div>
<div class="two"></div>
</article>
</section>
<div style="clear:both">Clear won't do.</div>
<!-- I want to have a gap between sections here -->
<section id="bar">
<header>bar</header>
<article>
<div class="one"></div><div></div>
<div class="two"></div>
</article>
</section>
CSS
article {
position: relative;
}
.one {
position: absolute;
top: 10px;
left: 10px;
background: red;
width: 30px;
height: 30px;
}
.two {
position: absolute;
top: 10px;
right: 10px;
background: blue;
width: 30px;
height: 30px;
}
Oto jsfiddle. Chcę, aby tekst „słupka” był wyświetlany między 4 polami, a nie za nimi.
Jakieś łatwe poprawki?
Zauważ, że nie znam wzrostu tych dzieci i nie mogę ustawić wysokości: xxx dla kontenerów.
Odpowiedzi:
Jeśli rozumiem, co próbujesz zrobić poprawnie, to nie sądzę, aby było to możliwe w przypadku CSS, jednocześnie utrzymując dzieci w absolutnej pozycji.
Elementy pozycjonowane absolutnie są całkowicie usuwane z obiegu dokumentów, a tym samym ich wymiary nie mogą zmieniać wymiarów ich rodziców.
Jeśli naprawdę musiałbyś osiągnąć ten efekt, zachowując dzieci w niezmienionym stanie
position: absolute
, możesz to zrobić za pomocą JavaScript, znajdując wysokość absolutnie pozycjonowanych elementów potomnych po ich renderowaniu i używając tego do ustawienia wysokości rodzica.Alternatywnie, po prostu użyj
float: left
/float:right
i marginesów, aby uzyskać ten sam efekt pozycjonowania, zachowując elementy podrzędne w przepływie dokumentu, a następnie możesz użyćoverflow: hidden
na rodzicu (lub dowolnej innej techniki clearfix), aby zwiększyć jego wysokość do wysokości jego dzieci.źródło
Oto moje obejście.
W swoim przykładzie możesz dodać trzeci element z „tymi samymi stylami” elementów .one i .two, ale bez pozycji bezwzględnej i z widocznością ukrytą:
HTML
CSS
źródło
To późna odpowiedź, ale patrząc na kod źródłowy, zauważyłem, że gdy wideo jest w trybie pełnoekranowym, klasa „mejs-container-fullscreen” jest dodawana do elementu „mejs-container”. Dzięki temu możliwa jest zmiana stylizacji w oparciu o tę klasę.
Ponadto, jeśli chcesz, aby Twoje wideo MediaElement było płynne za pomocą CSS, poniżej znajduje się świetna sztuczka autorstwa Chrisa Coyiera: http://css-tricks.com/rundown-of-handling-f flexible-media/
Po prostu dodaj to do swojego CSS:
Mam nadzieję, że to pomoże.
źródło
Ten rodzaj problemu z układem można teraz rozwiązać za pomocą flexbox, unikając potrzeby znajomości wysokości lub układu sterowania z pozycjonowaniem bezwzględnym lub pływakami. Głównym pytaniem OP było to, jak sprawić, by rodzic zawierał dzieci o nieznanym wzroście i chcieli to zrobić w określonym układzie. Służy do tego ustawienie wysokości kontenera nadrzędnego na „fit-content”; użycie „display: flex” i „justify-content: space-between” tworzy układ sekcji / kolumn, który, jak sądzę, próbował utworzyć OP.
Zmodyfikowałem skrzypce OP: http://jsfiddle.net/taL4s9fj/
css-tricks na flexbox: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
źródło
Możesz to zrobić za pomocą siatki:
źródło
To kolejna późna odpowiedź, ale wymyśliłem dość prosty sposób na umieszczenie tekstu „słupka” między czterema kwadratami. Oto zmiany, które wprowadziłem; W sekcji paska umieściłem tekst „bar” w środku i znacznikach DIV.
W sekcji CSS utworzyłem klasę „bar”, która jest używana w znaczniku DIV powyżej. Po dodaniu tego tekst paska został wyśrodkowany między czterema kolorowymi blokami.
źródło