You are here

nav-primary.pcss.css in Drupal 10

Same filename and directory in other branches
  1. 9 core/themes/olivero/css/components/navigation/nav-primary.pcss.css

Nav Primary.

File

core/themes/olivero/css/components/navigation/nav-primary.pcss.css
View source
  1. /**
  2. * @file
  3. * Nav Primary.
  4. */
  5. @import "../../base/media-queries.pcss.css";
  6. .primary-nav__menu {
  7. flex-wrap: wrap;
  8. list-style: none;
  9. }
  10. .primary-nav__menu-item {
  11. margin-block-end: var(--sp0-5);
  12. &:last-child {
  13. margin-block-end: 0;
  14. }
  15. &.primary-nav__menu-item--has-children {
  16. display: flex;
  17. flex-wrap: wrap;
  18. justify-content: space-between;
  19. & .primary-nav__menu-link--link,
  20. & .primary-nav__menu-link--nolink {
  21. /* Ensure that long text doesn't make the mobile expand button wrap. */
  22. flex-basis: calc(100% - var(--sp3));
  23. }
  24. }
  25. }
  26. .primary-nav__menu-link {
  27. flex-grow: 1;
  28. text-decoration: none;
  29. color: var(--color-text-neutral-loud);
  30. font-size: 28px;
  31. font-weight: bold;
  32. line-height: var(--sp2);
  33. &:hover {
  34. color: inherit;
  35. }
  36. &:focus {
  37. outline: auto 2px var(--color--primary-50);
  38. outline-offset: 2px;
  39. }
  40. }
  41. .primary-nav__menu-link--nolink {
  42. padding-block: var(--sp0-5);
  43. padding-inline-start: 0;
  44. padding-inline-end: 0;
  45. color: var(--color-text-neutral-soft);
  46. font-weight: normal;
  47. }
  48. .primary-nav__menu-link--button {
  49. position: relative;
  50. padding-block: 0;
  51. padding-inline-start: 0;
  52. padding-inline-end: 0;
  53. cursor: pointer;
  54. text-align: start;
  55. border: 0;
  56. background: transparent;
  57. /* Plus icon for mobile navigation. */
  58. &.primary-nav__menu-link--has-children {
  59. padding-inline-end: var(--sp3); /* Ensure text does not overlap icon. */
  60. &:before,
  61. &:after {
  62. position: absolute;
  63. inset-inline-end: 9px;
  64. inset-block-start: calc(var(--sp0-5) + 17px); /* Visually align button with menu link text. */
  65. width: 18px;
  66. height: 0;
  67. content: "";
  68. /* Intentionally not using CSS logical properties. */
  69. border-top: solid 3px var(--color--primary-50);
  70. }
  71. &:after {
  72. transition: opacity 0.2s;
  73. transform: rotate(90deg);
  74. }
  75. &[aria-expanded="true"]:after {
  76. opacity: 0;
  77. }
  78. }
  79. }
  80. .primary-nav__menu-link-inner {
  81. position: relative;
  82. display: inline-flex;
  83. align-items: center;
  84. padding-block: var(--sp0-5);
  85. padding-inline-start: 0;
  86. padding-inline-end: 0;
  87. &:after {
  88. position: absolute;
  89. inset-block-end: 0;
  90. inset-inline-start: 0;
  91. width: 100%;
  92. height: 0;
  93. content: "";
  94. transition: transform 0.2s;
  95. transform: scaleX(0);
  96. transform-origin: left;
  97. /* Intentionally not using CSS logical properties. */
  98. border-top: solid 5px var(--color--primary-50);
  99. }
  100. &:after {
  101. @nest .primary-nav__menu-link:hover & {
  102. transform: scaleX(1);
  103. }
  104. }
  105. }
  106. /*
  107. Top level specific styles.
  108. */
  109. .primary-nav__menu--level-1 {
  110. margin-block: 0;
  111. margin-inline-start: 0;
  112. margin-inline-end: 0;
  113. padding-block: 0;
  114. padding-inline-start: 0;
  115. padding-inline-end: 0;
  116. }
  117. .primary-nav__menu-link--level-1 {
  118. position: relative;
  119. display: flex;
  120. letter-spacing: -1px;
  121. }
  122. /*
  123. Secondary menu specific styles.
  124. */
  125. .primary-nav__menu--level-2 {
  126. visibility: hidden;
  127. overflow: hidden;
  128. flex-basis: 100%;
  129. max-height: 0;
  130. margin-block: 0;
  131. margin-inline-start: calc(-1 * var(--sp));
  132. padding-inline-start: var(--sp2-5);
  133. transition: opacity 0.2s, visibility 0.2s, max-height 0.2s;
  134. opacity: 0;
  135. border-inline-start: solid var(--sp) var(--color--primary-50);
  136. &.is-active-menu-parent {
  137. visibility: visible;
  138. max-height: none;
  139. margin-block-start: var(--sp1-5);
  140. opacity: 1;
  141. }
  142. @media (--md) {
  143. margin-inline-start: calc(-1 * var(--sp3));
  144. padding-inline-start: var(--sp3);
  145. }
  146. }
  147. /*
  148. * Olivero doesn't officially support nested tertiary submenus, but this
  149. * ensures that it doesn't break all the way.
  150. *
  151. * @see https://www.drupal.org/project/drupal/issues/3221399
  152. */
  153. .primary-nav__menu--level-2 .primary-nav__menu-item--has-children {
  154. display: block;
  155. }
  156. .primary-nav__menu-link--level-2 {
  157. font-size: 16px;
  158. font-weight: normal;
  159. line-height: var(--sp);
  160. }
  161. html:not(.js) {
  162. & .primary-nav__menu--level-2 {
  163. visibility: visible;
  164. max-height: none;
  165. opacity: 1;
  166. }
  167. }
  168. [dir="rtl"] {
  169. & .primary-nav__menu-link-inner {
  170. &:after {
  171. transform-origin: right;
  172. }
  173. }
  174. }