J'ai quelques conteneurs et leurs enfants ne sont que positionnés de manière absolue / relative. Comment régler la hauteur des conteneurs pour que leurs enfants soient à l'intérieur?
Voici le code:
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;
}
Voici un jsfiddle. Je veux que le texte "barre" apparaisse entre 4 carrés, pas derrière eux.
Des solutions faciles?
Notez que je ne connais pas la taille de ces enfants et que je ne peux pas définir la hauteur: xxx pour les conteneurs.
Réponses:
Si je comprends bien ce que vous essayez de faire, alors je ne pense pas que ce soit possible avec CSS tout en gardant les enfants parfaitement positionnés.
Les éléments positionnés de manière absolue sont complètement supprimés du flux de documents et leurs dimensions ne peuvent donc pas modifier les dimensions de leurs parents.
Si vous deviez vraiment obtenir cet effet tout en conservant les enfants tels
position: absolute
quels, vous pouvez le faire avec JavaScript en recherchant la hauteur des enfants positionnés de manière absolue après leur rendu, et en l'utilisant pour définir la hauteur du parent.Vous pouvez également utiliser simplement
float: left
/float:right
et les marges pour obtenir le même effet de positionnement tout en gardant les enfants dans le flux de documents, vous pouvez ensuite utiliseroverflow: hidden
sur le parent (ou toute autre technique clearfix) pour que sa hauteur s'étende à celle de ses enfants.la source
Voici ma solution de contournement,
dans votre exemple, vous pouvez ajouter un troisième élément avec les "mêmes styles" d'éléments .one & .two, mais sans la position absolue et avec une visibilité masquée:
HTML
CSS
la source
C'est une réponse tardive, mais en regardant le code source, j'ai remarqué que lorsque la vidéo est en plein écran, la classe "mejs-container-fullscreen" est ajoutée à l'élément "mejs-container". Il est ainsi possible de changer le style en fonction de cette classe.
Aussi, si vous souhaitez rendre votre vidéo MediaElement fluide en utilisant CSS, voici une excellente astuce de Chris Coyier: http://css-tricks.com/rundown-of-handling-flexible-media/
Ajoutez simplement ceci à votre CSS:
J'espère que cela aide.
la source
Ce type de problème de mise en page peut être résolu avec flexbox maintenant, évitant ainsi le besoin de connaître les hauteurs ou de contrôler la mise en page avec un positionnement absolu ou des flotteurs. La principale question d'OP était de savoir comment amener un parent à contenir des enfants de taille inconnue, et ils voulaient le faire dans une certaine disposition. Définir la hauteur du conteneur parent sur "fit-content" le fait; en utilisant "display: flex" et "justify-content: space-between" produit la disposition des sections / colonnes. Je pense que l'OP essayait de créer.
J'ai modifié le violon de l'OP: http://jsfiddle.net/taL4s9fj/
css-tricks sur flexbox: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
la source
Ceci est une autre réponse tardive, mais j'ai trouvé un moyen assez simple de placer le texte "barre" entre les quatre carrés. Voici les modifications que j'ai apportées; Dans la section bar, j'ai enveloppé le texte "bar" dans un centre et des balises div.
Et dans la section CSS, j'ai créé une classe "bar" qui est utilisée dans la balise div ci-dessus. Après avoir ajouté cela, le texte de la barre était centré entre les quatre blocs colorés.
la source