web-dev-qa-db-fra.com

Élément de rupture hors du conteneur

Tout mon contenu est emballé dans un élément de conteneur de largeur fixe.

Mais j'ai un <div> que je veux "casser" de ce conteneur pour couvrir toute la largeur de la page.

http://dabblet.com/Gist/3207168

enter image description here

Comme vous pouvez le voir dans cet exemple, j'ai le <div> à éclater, mais comme il est positionné de manière absolue, cela n'affecte pas le flux de la page ... c'est ce que j'aimerais que ce soit fait.

Je veux qu'il agisse comme s'il se trouvait dans le flux de la page, mais que la largeur de la fenêtre soit agrandie.

26
Shpigford

Peut-être que http://jsfiddle.net/sYv9g/1/ ?

.wrapper {
    width:300px;
    margin:0 auto;
    background:yellow;
}
.break {
    text-align:center;
    font-weight:bold;
    background:rgba(255,0,0, 0.5);
    margin-left:-100%;
    margin-right:-100%;
}
<div class="wrapper">
    <h1>Ipsum Dapibus Pellentesque Pharetra</h1>
    <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Etiam porta sem malesuada magna mollis euismod. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Sed posuere consectetur est at lobortis.</p>
    <div class="break">This should be full width</div>
    <p>Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Maecenas sed diam eget risus varius blandit sit amet non magna. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p>
    <div class="break">This should be full width</div>
    <p>Nullam id dolor id nibh ultricies vehicula ut id elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas faucibus mollis interdum. Donec id elit non mi porta gravida at eget metus. Donec ullamcorper nulla non metus auctor fringilla.</p>
    <p>Vestibulum id ligula porta felis euismod semper. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur blandit tempus porttitor.</p>
</div>

31
voodoo417

Une autre idée qui, dans les navigateurs modernes, étend le .breakout uniquement à la largeur de la fenêtre du navigateur:

body, html {
  overflow-x: hidden;
  margin: 0;
  padding: 0;
}

div {
  padding:0.5em;
}

.container {
  width:300px;
  background-color:rgba(255,255,0,0.5);
  margin:auto;
}

.breakout {
  margin:1em -100%; /* old browsers fallback */
  margin:1em calc(50% - 50vw);
  background-color:rgba(255,0,255,0.5)
}
<div class="container">
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.

  <div class="breakout">
    Break out of container
  </div>

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
</div>

Edit: Le seul et unique Chris Coyier explique les conteneurs pleine largeur dans des parents à largeur limitée , ce qui est un peu similaire.

32
fboes

Vous ne pouvez pas réellement le faire sortir de la div d'habillage, mais vous pouvez simuler le même effet en faisant en sorte que la div d'habillage ait toute la largeur de la page et en encapsulant les autres éléments de cette page qui ne sont pas supposés être dans votre div "break out" dans une div qui a un fond jaune et une largeur de 300px.

4
Zachary Kniebel

Vous pouvez utiliser des marges négatives pour y parvenir.

.wrapper {
    width:300px;
    margin:0 auto;
}
.break {
    width: 600px;
    margin-left:-150px;
}

Le seul problème est que vous devez spécifier la largeur des deux éléments.

EDIT: la solution de voodoo417 serait mieux ...

1
smilledge

S'appuyant sur la solution de voodoo417 avec juste l'ajout d'un deuxième wrapper et de légères modifications, cela peut être fait correctement:

    .outer-wrapper {
        overflow:hidden;
        min-width:300px;
    }
    .wrapper {
        width:300px;
        margin:0 auto;
        background:yellow;
    }
    .break {
        text-align:center;
        font-weight:bold;
        background:rgba(255,0,0, 0.5);
        margin-left:-9999px;
        margin-right:-9999px;
    }
    <div class="outer-wrapper">
    <div class="wrapper">
        <h1>Ipsum Dapibus Pellentesque Pharetra</h1>
        <div class="break">This should be full width</div>
    </div>
    </div>

Voici le jsfiddle adapté:

http://jsfiddle.net/v53vv78d/2/

1
kraftner