menu.scss 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. /*!
  2. * Hamburgers
  3. * @description Tasty CSS-animated hamburgers
  4. * @author Jonathan Suh @jonsuh
  5. * @site https://jonsuh.com/hamburgers
  6. * @link https://github.com/jonsuh/hamburgers
  7. */
  8. .hamburger {
  9. padding-top: 10px;
  10. display: inline-block;
  11. cursor: pointer;
  12. transition-property: opacity, filter;
  13. transition-duration: 0.15s;
  14. transition-timing-function: linear;
  15. font: inherit;
  16. color: inherit;
  17. text-transform: none;
  18. background-color: transparent;
  19. border: 0;
  20. margin: 0;
  21. overflow: visible;
  22. }
  23. .hamburger:hover {
  24. opacity: 0.7;
  25. }
  26. .hamburger.is-active:hover {
  27. opacity: 0.7;
  28. }
  29. .hamburger.is-active .hamburger-inner,
  30. .hamburger.is-active .hamburger-inner::before,
  31. .hamburger.is-active .hamburger-inner::after {
  32. background-color: #000;
  33. }
  34. .hamburger-box {
  35. width: 30px;
  36. height: 24px;
  37. display: inline-block;
  38. position: relative;
  39. }
  40. .hamburger-inner {
  41. display: block;
  42. top: 50%;
  43. margin-top: -2px;
  44. }
  45. .hamburger-inner,
  46. .hamburger-inner::before,
  47. .hamburger-inner::after {
  48. width: 30px;
  49. height: 2px;
  50. background-color: var(--card-text-color-main);
  51. border-radius: 4px;
  52. position: absolute;
  53. transition-property: transform;
  54. transition-duration: 0.15s;
  55. transition-timing-function: ease;
  56. }
  57. .hamburger-inner::before,
  58. .hamburger-inner::after {
  59. content: "";
  60. display: block;
  61. }
  62. .hamburger-inner::before {
  63. top: -10px;
  64. }
  65. .hamburger-inner::after {
  66. bottom: -10px;
  67. }
  68. .hamburger--spin .hamburger-inner {
  69. transition-duration: 0.22s;
  70. transition-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  71. }
  72. .hamburger--spin .hamburger-inner::before {
  73. transition: top 0.1s 0.25s ease-in, opacity 0.1s ease-in;
  74. }
  75. .hamburger--spin .hamburger-inner::after {
  76. transition: bottom 0.1s 0.25s ease-in, transform 0.22s cubic-bezier(0.55, 0.055, 0.675, 0.19);
  77. }
  78. .hamburger--spin.is-active .hamburger-inner {
  79. transform: rotate(225deg);
  80. transition-delay: 0.12s;
  81. transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  82. }
  83. .hamburger--spin.is-active .hamburger-inner::before {
  84. top: 0;
  85. opacity: 0;
  86. transition: top 0.1s ease-out, opacity 0.1s 0.12s ease-out;
  87. }
  88. .hamburger--spin.is-active .hamburger-inner::after {
  89. bottom: 0;
  90. transform: rotate(-90deg);
  91. transition: bottom 0.1s ease-out, transform 0.22s 0.12s cubic-bezier(0.215, 0.61, 0.355, 1);
  92. }
  93. #toggle-menu {
  94. background: none;
  95. border: none;
  96. position: absolute;
  97. right: 0;
  98. top: 0;
  99. z-index: 2;
  100. cursor: pointer;
  101. [dir="rtl"] & {
  102. left: 0;
  103. right: auto;
  104. }
  105. @include respond(md) {
  106. display: none;
  107. }
  108. outline: none;
  109. &.is-active {
  110. .hamburger-inner,
  111. .hamburger-inner::before,
  112. .hamburger-inner::after {
  113. background-color: var(--accent-color);
  114. }
  115. }
  116. }
  117. /* Menu style */
  118. .menu {
  119. padding-left: 0;
  120. list-style: none;
  121. flex-direction: column;
  122. overflow-y: auto;
  123. flex-grow: 1;
  124. font-size: 1.4rem;
  125. background-color: var(--card-background);
  126. box-shadow: var(--shadow-l1);
  127. display: none;
  128. margin: 0 calc(var(--container-padding) * -1);
  129. padding: 30px 30px;
  130. @include respond(xl) {
  131. padding: 15px 0;
  132. }
  133. &,
  134. .menu-bottom-section {
  135. gap: 30px;
  136. @include respond(xl) {
  137. gap: 25px;
  138. }
  139. }
  140. &.show {
  141. display: flex;
  142. }
  143. @include respond(md) {
  144. align-items: flex-end;
  145. display: flex;
  146. background-color: transparent;
  147. padding: 0;
  148. box-shadow: none;
  149. margin: 0;
  150. }
  151. li {
  152. position: relative;
  153. vertical-align: middle;
  154. padding: 0;
  155. @include respond(md) {
  156. width: 100%;
  157. }
  158. svg {
  159. stroke-width: 1.33;
  160. width: 20px;
  161. height: 20px;
  162. }
  163. a {
  164. height: 100%;
  165. display: inline-flex;
  166. align-items: center;
  167. color: var(--body-text-color);
  168. gap: var(--menu-icon-separation);
  169. }
  170. span {
  171. flex: 1;
  172. }
  173. &.current {
  174. a {
  175. color: var(--accent-color);
  176. font-weight: bold;
  177. }
  178. }
  179. }
  180. .menu-bottom-section {
  181. margin-top: auto;
  182. display: flex;
  183. flex-direction: column;
  184. width: 100%;
  185. }
  186. }
  187. .social-menu {
  188. list-style: none;
  189. padding: 0;
  190. margin: 0;
  191. display: flex;
  192. flex-direction: row;
  193. gap: 10px;
  194. svg {
  195. width: 24px;
  196. height: 24px;
  197. stroke: var(--body-text-color);
  198. stroke-width: 1.33;
  199. }
  200. }