_flex-box.scss 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. // CSS3 Flexible Box Model and property defaults
  2. // Custom shorthand notation for flexbox
  3. @mixin box($orient: inline-axis, $pack: start, $align: stretch) {
  4. @include display-box;
  5. @include box-orient($orient);
  6. @include box-pack($pack);
  7. @include box-align($align);
  8. }
  9. @mixin display-box {
  10. display: -webkit-box;
  11. display: -moz-box;
  12. display: -ms-flexbox; // IE 10
  13. display: box;
  14. }
  15. @mixin box-orient($orient: inline-axis) {
  16. // horizontal|vertical|inline-axis|block-axis|inherit
  17. @include prefixer(box-orient, $orient, webkit moz spec);
  18. }
  19. @mixin box-pack($pack: start) {
  20. // start|end|center|justify
  21. @include prefixer(box-pack, $pack, webkit moz spec);
  22. -ms-flex-pack: $pack; // IE 10
  23. }
  24. @mixin box-align($align: stretch) {
  25. // start|end|center|baseline|stretch
  26. @include prefixer(box-align, $align, webkit moz spec);
  27. -ms-flex-align: $align; // IE 10
  28. }
  29. @mixin box-direction($direction: normal) {
  30. // normal|reverse|inherit
  31. @include prefixer(box-direction, $direction, webkit moz spec);
  32. -ms-flex-direction: $direction; // IE 10
  33. }
  34. @mixin box-lines($lines: single) {
  35. // single|multiple
  36. @include prefixer(box-lines, $lines, webkit moz spec);
  37. }
  38. @mixin box-ordinal-group($int: 1) {
  39. @include prefixer(box-ordinal-group, $int, webkit moz spec);
  40. -ms-flex-order: $int; // IE 10
  41. }
  42. @mixin box-flex($value: 0) {
  43. @include prefixer(box-flex, $value, webkit moz spec);
  44. -ms-flex: $value; // IE 10
  45. }
  46. @mixin box-flex-group($int: 1) {
  47. @include prefixer(box-flex-group, $int, webkit moz spec);
  48. }
  49. // CSS3 Flexible Box Model and property defaults
  50. // Unified attributes for 2009, 2011, and 2012 flavours.
  51. // 2009 - display (box | inline-box)
  52. // 2011 - display (flexbox | inline-flexbox)
  53. // 2012 - display (flex | inline-flex)
  54. @mixin display($value) {
  55. // flex | inline-flex
  56. @if $value == "flex" {
  57. // 2009
  58. display: -webkit-box;
  59. display: -moz-box;
  60. display: box;
  61. // 2012
  62. display: -webkit-flex;
  63. display: -moz-flex;
  64. display: -ms-flexbox; // 2011 (IE 10)
  65. display: flex;
  66. } @else if $value == "inline-flex" {
  67. display: -webkit-inline-box;
  68. display: -moz-inline-box;
  69. display: inline-box;
  70. display: -webkit-inline-flex;
  71. display: -moz-inline-flex;
  72. display: -ms-inline-flexbox;
  73. display: inline-flex;
  74. } @else {
  75. display: $value;
  76. }
  77. }
  78. // 2009 - box-flex (integer)
  79. // 2011 - flex (decimal | width decimal)
  80. // 2012 - flex (integer integer width)
  81. @mixin flex($value) {
  82. // Grab flex-grow for older browsers.
  83. $flex-grow: nth($value, 1);
  84. // 2009
  85. @include prefixer(box-flex, $flex-grow, webkit moz spec);
  86. // 2011 (IE 10), 2012
  87. @include prefixer(flex, $value, webkit moz ms spec);
  88. }
  89. // 2009 - box-orient ( horizontal | vertical | inline-axis | block-axis)
  90. // - box-direction (normal | reverse)
  91. // 2011 - flex-direction (row | row-reverse | column | column-reverse)
  92. // 2012 - flex-direction (row | row-reverse | column | column-reverse)
  93. @mixin flex-direction($value: row) {
  94. // Alt values.
  95. $value-2009: $value;
  96. $value-2011: $value;
  97. $direction: normal;
  98. @if $value == row {
  99. $value-2009: horizontal;
  100. } @else if $value == "row-reverse" {
  101. $value-2009: horizontal;
  102. $direction: reverse;
  103. } @else if $value == column {
  104. $value-2009: vertical;
  105. } @else if $value == "column-reverse" {
  106. $value-2009: vertical;
  107. $direction: reverse;
  108. }
  109. // 2009
  110. @include prefixer(box-orient, $value-2009, webkit moz spec);
  111. @include prefixer(box-direction, $direction, webkit moz spec);
  112. // 2012
  113. @include prefixer(flex-direction, $value, webkit moz spec);
  114. // 2011 (IE 10)
  115. -ms-flex-direction: $value;
  116. }
  117. // 2009 - box-lines (single | multiple)
  118. // 2011 - flex-wrap (nowrap | wrap | wrap-reverse)
  119. // 2012 - flex-wrap (nowrap | wrap | wrap-reverse)
  120. @mixin flex-wrap($value: nowrap) {
  121. // Alt values
  122. $alt-value: $value;
  123. @if $value == nowrap {
  124. $alt-value: single;
  125. } @else if $value == wrap {
  126. $alt-value: multiple;
  127. } @else if $value == "wrap-reverse" {
  128. $alt-value: multiple;
  129. }
  130. @include prefixer(box-lines, $alt-value, webkit moz spec);
  131. @include prefixer(flex-wrap, $value, webkit moz ms spec);
  132. }
  133. // 2009 - TODO: parse values into flex-direction/flex-wrap
  134. // 2011 - TODO: parse values into flex-direction/flex-wrap
  135. // 2012 - flex-flow (flex-direction || flex-wrap)
  136. @mixin flex-flow($value) {
  137. @include prefixer(flex-flow, $value, webkit moz spec);
  138. }
  139. // 2009 - box-ordinal-group (integer)
  140. // 2011 - flex-order (integer)
  141. // 2012 - order (integer)
  142. @mixin order($int: 0) {
  143. // 2009
  144. @include prefixer(box-ordinal-group, $int, webkit moz spec);
  145. // 2012
  146. @include prefixer(order, $int, webkit moz spec);
  147. // 2011 (IE 10)
  148. -ms-flex-order: $int;
  149. }
  150. // 2012 - flex-grow (number)
  151. @mixin flex-grow($number: 0) {
  152. @include prefixer(flex-grow, $number, webkit moz spec);
  153. -ms-flex-positive: $number;
  154. }
  155. // 2012 - flex-shrink (number)
  156. @mixin flex-shrink($number: 1) {
  157. @include prefixer(flex-shrink, $number, webkit moz spec);
  158. -ms-flex-negative: $number;
  159. }
  160. // 2012 - flex-basis (number)
  161. @mixin flex-basis($width: auto) {
  162. @include prefixer(flex-basis, $width, webkit moz spec);
  163. -ms-flex-preferred-size: $width;
  164. }
  165. // 2009 - box-pack (start | end | center | justify)
  166. // 2011 - flex-pack (start | end | center | justify)
  167. // 2012 - justify-content (flex-start | flex-end | center | space-between | space-around)
  168. @mixin justify-content($value: flex-start) {
  169. // Alt values.
  170. $alt-value: $value;
  171. @if $value == "flex-start" {
  172. $alt-value: start;
  173. } @else if $value == "flex-end" {
  174. $alt-value: end;
  175. } @else if $value == "space-between" {
  176. $alt-value: justify;
  177. } @else if $value == "space-around" {
  178. $alt-value: distribute;
  179. }
  180. // 2009
  181. @include prefixer(box-pack, $alt-value, webkit moz spec);
  182. // 2012
  183. @include prefixer(justify-content, $value, webkit moz ms o spec);
  184. // 2011 (IE 10)
  185. -ms-flex-pack: $alt-value;
  186. }
  187. // 2009 - box-align (start | end | center | baseline | stretch)
  188. // 2011 - flex-align (start | end | center | baseline | stretch)
  189. // 2012 - align-items (flex-start | flex-end | center | baseline | stretch)
  190. @mixin align-items($value: stretch) {
  191. $alt-value: $value;
  192. @if $value == "flex-start" {
  193. $alt-value: start;
  194. } @else if $value == "flex-end" {
  195. $alt-value: end;
  196. }
  197. // 2009
  198. @include prefixer(box-align, $alt-value, webkit moz spec);
  199. // 2012
  200. @include prefixer(align-items, $value, webkit moz ms o spec);
  201. // 2011 (IE 10)
  202. -ms-flex-align: $alt-value;
  203. }
  204. // 2011 - flex-item-align (auto | start | end | center | baseline | stretch)
  205. // 2012 - align-self (auto | flex-start | flex-end | center | baseline | stretch)
  206. @mixin align-self($value: auto) {
  207. $value-2011: $value;
  208. @if $value == "flex-start" {
  209. $value-2011: start;
  210. } @else if $value == "flex-end" {
  211. $value-2011: end;
  212. }
  213. // 2012
  214. @include prefixer(align-self, $value, webkit moz spec);
  215. // 2011 (IE 10)
  216. -ms-flex-item-align: $value-2011;
  217. }
  218. // 2011 - flex-line-pack (start | end | center | justify | distribute | stretch)
  219. // 2012 - align-content (flex-start | flex-end | center | space-between | space-around | stretch)
  220. @mixin align-content($value: stretch) {
  221. $value-2011: $value;
  222. @if $value == "flex-start" {
  223. $value-2011: start;
  224. } @else if $value == "flex-end" {
  225. $value-2011: end;
  226. } @else if $value == "space-between" {
  227. $value-2011: justify;
  228. } @else if $value == "space-around" {
  229. $value-2011: distribute;
  230. }
  231. // 2012
  232. @include prefixer(align-content, $value, webkit moz spec);
  233. // 2011 (IE 10)
  234. -ms-flex-line-pack: $value-2011;
  235. }