J'essaie d'insérer un div dans n'importe quelle partie du corps et de le rendre position: absolute
relatif au document entier et non à un élément parent qui a un position: relative
.
J'essaie d'insérer un div dans n'importe quelle partie du corps et de le rendre position: absolute
relatif au document entier et non à un élément parent qui a un position: relative
.
Réponses:
Vous devrez placer l' div
extérieur de l' position:relative
élément et dans body
.
position:fixed
et position:absolute
n'ont pas le même comportement. Fixe est relatif à la fenêtre d'affichage (pas au document) et fera en sorte que l'élément soit toujours visible même après le défilement causant potentiellement des chevauchements, etc. Je comprends qu'il peut y avoir des raisons valables pour la structure html, mais comme la question concerne spécifiquement html et css, ma réponse est correcte. Le seul moyen sans JS de le rendre relatif au document est de le déplacer hors de l' position:relative
élément.
Vous cherchez position: fixed
.
De MDN :
Le positionnement fixe est similaire au positionnement absolu, à l'exception du fait que le bloc contenant de l'élément est la fenêtre. Ceci est souvent utilisé pour créer un élément flottant qui reste dans la même position même après le défilement de la page.
Ma solution était d'utiliser jQuery pour déplacer le div en dehors de son parent:
<script>
jQuery(document).ready(function(){
jQuery('#loadingouter').appendTo("body");
});
</script>
<div id="loadingouter"></div>
Si vous ne souhaitez pas attacher l'élément à body
, la solution suivante fonctionnera.
Je suis venu à cette question à la recherche d'une solution qui fonctionnerait sans attacher le div au corps, car j'avais un script de survol de la souris que je voulais exécuter lorsque la souris était à la fois sur le nouvel élément et sur l'élément qui l'a engendré. Tant que vous êtes prêt à utiliser jQuery et inspiré par la réponse de @Liam William:
var leftOffset = <<VALUE>>;
var topOffset = <<VALUE>>;
$(element).css("left", leftOffset - element.offset().left);
$(element).css("top", topOffset - element.offset().top);
Cette solution fonctionne en soustrayant la position actuelle gauche et supérieure de l'élément (par rapport au corps) afin de déplacer l'élément à 0, 0. Placer l'élément où vous voulez par rapport au corps est alors aussi simple que d'ajouter un décalage gauche et haut valeur.
Ce n'est pas possible avec simplement CSS et HTML.
En utilisant Javascript / jQuery, vous pourriez potentiellement obtenir les éléments jQuery.offset()
dans le DOM et les comparer jQuery.position()
pour calculer où ils devraient apparaître sur la page.
jQuery.offset({ left: 0 })
pour la victoire!
<body>
balise, non?