我的数学令人震惊,我做不到,因为我一生都在做这个计算。我正在创建一个 CSS 网格系统,它允许用户指定任意数量的网格列(默认情况下有 12 个)、这些列之间的装订线、列周围的最大宽度以及该总宽度内的边距。有希望的结果是每列宽度的百分比宽度和所有列的左边距的百分比。
如果我使用下面的默认值,最大宽度将为 1200 像素,左右的内边距将为 20,为网格的最大允许空间提供 1160 的内部宽度。那有意义吗?
顺便说一句,我使用的是 SASS。查看代码中的注释以查看当前有效和无效的内容。
这是 jsFiddle 上的代码:http: //jsfiddle.net/mrmartineau/fMeBk/
$gridColumnCount : 12; // Total column count
$gridGutterWidth : 40; // [in pixels]
$gridColumnPadding : 30; // [in pixels]
$gridMaxWidth : 1200; // [in pixels]
$gridMargin : 20; // [in pixels] Space outside the grid
@function gridColumnWidth() {
@return $gridMaxWidth / $gridColumnCount;
}
// Grid calculations
@function gridColumnWidthCalc($colNumber) {
// Is correct
@if $gridGutterWidth == 0 {
@return percentage($colNumber / $gridColumnCount);
}
// Is incorrect
@else $gridMargin > 0 {
@return percentage( (($colNumber / $gridColumnCount) - gutterCalc(false) ) );
}
}
@mixin columns($columnSpan: 1) {
width: gridColumnWidthCalc($columnSpan);
}
@function gutterCalc($showUnit: true) {
@if $showUnit == true {
@return percentage( $gridGutterWidth / ( $gridMaxWidth - ($gridMargin * 2) ) );
} @else {
@return $gridGutterWidth / ( $gridMaxWidth - ($gridMargin * 2) ) * 100;
}
}
@mixin gridColumn() {
@if $gridGutterWidth > 0 {
margin-left: gutterCalc();
}
@if $gridColumnPadding > 0 {
padding: $gridColumnPadding + px;
}
float: left;
min-height: 30px;
position: relative;
clear: none;
&:first-child {
margin-left: 0;
}
background-color: pink;
border: 1px solid red;
}
@for $i from 1 to $gridColumnCount + 1 {
.span#{$i} { @include columns($i); }
}
.container {
padding-left: $gridMargin + px;
padding-right: $gridMargin + px;
max-width: $gridMaxWidth + px;
}
.col {
@include gridColumn();
}