2012-06-27 9 views
6

Ich habe gerade angefangen mit Susy zu spielen. Ich habe ein 12-Spalten-Gitter, das Gitter-Padding hat. Jetzt möchte ich, dass die Kopfzeile meiner Seite das gesamte Raster einschließlich der Rasterauffüllung überspannt. Was ich gerade mache, ist die Berechnung der Gesamtbreite und dann die Einstellung eines negativen Randes in der Kopfzeile. Das fühlt sich ziemlich hacky für mich an ... Gibt es einen saubereren Weg, es zu tun?Susy: Wie erweitert Content-Box, um auch Gitter-Padding zu decken?

$total-columns : 12; 
$column-width : 3.5em; 
$gutter-width : 1.25em; 
$grid-padding : 2em; 

$total-width: ($total-columns * ($column-width + $gutter-width)) + (2 * $grid-padding) - $gutter-width; 

header { 
    height: 150px; 
    width: $total-width; 
    margin-left: -$grid-padding; 
} 

Antwort

13

Sie haben zwei gute Möglichkeiten. Eins ist eine vereinfachte Version von dem, was Sie haben. Da Blockelemente standardmäßig 100% Breite haben, können Sie einfach Ihre Breiteneinstellung (und all diese hacky Mathe) beseitigen.

header { 
    height: 150px; 
    margin: 0 0 - $grid-padding; 
} 

Ihre andere Option besteht darin, mehrere Container auf der Seite zu verwenden. Das erfordert eine Änderung des Markups, aber manchmal ist es eine Vereinfachung, die gut funktioniert. Wenn Sie den Header außerhalb Ihres aktuellen Containers verschieben und ihn als eigenen Container deklarieren, ist das der Trick.

(als Neben. Hinweis: Wenn Sie die volle Breite jemals tun müssen, können Sie einfach die columns-width()-Funktion (für innere Breite, ohne Polsterung) oder container-outer-width() für die volle Breite einschließlich der Polsterung)

UPDATE:

ich habe diese mixin benutzen, anzuwenden blutet überall ich es brauche:

@mixin bleed($padding: $grid-padding, $sides: left right) { 
    @if $sides == 'all' { 
    margin: - $padding; 
    padding: $padding; 
    } @else { 
    @each $side in $sides { 
     margin-#{$side}: - $padding; 
     padding-#{$side}: $padding; 
    } 
    } 
} 

Einige Beispiele:

#header { @include bleed; } 
#nav { @include bleed($sides: left); } 
#main { @include bleed($sides: right); } 
#footer { @include bleed(space(3)); } 
+0

Danke für die Antwort. Also habe ich im Grunde genommen das Richtige getan, da container-outer-width() ziemlich genau die gleiche Berechnung macht wie ich. Ich habe ein paar Elemente auf der ganzen Seite, die volle Breite haben müssen, so dass die Container-Lösung hier keine Option ist, aber die sauberste sein würde, falls zutreffend, denke ich. Wenn Sie die Breite weglassen, wird die richtige Füllung des Container-Rohlings beibehalten. –

+0

Ein negativer rechter Rand sollte die richtige Polsterung gut behandeln. Das Problem mit Container-Outer-With ist, dass es nicht Prozent-basiert ist, während der Rest Ihres Grids ist. Ich würde vermeiden, feste Breiten innerhalb eines Susy-Rasters zu setzen. –

+0

@EricMeyer Ich habe versucht, dies zu verwenden, um mein Gitterelement links und rechts zu bluten, aber es verlagerte nur den ganzen Container nach links. Ich benutzte '# top-content { \t @include span-Spalten (24,24); \t @include border-radius ($ radius); \t @include bluten; \t Hintergrundfarbe: #fff; \t Rand oben: 10px; \t Höhe: 300px; } ' Und es verlagerte die Box nach links. – Steve