Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.91 KB | None | 0 0
  1. // ===================================================
  2. // CSS Grid Layout Helper
  3. //
  4. // To convert some of the CSS Grid Spec 2 features to Spec 1
  5. //
  6. // Author: Sascha Fuchs
  7. //
  8. // ===================================================
  9.  
  10. /// Add Gap between the boxes
  11. ///
  12. /// @group core - cssgrid
  13. ///
  14. /// @param {list} $boxes - List with box sizes
  15. /// @param {string} $gap - Optional column gap
  16. @function boxAndGap($boxes, $gap) {
  17. $box: ();
  18.  
  19. @for $i from 1 through length($boxes) {
  20. $box: append($box, nth($boxes, $i), comma);
  21.  
  22. // Adding Gap Between
  23. @if $gap > 0 {
  24. // Not last Loop
  25. @if $i != length($boxes) {
  26. $box: append($box, $gap, comma);
  27. }
  28. }
  29. }
  30.  
  31. @return unquote(sl-to-string($box, ' '));
  32. }
  33.  
  34. /// To build Grid Template Columns with optional gap
  35. ///
  36. /// @group core - cssgrid
  37. ///
  38. /// @param {string} $gap - Optional column gap
  39. /// @param {list} $columns - Columnsizes comma seperated
  40. ///
  41. /// @require {function} strip-units - Strip Units Function
  42. ///
  43. /// @example scss - scss
  44. /// .test {
  45. /// @include grid-columns(10px, 250px, 1fr, 50px, 100px);
  46. /// }
  47. @mixin grid-columns($gap, $columns) {
  48. /* autoprefixer: off */
  49. grid-template-columns: unquote(sl-to-string($columns, ' '));
  50. /* autoprefixer: on */
  51. @if $gap > 0 {
  52. grid-column-gap: $gap;
  53. }
  54.  
  55. .old-grid-spec & {
  56. -ms-grid-columns: boxAndGap($columns, $gap);
  57. }
  58. }
  59.  
  60. /// To build Grid Template Rows with optional gap
  61. ///
  62. /// @group core - cssgrid
  63. ///
  64. /// @param {string} $gap - Optional row gap
  65. /// @param {list} $rows - Rowsizes comma seperated
  66. ///
  67. /// @require {function} strip-units - Strip Units Function
  68. ///
  69. /// @example scss - scss
  70. /// .test {
  71. /// @include grid-rows(10px, 1fr);
  72. /// }
  73. @mixin grid-rows($gap, $rows) {
  74. /* autoprefixer: off */
  75. grid-template-rows: unquote(sl-to-string($rows, ' '));
  76. /* autoprefixer: on */
  77. @if $gap > 0 {
  78. grid-column-gap: $gap;
  79. grid-row-gap: $gap;
  80. }
  81.  
  82. .old-grid-spec & {
  83. -ms-grid-rows: boxAndGap($rows, $gap);
  84. }
  85. }
  86.  
  87. /// Generate a Grid Template Area from a Grid Map
  88. ///
  89. /// @group core - cssgrid
  90. ///
  91. /// @param {string} $area - Name of the Area
  92. /// @param {map} $map - Map of your grid area matrix
  93. ///
  94. /// @example scss - scss
  95. /// $gridAreaMap: (
  96. /// row1: ('logo', 'nav', 'nav', 'nav'),
  97. /// row2: ('logo', 'empty', 'search', 'search')
  98. /// );
  99. /// @include grid-matrix($gridAreaMap);
  100. @mixin grid-matrix($map) {
  101. $matrix: ();
  102.  
  103. @each $index, $row in $map {
  104. $matrix: append($matrix, sl-to-string($row, ' '), space);
  105. }
  106.  
  107. grid-template-areas: $matrix;
  108. }
  109.  
  110. /// Generate Coordinates based on Grid Matrix and the selected area
  111. ///
  112. /// @group core - cssgrid
  113. ///
  114. /// @param {string} $area - Name of the Area
  115. /// @param {map} $map - Map of your grid area matrix
  116. /// @param {bool} $columnGap - If you use Gap for Columns
  117. /// @param {bool} $rowGap - If you use Gap for Rows
  118. ///
  119. /// @example scss - scss
  120. /// $gridAreaMap: (
  121. /// row1: ('logo', 'nav', 'nav', 'nav'),
  122. /// row2: ('logo', 'empty', 'search', 'search')
  123. /// );
  124. /// @include grid-area(logo, $gridAreaMap, true);
  125. @mixin grid-area($area, $map, $columnGap: false, $rowGap: false) {
  126. // Init Vars
  127. $gridColumnStart: '';
  128. $gridColumnEnd: '';
  129. $gridRows: ();
  130. $gridRowHeight: '';
  131. $areaExists: 0;
  132.  
  133. // Output regular Area
  134. grid-area: $area;
  135.  
  136. // Generate Old Spec Coordinates based on Area
  137. .old-grid-spec & {
  138. // Get Width element
  139. @for $i from 1 through length($map) {
  140. @if sl-contain(map-get($map,row#{$i}), $area) {
  141. $areaExists: append($areaExists, 1);
  142. $gridRowHeight: append($gridRowHeight, $i);
  143. $gridColumnStart: index(map-get($map,row#{$i}), $area);
  144. $gridColumnEnd: sl-last-index(map-get($map,row#{$i}), $area);
  145. $gridRows: append($gridRows, $i);
  146. }
  147. }
  148.  
  149. // If Area exists in the Map
  150. @if length($areaExists) > 1 {
  151. // Convert Coordinate if Column Gap is active
  152. @if $columnGap {
  153. -ms-grid-column: $gridColumnStart + ($gridColumnStart - 1);
  154.  
  155. @if $gridColumnEnd - $gridColumnStart > 0 {
  156. -ms-grid-column-span: $gridColumnEnd - $gridColumnStart + 1 + ($gridColumnEnd - $gridColumnStart);
  157. }
  158.  
  159. } @else {
  160. -ms-grid-column: $gridColumnStart;
  161.  
  162. @if $gridColumnEnd - $gridColumnStart > 0 {
  163. -ms-grid-column-span: $gridColumnEnd - $gridColumnStart + 1;
  164. }
  165. }
  166.  
  167. // Add Row Coordinates
  168. @if nth($gridRows,1) > 1 or length($gridRowHeight) - 1 > 1 {
  169. // Convert Coordinate if Row Gap is active
  170. @if $rowGap {
  171. -ms-grid-row: nth($gridRows,1) + (nth($gridRows,1) - 1);
  172.  
  173. @if length($gridRowHeight) - 1 > 1 {
  174. -ms-grid-row-span: length($gridRowHeight) - 1 + (length($gridRowHeight));
  175. }
  176.  
  177. } @else {
  178. -ms-grid-row: nth($gridRows,1);
  179.  
  180. @if length($gridRowHeight) - 1 > 1 {
  181. -ms-grid-row-span: length($gridRowHeight) - 1;
  182. }
  183. }
  184. }
  185. }
  186. }
  187. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement