_responsive-logic.scss 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. /**
  2. * Repsonsive Styles
  3. */
  4. /**
  5. * Required Variables
  6. */
  7. $default_width: 620px;
  8. $alignwide_width: 790px
  9. $breakpoint_sm: 482px;
  10. $breakpoint_md: 592px;
  11. $breakpoint_lg: 652px;
  12. $breakpoint_xl: 822px;
  13. $breakpoint_xxl: 1024px;
  14. // Responsive breakpoints mixin
  15. @mixin media( $res ) {
  16. @if mobile-only == $res {
  17. @media only screen and (max-width: #{$breakpoint_sm - 1}) {
  18. @content;
  19. }
  20. }
  21. @if mobile == $res {
  22. @media only screen and (min-width: #{$breakpoint_sm}) {
  23. @content;
  24. }
  25. }
  26. @if tablet-only == $res {
  27. @media only screen and (max-width: #{$breakpoint_md - 1}) {
  28. @content;
  29. }
  30. }
  31. @if tablet == $res {
  32. @media only screen and (min-width: #{$breakpoint_md}) {
  33. @content;
  34. }
  35. }
  36. @if laptop-only == $res {
  37. @media only screen and (max-width: #{$breakpoint_lg - 1}) {
  38. @content;
  39. }
  40. }
  41. @if laptop == $res {
  42. @media only screen and (min-width: #{$breakpoint_lg}) {
  43. @content;
  44. }
  45. }
  46. @if desktop-only == $res {
  47. @media only screen and (max-width: #{$breakpoint_xl - 1}) {
  48. @content;
  49. }
  50. }
  51. @if desktop == $res {
  52. @media only screen and (min-width: #{$breakpoint_xl}) {
  53. @content;
  54. }
  55. }
  56. @if wide-only == $res {
  57. @media only screen and (max-width: #{$breakpoint_xxl - 1}) {
  58. @content;
  59. }
  60. }
  61. @if wide == $res {
  62. @media only screen and (min-width: #{$breakpoint_xxl}) {
  63. @content;
  64. }
  65. }
  66. }
  67. /**
  68. * Root Media Query Variables
  69. */
  70. :root {
  71. --responsive--spacing-horizontal: calc(2 * var(--global--spacing-horizontal));
  72. --responsive--aligndefault-width: calc(100vw - var(--responsive--spacing-horizontal));
  73. --responsive--alignwide-width: calc(100vw - var(--responsive--spacing-horizontal));
  74. --responsive--alignfull-width: 100%;
  75. --responsive--alignwide-width-multiplier: calc(16 * var(--global--spacing-horizontal));
  76. --responsive--alignright-margin: var(--global--spacing-horizontal);
  77. --responsive--alignleft-margin: var(--global--spacing-horizontal);
  78. }
  79. @include media(mobile) {
  80. :root {
  81. --responsive--alignright-margin: calc( 0.5 * (100vw - var(--responsive--aligndefault-width)));
  82. --responsive--alignleft-margin: calc( 0.5 * (100vw - var(--responsive--aligndefault-width)));
  83. }
  84. }
  85. @include media(laptop) {
  86. :root {
  87. --responsive--aligndefault-width: min(calc(100vw - 8 * var(--global--spacing-horizontal)), #{$default_width});
  88. --responsive--alignwide-width: min(calc(100vw - 8 * var(--global--spacing-horizontal)), #{$alignwide_width});
  89. }
  90. }
  91. /**
  92. * Extends
  93. */
  94. %responsive-aligndefault-width {
  95. max-width: var(--responsive--aligndefault-width);
  96. margin-left: auto;
  97. margin-right: auto;
  98. }
  99. %responsive-alignwide-width {
  100. max-width: var(--responsive--alignwide-width);
  101. margin-left: auto;
  102. margin-right: auto;
  103. }
  104. %responsive-alignfull-width-mobile {
  105. max-width: calc(100% + (2 * var(--global--spacing-horizontal)));
  106. width: calc(100% + (2 * var(--global--spacing-horizontal)));
  107. margin-left: calc(-1 * var(--global--spacing-horizontal));
  108. margin-right: auto;
  109. }
  110. @include media(mobile) {
  111. %responsive-alignfull-width {
  112. max-width: var(--responsive--alignfull-width);
  113. width: auto;
  114. margin-left: auto;
  115. margin-right: auto;
  116. }
  117. }
  118. %responsive-alignwide-width-nested {
  119. margin-left: auto;
  120. margin-right: auto;
  121. width: var(--responsive--alignwide-width);
  122. max-width: var(--responsive--alignfull-width);
  123. }
  124. %responsive-alignfull-width-nested {
  125. margin-left: auto;
  126. margin-right: auto;
  127. width: calc(var(--responsive--alignfull-width) - calc(2 * var(--responsive--spacing-horizontal)));
  128. max-width: var(--responsive--alignfull-width);
  129. }
  130. %responsive-alignleft-mobile {
  131. /*rtl:ignore*/
  132. margin-left: 0;
  133. /*rtl:ignore*/
  134. margin-right: var(--responsive--spacing-horizontal);
  135. }
  136. @include media(mobile) {
  137. %responsive-alignleft {
  138. /*rtl:ignore*/
  139. margin-left: var(--responsive--alignleft-margin);
  140. /*rtl:ignore*/
  141. margin-right: var(--global--spacing-horizontal);
  142. }
  143. }
  144. %responsive-alignright-mobile {
  145. /*rtl:ignore*/
  146. margin-left: var(--responsive--spacing-horizontal);
  147. /*rtl:ignore*/
  148. margin-right: 0;
  149. }
  150. @include media(mobile) {
  151. %responsive-alignright {
  152. /*rtl:ignore*/
  153. margin-left: var(--global--spacing-horizontal);
  154. /*rtl:ignore*/
  155. margin-right: var(--responsive--alignright-margin);
  156. }
  157. }
  158. /**
  159. * Output
  160. */
  161. .default-max-width {
  162. @extend %responsive-aligndefault-width;
  163. }
  164. .wide-max-width {
  165. @extend %responsive-alignwide-width;
  166. }
  167. .full-max-width {
  168. @extend %responsive-alignfull-width;
  169. }