_grid.scss 7.6 KB

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