_block-grid.scss 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. // Foundation by ZURB
  2. // foundation.zurb.com
  3. // Licensed under MIT Open Source
  4. @import 'global';
  5. //
  6. // Block Grid Variables
  7. //
  8. $include-html-block-grid-classes: $include-html-classes !default;
  9. $include-xl-html-block-grid-classes: false !default;
  10. // We use this to control the maximum number of block grid elements per row
  11. $block-grid-elements: 12 !default;
  12. $block-grid-default-spacing: rem-calc(20) !default;
  13. $align-block-grid-to-grid: false !default;
  14. @if $align-block-grid-to-grid {
  15. $block-grid-default-spacing: $column-gutter;
  16. }
  17. // Enables media queries for block-grid classes. Set to false if writing semantic HTML.
  18. $block-grid-media-queries: true !default;
  19. //
  20. // Block Grid Mixins
  21. //
  22. // Create a custom block grid
  23. //
  24. // $per-row - # of items to display per row. Default: false.
  25. // $spacing - # of ems to use as padding on each block item. Default: rem-calc(20).
  26. // $include-spacing - Adds padding to our list item. Default: true.
  27. // $base-style - Apply a base style to block grid. Default: true.
  28. @mixin block-grid(
  29. $per-row:false,
  30. $spacing:$block-grid-default-spacing,
  31. $include-spacing:true,
  32. $base-style:true) {
  33. @if $base-style {
  34. display: block;
  35. padding: 0;
  36. @if $align-block-grid-to-grid {
  37. margin: 0;
  38. } @else {
  39. margin: 0 (-$spacing/2);
  40. }
  41. @include clearfix;
  42. > li {
  43. display: block;
  44. float: $default-float;
  45. height: auto;
  46. @if $include-spacing {
  47. padding: 0 ($spacing/2) $spacing;
  48. }
  49. }
  50. }
  51. @if $per-row {
  52. > li {
  53. list-style: none;
  54. @if $include-spacing {
  55. padding: 0 ($spacing/2) $spacing;
  56. }
  57. width: 100%/$per-row;
  58. &:nth-of-type(1n) { clear: none; }
  59. &:nth-of-type(#{$per-row}n+1) { clear: both; }
  60. @if $align-block-grid-to-grid {
  61. @include block-grid-aligned($per-row, $spacing);
  62. }
  63. }
  64. }
  65. }
  66. @mixin block-grid-aligned($per-row, $spacing) {
  67. @for $i from 1 through $block-grid-elements {
  68. @if $per-row >= $i {
  69. $grid-column: '+' + $i;
  70. @if $per-row == $i {
  71. $grid-column: '';
  72. }
  73. &:nth-of-type(#{$per-row}n#{unquote($grid-column)}) {
  74. padding-left: ($spacing - (($spacing / $per-row) * ($per-row - ($i - 1))));
  75. padding-right: ($spacing - (($spacing / $per-row) * $i));
  76. }
  77. }
  78. }
  79. }
  80. // Generate presentational markup for block grid.
  81. //
  82. // $size - Name of class to use, i.e. "large" will generate .large-block-grid-1, .large-block-grid-2, etc.
  83. @mixin block-grid-html-classes($size, $include-spacing) {
  84. @for $i from 1 through $block-grid-elements {
  85. .#{$size}-block-grid-#{($i)} {
  86. @include block-grid($i, $block-grid-default-spacing, $include-spacing, false);
  87. }
  88. }
  89. }
  90. @include exports("block-grid") {
  91. @if $include-html-block-grid-classes {
  92. [class*="block-grid-"] { @include block-grid; }
  93. @if $block-grid-media-queries {
  94. @media #{$small-up} {
  95. @include block-grid-html-classes($size:small, $include-spacing:false);
  96. }
  97. @media #{$medium-up} {
  98. @include block-grid-html-classes($size:medium, $include-spacing:false);
  99. }
  100. @media #{$large-up} {
  101. @include block-grid-html-classes($size:large, $include-spacing:false);
  102. }
  103. @if $include-xl-html-block-grid-classes {
  104. @media #{$xlarge-up} {
  105. @include block-grid-html-classes($size:xlarge, $include-spacing:false);
  106. }
  107. @media #{$xxlarge-up} {
  108. @include block-grid-html-classes($size:xxlarge, $include-spacing:false);
  109. }
  110. }
  111. }
  112. }
  113. }