_grid.scss 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. // Foundation by ZURB
  2. // foundation.zurb.com
  3. // Licensed under MIT Open Source
  4. @import 'global';
  5. //
  6. // @variables
  7. //
  8. $include-html-grid-classes: $include-html-classes !default;
  9. $include-xl-html-grid-classes: false !default;
  10. $row-width: rem-calc(1000) !default;
  11. $total-columns: 12 !default;
  12. $last-child-float: $opposite-direction !default;
  13. //
  14. // Grid Functions
  15. //
  16. // Deprecated: We'll drop support for this in 5.1, use grid-calc()
  17. @function gridCalc($colNumber, $totalColumns) {
  18. @warn "gridCalc() is deprecated, use grid-calc()";
  19. @return grid-calc($colNumber, $totalColumns);
  20. }
  21. // @FUNCTION
  22. // $colNumber - Found in settings file
  23. // $totalColumns - Found in settings file
  24. @function grid-calc($colNumber, $totalColumns) {
  25. $result: percentage(($colNumber / $totalColumns));
  26. @if $result == 0% { $result: 0; }
  27. @return $result;
  28. }
  29. //
  30. // @mixins
  31. //
  32. // For creating container, nested, and collapsed rows.
  33. //
  34. //
  35. // $behavior - Any special behavior for this row? Default: false. Options: nest, collapse, nest-collapse, false.
  36. @mixin grid-row($behavior: false) {
  37. // use @include grid-row(nest); to include a nested row
  38. @if $behavior == nest {
  39. margin: 0 (-($column-gutter/2));
  40. max-width: none;
  41. width: auto;
  42. }
  43. // use @include grid-row(collapse); to collapsed a container row margins
  44. @else if $behavior == collapse {
  45. margin: 0;
  46. max-width: $row-width;
  47. width: 100%;
  48. }
  49. // use @include grid-row(nest-collapse); to collapse outer margins on a nested row
  50. @else if $behavior == nest-collapse {
  51. margin: 0;
  52. max-width: none;
  53. width: auto;
  54. }
  55. // use @include grid-row; to use a container row
  56. @else {
  57. margin: 0 auto;
  58. max-width: $row-width;
  59. width: 100%;
  60. }
  61. // Clearfix for all rows
  62. @include clearfix();
  63. }
  64. // Creates a column, should be used inside of a media query to control layouts
  65. //
  66. // $columns - The number of columns this should be
  67. // $last-column - Is this the last column? Default: false.
  68. // $center - Center these columns? Default: false.
  69. // $offset - # of columns to offset. Default: false.
  70. // $push - # of columns to push. Default: false.
  71. // $pull - # of columns to pull. Default: false.
  72. // $collapse - Get rid of gutter padding on column? Default: false.
  73. // $float - Should this float? Default: true. Options: true, false, left, right.
  74. @mixin grid-column(
  75. $columns:false,
  76. $last-column:false,
  77. $center:false,
  78. $offset:false,
  79. $push:false,
  80. $pull:false,
  81. $collapse:false,
  82. $float:true,
  83. $position:false) {
  84. // If positioned for default .column, include relative position
  85. // push and pull require position set
  86. @if $position or $push or $pull {
  87. position: relative;
  88. }
  89. // If collapsed, get rid of gutter padding
  90. @if $collapse {
  91. padding-left: 0;
  92. padding-right: 0;
  93. }
  94. // Gutter padding whenever a column isn't set to collapse
  95. // (use $collapse:null to do nothing)
  96. @else if $collapse == false {
  97. padding-left: ($column-gutter / 2);
  98. padding-right: ($column-gutter / 2);
  99. }
  100. // If a column number is given, calculate width
  101. @if $columns {
  102. width: grid-calc($columns, $total-columns);
  103. // If last column, float naturally instead of to the right
  104. @if $last-column { float: $opposite-direction; }
  105. }
  106. // Source Ordering, adds left/right depending on which you use.
  107. @if $push { #{$default-float}: grid-calc($push, $total-columns); #{$opposite-direction}: auto; }
  108. @if $pull { #{$opposite-direction}: grid-calc($pull, $total-columns); #{$default-float}: auto; }
  109. @if $float and $last-column == false {
  110. @if $float == left or $float == true { float: $default-float; }
  111. @else if $float == right { float: $opposite-direction; }
  112. @else { float: none; }
  113. }
  114. // If centered, get rid of float and add appropriate margins
  115. @if $center {
  116. margin-#{$default-float}: auto;
  117. margin-#{$opposite-direction}: auto;
  118. float: none;
  119. }
  120. // If offset, calculate appropriate margins
  121. @if $offset { margin-#{$default-float}: grid-calc($offset, $total-columns) !important; }
  122. }
  123. // Create presentational classes for grid
  124. //
  125. // $size - Name of class to use, i.e. "large" will generate .large-1, .large-2, etc.
  126. @mixin grid-html-classes($size) {
  127. @for $i from 0 through $total-columns - 1 {
  128. .#{$size}-push-#{$i} {
  129. @include grid-column($push:$i, $collapse:null, $float:false);
  130. }
  131. .#{$size}-pull-#{$i} {
  132. @include grid-column($pull:$i, $collapse:null, $float:false);
  133. }
  134. }
  135. .column,
  136. .columns { @include grid-column($columns:false, $position:true); }
  137. @for $i from 1 through $total-columns {
  138. .#{$size}-#{$i} { @include grid-column($columns:$i, $collapse:null, $float:false); }
  139. }
  140. @for $i from 0 through $total-columns - 1 {
  141. .#{$size}-offset-#{$i} { @include grid-column($offset:$i, $collapse:null, $float:false); }
  142. }
  143. .#{$size}-reset-order {
  144. float: $default-float;
  145. left: auto;
  146. margin-#{$default-float}: 0;
  147. margin-#{$opposite-direction}: 0;
  148. right: auto;
  149. }
  150. .column.#{$size}-centered,
  151. .columns.#{$size}-centered { @include grid-column($center:true, $collapse:null, $float:false); }
  152. .column.#{$size}-uncentered,
  153. .columns.#{$size}-uncentered {
  154. float: $default-float;
  155. margin-#{$default-float}: 0;
  156. margin-#{$opposite-direction}: 0;
  157. }
  158. // Fighting [class*="column"] + [class*="column"]:last-child
  159. .column.#{$size}-centered:last-child,
  160. .columns.#{$size}-centered:last-child{
  161. float: none;
  162. }
  163. // Fighting .column.<previous-size>-centered:last-child
  164. .column.#{$size}-uncentered:last-child,
  165. .columns.#{$size}-uncentered:last-child {
  166. float: $default-float;
  167. }
  168. .column.#{$size}-uncentered.opposite,
  169. .columns.#{$size}-uncentered.opposite {
  170. float: $opposite-direction;
  171. }
  172. .row {
  173. &.#{$size}-collapse {
  174. > .column,
  175. > .columns { @include grid-column($collapse:true, $float:false); }
  176. .row {margin-left:0; margin-right:0;}
  177. }
  178. &.#{$size}-uncollapse {
  179. > .column,
  180. > .columns {
  181. @include grid-column;
  182. }
  183. }
  184. }
  185. }
  186. @include exports("grid") {
  187. @if $include-html-grid-classes {
  188. .row {
  189. @include grid-row;
  190. &.collapse {
  191. > .column,
  192. > .columns { @include grid-column($collapse:true, $float:false); }
  193. .row {margin-left:0; margin-right:0;}
  194. }
  195. .row { @include grid-row($behavior:nest);
  196. &.collapse { @include grid-row($behavior:nest-collapse); }
  197. }
  198. }
  199. .column,
  200. .columns { @include grid-column($columns:$total-columns); }
  201. .column,
  202. .columns {
  203. & + &:last-child {
  204. float: $last-child-float;
  205. }
  206. & + &.end {
  207. float: $default-float;
  208. }
  209. }
  210. @media #{$small-up} {
  211. @include grid-html-classes($size:small);
  212. }
  213. @media #{$medium-up} {
  214. @include grid-html-classes($size:medium);
  215. // Old push and pull classes
  216. @for $i from 0 through $total-columns - 1 {
  217. .push-#{$i} {
  218. @include grid-column($push:$i, $collapse:null, $float:false);
  219. }
  220. .pull-#{$i} {
  221. @include grid-column($pull:$i, $collapse:null, $float:false);
  222. }
  223. }
  224. }
  225. @media #{$large-up} {
  226. @include grid-html-classes($size:large);
  227. @for $i from 0 through $total-columns - 1 {
  228. .push-#{$i} {
  229. @include grid-column($push:$i, $collapse:null, $float:false);
  230. }
  231. .pull-#{$i} {
  232. @include grid-column($pull:$i, $collapse:null, $float:false);
  233. }
  234. }
  235. }
  236. }
  237. @if $include-xl-html-grid-classes {
  238. @media #{$xlarge-up} {
  239. @include grid-html-classes($size:xlarge);
  240. }
  241. @media #{$xxlarge-up} {
  242. @include grid-html-classes($size:xxlarge);
  243. }
  244. }
  245. }