Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x

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. }
  103. }
  104. /*
  105. Top level specific styles.
  106. */
  107. .primary-nav__menu--level-1 {
  108. margin-block: 0;
  109. margin-inline-start: 0;
  110. margin-inline-end: 0;
  111. padding-block: 0;
  112. padding-inline-start: 0;
  113. padding-inline-end: 0;
  114. }
  115. .primary-nav__menu-link--level-1 {
  116. position: relative;
  117. display: flex;
  118. letter-spacing: -1px;
  119. }
  120. /*
  121. Secondary menu specific styles.
  122. */
  123. .primary-nav__menu--level-2 {
  124. visibility: hidden;
  125. overflow: hidden;
  126. flex-basis: 100%;
  127. max-height: 0;
  128. margin-block: 0;
  129. margin-inline-start: calc(-1 * var(--sp));
  130. padding-inline-start: var(--sp2-5);
  131. transition:
  132. opacity 0.2s,
  133. visibility 0.2s,
  134. max-height 0.2s;
  135. opacity: 0;
  136. border-inline-start: solid var(--sp) var(--color--primary-50);
  137. &.is-active-menu-parent {
  138. visibility: visible;
  139. max-height: none;
  140. margin-block-start: var(--sp1-5);
  141. opacity: 1;
  142. }
  143. & .primary-nav__menu-item--level-2 {
  144. &:first-child {
  145. padding-block-start: var(--sp0-25);
  146. }
  147. &:last-child {
  148. padding-block-end: var(--sp0-25);
  149. }
  150. }
  151. @media (--md) {
  152. margin-inline-start: calc(-1 * var(--sp3));
  153. padding-inline-start: var(--sp3);
  154. }
  155. }
  156. /*
  157. * Olivero doesn't officially support nested tertiary submenus, but this
  158. * ensures that it doesn't break all the way.
  159. *
  160. * @see https://www.drupal.org/project/drupal/issues/3221399
  161. */
  162. .primary-nav__menu--level-2 .primary-nav__menu-item--has-children {
  163. display: block;
  164. }
  165. .primary-nav__menu-link--level-2 {
  166. font-size: 16px;
  167. font-weight: normal;
  168. line-height: var(--sp);
  169. }
  170. html:not(.js) {
  171. & .primary-nav__menu--level-2 {
  172. visibility: visible;
  173. max-height: none;
  174. opacity: 1;
  175. }
  176. }
  177. [dir="rtl"] {
  178. & .primary-nav__menu-link-inner {
  179. &::after {
  180. transform-origin: right;
  181. }
  182. }
  183. }
RSS feed
Powered by Drupal