2012-06-27 21 views
6

Tôi mới bắt đầu chơi với Susy. Tôi có một lưới 12 cột có lưới đệm trên đó. Bây giờ tôi muốn tiêu đề của trang của tôi để mở rộng toàn bộ lưới bao gồm cả lưới-padding. Những gì tôi đang làm bây giờ là tính toán chiều rộng tổng thể và sau đó thiết lập một lề tiêu cực trên tiêu đề. Đó là cảm thấy khá hacky với tôi ... Có cách nào sạch hơn để làm điều đó?Susy: Làm thế nào để mở rộng hộp nội dung để bao gồm lưới đệm là tốt?

$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; 
} 

Trả lời

13

Bạn có hai lựa chọn tốt. Một là một phiên bản đơn giản của những gì bạn có. Vì các phần tử khối là 100% chiều rộng theo mặc định, bạn có thể chỉ cần loại bỏ thiết lập chiều rộng của bạn (và tất cả các phép toán hacky).

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

Tùy chọn khác của bạn là sử dụng nhiều vùng chứa trên trang. Điều đó đòi hỏi một sự thay đổi để đánh dấu, nhưng đôi khi đó là một sự đơn giản hóa hoạt động tốt. Nếu bạn di chuyển tiêu đề ra ngoài vùng chứa hiện tại của mình và khai báo nó dưới dạng vùng chứa của nó, điều đó sẽ thực hiện thủ thuật.

(như một mặt lưu ý:. Nếu bạn cần đầy đủ chiều rộng bao giờ hết, bạn chỉ có thể sử dụng columns-width() chức năng (đối với chiều rộng bên trong, mà không cần đệm) hoặc container-outer-width() cho toàn bộ chiều rộng bao gồm cả đệm)

UPDATE:

tôi đã sử dụng mixin này, để áp dụng chảy máu bất cứ nơi nào tôi cần nó:

@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; 
    } 
    } 
} 

Một số ví dụ:

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

Cảm ơn câu trả lời. Vì vậy, về cơ bản tôi đã làm điều đúng, kể từ khi container-outer-width() hiện khá nhiều tính toán tương tự tôi đã làm. Tôi có một vài yếu tố trong toàn bộ trang cần phải có chiều rộng đầy đủ nên giải pháp vùng chứa không có tùy chọn ở đây, nhưng sẽ là phần tử sạch nhất nếu có thể. Rời bỏ chiều rộng mặc dù để lại phần đệm bên phải của vùng chứa vùng chứa. –

+0

Một lề phải âm phải xử lý các padding đúng tốt. Vấn đề với 'container-outer-width' là nó không phải là phần trăm, trong khi phần còn lại của lưới của bạn là. Tôi sẽ tránh đặt độ rộng cố định bên trong lưới Susy. –

+0

@EricMeyer Tôi đã thử sử dụng tính năng này để lấy phần tử lưới của tôi chảy máu sang trái và phải, nhưng nó chỉ chuyển toàn bộ thùng chứa sang trái. Tôi đã sử dụng '# top-content { \t @include span-columns (24,24); \t @include border-radius ($ radius); \t @include bleed; \t màu nền: #fff; \t lề trên: 10px; \t chiều cao: 300px; } ' Và nó chuyển hộp sang trái. – Steve

Các vấn đề liên quan