Faire absolue positionné div développez div parent hauteur
Comme vous pouvez le voir dans le CSS ci-dessous, je veux enfant2 de se positionner avant de l'enfant1. C'est parce que le site que je suis en train de développer devrait également fonctionner sur des appareils mobiles, sur lequel l'enfant2 doit être en bas, car il contient de la navigation qui je veux ci-dessous le contenu sur les appareils mobiles. - Pourquoi pas 2 masterpages? C'est la seule 2 divs qui sont repositionnés dans l'ensemble de l'HTML, donc 2 masterpages pour ce changement mineur est inutile.
HTML:
<div id="parent">
<div class="child1"></div>
<div class="child2"></div>
</div>
CSS:
parent { position: relative; width: 100%; }
child1 { width: auto; margin-left: 160px; }
child2 { width: 145px; position: absolute; top: 0px; bottom: 0px; }
enfant2 dynamique de la hauteur, que les différents sous-sites, pourrait avoir plus ou moins des éléments de navigation.
Je sais que les éléments en position absolue sont retirés de la circulation, donc ignorés par d'autres éléments.
J'ai essayé de réglage overflow:hidden;
sur le div parent, mais cela n'aide pas, ni ne le clearfix.
Mon dernier recours sera javascript pour repositionner les deux divs en conséquence, mais pour l'instant je vais essayer et voir si il existe un non-javascript moyen de le faire.
- montrez-nous une démonstration à l'jsfiddle.net
- Je ne suis pas sûr à 100% mais je pense que vous aurez probablement aller pour un JS solution qui fonctionne à la hauteur de l'enfant2 et se déplace à l'enfant1 en conséquence.
- Cela peut être fait par le réglage de la position du parent à parent et l'enfant à l'absolu.
- Voir ce Solution peut-être que cela peut vous aider.
Vous devez vous connecter pour publier un commentaire.
Vous répondu à la question par vous-même: "je sais que les éléments en position absolue sont retirés de la circulation, donc ignorés par d'autres éléments." Si vous ne pouvez pas définir les parents hauteur en fonction d'un élément en position absolue.
Vous utiliser hauteurs fixes ou vous avez besoin d'impliquer JS.
Bien que l'étirement des éléments avec
position: absolute
n'est pas possible, il y a souvent des solutions vous permettant d'éviter le positionnement absolu, tout en obtenant le même effet. Regardez ce violon qui résout le problème dans votre cas particulier, http://jsfiddle.net/gS9q7/Le truc, c'est à l'inverse de l'élément de commande flottant à la fois des éléments, la première à droite, deuxième à gauche, de sorte que la seconde apparaît en premier.
Enfin, ajouter une clearfix pour le parent et vous avez terminé (voir la violon pour l'ensemble de la solution).
Généralement, tant que l'élément à la position absolue est placée au dessus de l'élément parent, les chances sont bonnes que vous trouver une solution de contournement par l'élément flottant.
Feeela est droit mais vous pouvez obtenir un parent
div
contractant/de l'expansion à un élément d'enfant si vous inversez votrediv
positionnement comme ceci:Cela devrait fonctionner pour vous.
Il y a un moyen simple de résoudre ce problème.
Vous avez juste à copier le contenu de l'enfant1 et enfant2 relative des divs avec display:none dans le div parent. Dire child1_1 et child2_2. Mettre child2_2 sur le dessus et child1_1 au fond.
Lorsque votre jquery (ou autre) appelle l'absolu div, il suffit de régler la fonction relative div (child1_1 ou child2_2) avec display:block ET visibility:hidden. Le parent de l'enfant sera toujours invisible, mais faire de la mère div supérieur.
J'ai eu un problème similaire.
Pour résoudre ce (au lieu de calculer l'iframe de la hauteur en utilisant le corps, un document ou une fenêtre) j'ai créé une div qui enveloppe l'ensemble du contenu de la page (un div avec un id="page" par exemple) et ensuite, j'ai utilisé sa hauteur.
Il y a une très simple hack qui résout ce problème
Voici un codesandbox qui illustre la solution: https://codesandbox.io/s/00w06z1n5l
HTML
CSS
vous pouvez jouer avec le positionnement du bloc div affecter où l'enfant se positionne.
Voici un extrait:
CSS:
HTML:
Avec JavaScript, vous avez juste besoin de récupérer la hauteur de votre
static position
élément enfant.child1
à l'aide de la getComputedStyle() méthode définissez ensuite récupérer la valeur que l'padding-top
pour ce même enfant, à l'aide de la HTMLElement.style propriété.Vérifier et exécuter les suivantes Extrait de Code pour un exemple pratique de ce que j'ai décrit ci-dessus:
JS:
CSS:
HTML:
Je suis venu avec une autre solution, je n'ai pas l'amour, mais fait le travail.
Fondamentalement dupliquer les éléments enfants de telle manière que les doublons ne sont pas visibles.
CSS:
Si ces éléments enfants contiennent peu de balisage, alors l'impact sera faible.
Voici le JS exemple:
---------- jQuery JS exemple--------------------
Il y a une meilleure façon de le faire maintenant. Vous pouvez utiliser le bas de la propriété.
Ceci est très similaire à ce que @ChrisC suggéré. Il n'est pas absolue positionné élément, mais relatif. Peut-être pourrait travailler pour vous
Et votre css comme ceci:
https://jsfiddle.net/royriojas/dndjwa6t/
Également envisager l'approche suivante:
CSS:
Aussi depuis que vous essayez de repositionner les divs envisager de grille css
Absolue vues se positionner contre l'ancêtre le plus proche qui n'est pas positionné de manière statique (
position: static
), donc si vous voulez une vision absolue positionné contre un parent, définir le parentposition
àrelative
et de l'enfant àposition
àabsolute
Essayez cela, il a travaillé pour moi
Il va mettre l'enfant la hauteur de parent hauteur