admin-toolbar.pcss.css

Same filename and directory in other branches
  1. 10 core/modules/navigation/css/components/admin-toolbar.pcss.css
  2. 11.x core/modules/navigation/css/components/admin-toolbar.pcss.css

Admin Toolbar styles.

File

core/modules/navigation/css/components/admin-toolbar.pcss.css

View source
  1. /* cspell:ignore csvg cpath */
  2. /**
  3. * @file
  4. * Admin Toolbar styles.
  5. */
  6. @import "../base/media-queries.pcss.css";
  7. /**
  8. * Sidebar width is attached to the element because it's used as a
  9. * fallback value to the margin-inline-start property of the layout container.
  10. */
  11. body {
  12. --admin-toolbar-sidebar-width: 80vw;
  13. --admin-toolbar-sidebar-header: calc(3.75 * var(--admin-toolbar-rem));
  14. @media (--admin-toolbar-tablet) {
  15. --admin-toolbar-sidebar-width: calc(16.5 * var(--admin-toolbar-rem));
  16. }
  17. @media (--admin-toolbar-desktop) {
  18. --admin-toolbar-sidebar-width: calc(4.5 * var(--admin-toolbar-rem));
  19. [data-admin-toolbar="expanded"]
  20. }
  21. }
  22. /* We apply transitions after page load to avoid shifts. */
  23. [data-admin-toolbar-transitions] {
  24. :is(#extra-specificity-hack, [data-drupal-admin-styles]) {
  25. &.admin-toolbar {
  26. transition:
  27. visibility var(--admin-toolbar-transition),
  28. transform var(--admin-toolbar-transition);
  29. @media not (--admin-toolbar-desktop) {
  30. visibility: hidden;
  31. }
  32. @media (--admin-toolbar-desktop) {
  33. transition: width var(--admin-toolbar-transition);
  34. ~ .dialog-off-canvas-main-canvas {
  35. transition: margin-inline-start var(--admin-toolbar-transition);
  36. }
  37. }
  38. }
  39. }
  40. }
  41. /**
  42. * This zero height div has the [data-offset-left] attribute for
  43. * Drupal.displace() to measure. It purposefully does not have any transitions
  44. * because we want Drupal.displace() to measure the width immediately
  45. */
  46. :is(#extra-specificity-hack, [data-drupal-admin-styles]) {
  47. .admin-toolbar__displace-placeholder {
  48. position: absolute;
  49. inset-block-start: 0;
  50. inset-inline-start: 0;
  51. @media (--admin-toolbar-desktop) {
  52. width: var(--admin-toolbar-sidebar-width);
  53. }
  54. }
  55. }
  56. /**
  57. * The Admin toolbar component.
  58. */
  59. :is(#extra-specificity-hack, [data-drupal-admin-styles]) {
  60. &.admin-toolbar {
  61. position: fixed;
  62. inset-block-start: 0;
  63. inset-inline-start: 0;
  64. z-index: var(--admin-toolbar-z-index);
  65. display: flex;
  66. flex-direction: column;
  67. block-size: 100vh;
  68. transform: translateX(-100%);
  69. background-color: var(--admin-toolbar-color-white);
  70. font-family: var(--admin-toolbar-font-family);
  71. inline-size: calc(var(--admin-toolbar-sidebar-width) + 1px);
  72. [dir="rtl"]
  73. }
  74. & ~ .dialog-off-canvas-main-canvas {
  75. @media (--admin-toolbar-desktop) {
  76. margin-inline-start: var(--drupal-displace-offset-left, var(--admin-toolbar-sidebar-width));
  77. [dir="rtl"]
  78. }
  79. }
  80. [data-admin-toolbar="expanded"]
  81. @media (--admin-toolbar-desktop) {
  82. transform: none;
  83. inset-block-start: 0;
  84. }
  85. @media only screen and (max-height: 300px) {
  86. min-height: 20rem;
  87. }
  88. }
  89. .admin-toolbar__back-button {
  90. display: none;
  91. flex-grow: 0;
  92. }
  93. &.admin-toolbar:has([data-toolbar-popover-control][aria-expanded="true"]) {
  94. .admin-toolbar__back-button {
  95. display: flex;
  96. @media (--admin-toolbar-desktop) {
  97. display: none;
  98. }
  99. }
  100. .admin-toolbar__logo {
  101. display: none;
  102. @media (--admin-toolbar-desktop) {
  103. display: inline-flex;
  104. }
  105. }
  106. }
  107. .admin-toolbar__close-button {
  108. flex-grow: 0;
  109. justify-self: end;
  110. margin-inline-start: auto;
  111. @media (--admin-toolbar-desktop) {
  112. display: none;
  113. }
  114. }
  115. .admin-toolbar__expand-button {
  116. display: none;
  117. align-items: center;
  118. justify-content: center;
  119. width: calc(2.25 * var(--admin-toolbar-rem));
  120. height: calc(2.25 * var(--admin-toolbar-rem));
  121. margin-inline-start: calc(0.125 * var(--admin-toolbar-rem));
  122. cursor: pointer;
  123. color: var(--admin-toolbar-color-gray-800);
  124. border: 1px solid var(--admin-toolbar-color-gray-300);
  125. border-radius: 50%;
  126. background-color: transparent;
  127. &:hover {
  128. color: var(--admin-toolbar-color-gray-990);
  129. }
  130. @media (--admin-toolbar-desktop) {
  131. display: flex;
  132. }
  133. }
  134. .admin-toolbar__expand-button-chevron {
  135. flex-shrink: 0;
  136. fill: currentColor;
  137. width: calc(1 * var(--admin-toolbar-rem));
  138. height: calc(1 * var(--admin-toolbar-rem));
  139. transition:
  140. opacity var(--admin-toolbar-transition),
  141. rotate var(--admin-toolbar-transition);
  142. opacity: 0;
  143. [data-admin-toolbar-transitions]
  144. [dir="rtl"]
  145. .admin-toolbar__expand-button[aria-expanded="true"]
  146. }
  147. }
  148. .admin-toolbar__header {
  149. position: sticky;
  150. z-index: var(--admin-toolbar-z-index-header);
  151. inset-block-start: 0;
  152. display: flex;
  153. align-items: center;
  154. justify-content: space-between;
  155. margin-block-start: calc(var(--admin-toolbar-sidebar-header) * -1);
  156. padding-block-start: var(--admin-toolbar-space-16);
  157. padding-block-end: var(--admin-toolbar-space-4);
  158. background-color: var(--admin-toolbar-color-white);
  159. &:not(:has(.admin-toolbar__logo)) {
  160. @media (--admin-toolbar-desktop) {
  161. display: none;
  162. }
  163. }
  164. @media (--admin-toolbar-desktop) {
  165. position: static;
  166. align-items: start;
  167. margin-block-start: revert;
  168. padding-block-start: revert;
  169. }
  170. }
  171. .admin-toolbar__logo {
  172. display: inline-flex;
  173. overflow: hidden;
  174. border-radius: var(--admin-toolbar-space-8);
  175. &:hover {
  176. background-color: transparent;
  177. }
  178. & img {
  179. display: block;
  180. max-width: var(--admin-toolbar-space-40);
  181. }
  182. }
  183. /**
  184. * Scroll wrapper for Mobile.
  185. */
  186. .admin-toolbar__scroll-wrapper {
  187. display: flex;
  188. overflow-y: auto;
  189. flex-direction: column;
  190. height: 100%;
  191. border-inline-end: solid 1px transparent;
  192. background: linear-gradient(var(--admin-toolbar-color-white) 30%, var(--admin-toolbar-color-white)), radial-gradient(farthest-side at 50% 0, var(--admin-toolbar-color-shadow-15), var(--admin-toolbar-color-shadow-0));
  193. background-color: var(--admin-toolbar-color-white);
  194. background-repeat: no-repeat;
  195. background-attachment: local, scroll;
  196. background-position-y: 48px;
  197. background-size:
  198. 100% 40px,
  199. 100% 16px;
  200. @media (--admin-toolbar-desktop) {
  201. display: contents;
  202. overflow-y: unset;
  203. background: none;
  204. }
  205. }
  206. /**
  207. * Content region.
  208. * Region where most of the content will be printed.
  209. */
  210. .admin-toolbar__content {
  211. display: grid;
  212. gap: var(--admin-toolbar-space-12);
  213. padding-block: var(--admin-toolbar-sidebar-header) var(--admin-toolbar-space-16);
  214. padding-inline: var(--admin-toolbar-space-16);
  215. border-inline-end: 1px solid var(--admin-toolbar-color-gray-100);
  216. @media (--admin-toolbar-desktop) {
  217. display: flex;
  218. overflow-x: hidden;
  219. overflow-y: auto;
  220. flex-direction: column;
  221. flex-grow: 1;
  222. padding-block-start: var(--admin-toolbar-space-16);
  223. background:
  224. linear-gradient(var(--admin-toolbar-color-white) 30%, var(--admin-toolbar-color-white)),
  225. linear-gradient(var(--admin-toolbar-color-white), var(--admin-toolbar-color-white) 80%) 0 100%,
  226. radial-gradient(farthest-side at 50% 0, var(--admin-toolbar-color-shadow-15), var(--admin-toolbar-color-shadow-0)),
  227. radial-gradient(farthest-side at 50% 100%, var(--admin-toolbar-color-shadow-15), var(--admin-toolbar-color-shadow-0)) 0 100%;
  228. background-color: var(--admin-toolbar-color-white);
  229. background-repeat: no-repeat;
  230. background-attachment: local, local, scroll, scroll;
  231. background-size:
  232. 100% 40px,
  233. 100% 40px,
  234. 100% 16px,
  235. 100% 16px;
  236. }
  237. }
  238. /**
  239. * Sticky bottom region.
  240. * Region with less used items and button for collapse.
  241. */
  242. .admin-toolbar__footer {
  243. z-index: var(--admin-toolbar-z-index-footer);
  244. display: grid;
  245. gap: var(--admin-toolbar-space-4);
  246. margin-block-start: auto;
  247. padding: var(--admin-toolbar-space-16);
  248. border-block-start: 1px solid var(--admin-toolbar-color-gray-200);
  249. border-inline-end: 1px solid var(--admin-toolbar-color-gray-100);
  250. & > .toolbar-block {
  251. &:last-of-type {
  252. margin-block-end: var(--admin-toolbar-space-12);
  253. }
  254. }
  255. @media (--admin-toolbar-desktop) {
  256. --admin-toolbar-z-index-footer: -1;
  257. position: sticky;
  258. bottom: 0;
  259. background-color: var(--admin-toolbar-color-white);
  260. }
  261. }
  262. /**
  263. * Sidebar toggle.
  264. */
  265. .admin-toolbar__toggle {
  266. display: none;
  267. @media (--admin-toolbar-desktop) {
  268. display: flex;
  269. }
  270. }
  271. [data-drupal-tooltip]:hover + .admin-toolbar__tooltip,
  272. [data-drupal-tooltip]:focus + .admin-toolbar__tooltip {
  273. [data-admin-toolbar="expanded"]
  274. }
  275. }
  276. /**
  277. * Element is used to overlay the content when Toolbar is expanded in smaller devices.
  278. * It is created in the template templates/navigation.html.twig.
  279. */
  280. :is(#extra-specificity-hack, [data-drupal-admin-styles]) {
  281. &.admin-toolbar-overlay {
  282. position: fixed;
  283. z-index: var(--admin-toolbar-z-index-overlay);
  284. inset-block-start: 0;
  285. inset-inline-start: 0;
  286. display: none;
  287. width: 100vw;
  288. height: 100vh;
  289. background-color: rgb(0, 0, 0, 0.14);
  290. :where([data-admin-toolbar="expanded"])
  291. @media (forced-colors: active) {
  292. opacity: 0.14;
  293. background-color: canvasText;
  294. }
  295. @media (--admin-toolbar-desktop) {
  296. display: none;
  297. }
  298. }
  299. }

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.