Existe-t-il un moyen d'avoir un DIV enfant dans un conteneur parent DIV qui est plus large que son parent. Le DIV enfant doit avoir la même largeur que la fenêtre du navigateur.
Voir l'exemple ci-dessous:
L'enfant DIV doit rester comme un enfant de la parent div. Je sais que je peux définir des marges négatives arbitraires sur le div enfant pour le rendre plus large, mais je ne peux pas trouver comment le rendre essentiellement à 100% de la largeur du navigateur.
Je sais que je peux le faire:
.child-div{
margin-left: -100px;
margin-right: -100px;
}
Mais j'ai besoin que l'enfant ait la même largeur que le navigateur qui est dynamique.
Mettre à jour
Merci pour vos réponses, il semble que la réponse la plus proche à ce jour soit de rendre la position DIV de l'enfant: absolue et de définir les propriétés gauche et droite sur 0.
Le problème suivant que j'ai est que le parent a la position: relative, ce qui signifie que les propriétés gauche et droite sont toujours relatives au div parent et non au navigateur, voir l'exemple ici: jsfiddle.net/v2Tja/2
Je ne peux pas supprimer la position relative du parent sans tout gâcher.
position: relative
? De quoi avez-vous besoinposition: relative
? Je suppose que ce que je demande, c'est: qu'essayez-vous de faire?Réponses:
Utiliser un positionnement absolu
la source
position:fixed
. pourquoi cela ne fonctionne pas correctement?Voici une solution générique qui conserve l'élément enfant dans le flux de documents:
Nous définissons l'
width
élément enfant pour qu'il remplisse toute la largeur de la fenêtre d'affichage, puis nous le faisons correspondre au bord de l'écran en le déplaçant vers leleft
une distance de la moitié de la fenêtre, moins 50% de la largeur de l'élément parent.Démo:
Le support du navigateur pour vw et pour calc () peut généralement être vu comme IE9 et plus récent.
Remarque: Cela suppose que le modèle de boîte est défini sur
border-box
. Sansborder-box
, vous devrez également soustraire les rembourrages et les bordures, ce qui rend cette solution un gâchis.Remarque: Il est recommandé de masquer le débordement horizontal de votre conteneur de défilement, car certains navigateurs peuvent choisir d'afficher une barre de défilement horizontale malgré l'absence de débordement.
la source
position: relative
parent!J'ai longtemps cherché une solution à ce problème. Idéalement, nous voulons que l'enfant soit plus grand que le parent, mais sans connaître à l'avance les contraintes du parent.
Et j'ai finalement trouvé une brillante réponse générique ici . Copier mot pour mot:
la source
90vw
. Il semble également que celamargin-right
n'ait aucun effet dans tous les cas.Sur la base de votre suggestion d'origine (définition de marges négatives), j'ai essayé et trouvé une méthode similaire en utilisant des unités de pourcentage pour la largeur du navigateur dynamique:
HTML
CSS:
Les marges négatives laisseront le contenu sortir de la DIV parentale. Par conséquent, j'ai défini le
padding: 0 100%;
pour repousser le contenu aux limites d'origine du Chlid DIV.Les marges négatives entraîneront également l'expansion de la largeur totale du .child-div hors de la fenêtre du navigateur, entraînant un défilement horizontal. Par conséquent, nous devons couper la largeur d'extrusion en appliquant un
overflow-x: hidden
à un grand-parent DIV (qui est le parent du parent Div):Voici le JSfiddle
J'ai essayé Nils Kaspersson
left: calc(-50vw + 50%)
; cela a parfaitement fonctionné dans Chrome et FF (pas encore sûr d'IE) jusqu'à ce que je découvre que les navigateurs Safari ne le font pas correctement. J'espère qu'ils ont corrigé cela dès que j'aime vraiment cette méthode simple.Cela peut également résoudre votre problème où l'élément parent DIV doit être
position:relative
Les 2 inconvénients de cette méthode de contournement sont:
Veuillez me faire savoir s'il y a un problème avec cette méthode;). J'espère que ça aide.
la source
Flexbox peut être utilisé pour rendre un enfant plus large que son parent avec trois lignes de CSS.
Seul l'enfant
display
,margin-left
etwidth
doit être réglé.margin-left
dépend de l'enfantwidth
. La formule est:Les variables CSS peuvent être utilisées pour éviter de calculer manuellement la marge gauche.
Démo # 1: Calcul manuel
Démo # 2: Utilisation de variables CSS
la source
J'ai utilisé ceci:
HTML
CSS
la source
vous pouvez essayer la position: absolue. et donnez la largeur et la hauteur, en haut: 'axe y à partir du haut' et à gauche: 'axe x'
la source
J'ai eu un problème similaire. Le contenu de l'élément enfant devait rester dans l'élément parent tandis que l'arrière-plan devait étendre toute la largeur de la fenêtre.
J'ai résolu ce problème en créant l'élément enfant
position: relative
et en lui ajoutant un pseudo-élément (:before
) avecposition: absolute; top: 0; bottom: 0; width: 4000px; left: -1000px;
. Le pseudo-élément reste derrière l'enfant réel en tant que pseudo-élément d'arrière-plan. Cela fonctionne dans tous les navigateurs (même IE8 + et Safari 6+ - n'ont pas la possibilité de tester des versions plus anciennes).Petit exemple de violon: http://jsfiddle.net/vccv39j9/
la source
overflow-x: hidden
.En ajoutant à la solution de Nils Kaspersson, je résout également la largeur de la barre de défilement verticale. J'utilise
16px
comme exemple, qui est soustrait de la largeur du port de vue. Cela évitera l'apparition de la barre de défilement horizontale.la source
16px
que vous devez soustraire car il provoque la barre de défilement horizontale est la marge / remplissage par défaut du navigateur, au lieu de le soustraire, utilisez-le simplementhtml, body{ margin:0; padding:0 }
ainsi vous n'aurez pas besoin de faire de calcul supplémentaire pour le16px
En supposant que le parent a une largeur fixe, par exemple
#page { width: 1000px; }
et qu'il est centré#page { margin: auto; }
, vous voulez que l'enfant s'adapte à la largeur de la fenêtre du navigateur que vous pouvez simplement faire:la source
Pour rendre la division enfant aussi large que le contenu, essayez ceci:
la source
la source
Je sais que c'est vieux mais pour quiconque vient à cela pour une réponse, vous le feriez comme ceci:
Débordement masqué sur un élément contenant l'élément parent, tel que le corps.
Donnez à votre élément enfant une largeur beaucoup plus large que votre page et positionnez-le à gauche de -100%.
Voici un exemple:
Voici également un violon JS: http://jsfiddle.net/v2Tja/288/
la source
La solution sera alors la suivante.
HTML
CSS
la source
J'ai essayé certaines de vos solutions. Celui-là :
est de loin le meilleur, car nous n'avons pas besoin de CSS supplémentaires pour un écran plus petit. J'ai créé un codePen pour afficher les résultats: j'ai utilisé un div parent avec une image d'arrière-plan et un div div enfant avec un contenu interne.
https://codepen.io/yuyazz/pen/BaoqBBq
la source