vertical-tabs.pcss.css

Same filename and directory in other branches
  1. 11.x core/themes/olivero/css/components/vertical-tabs.pcss.css
  2. 11.x core/themes/claro/css/components/vertical-tabs.pcss.css
  3. 9 core/themes/olivero/css/components/vertical-tabs.pcss.css
  4. 9 core/themes/claro/css/components/vertical-tabs.pcss.css
  5. 10 core/themes/olivero/css/components/vertical-tabs.pcss.css
  6. 10 core/themes/claro/css/components/vertical-tabs.pcss.css

Vertical tabs module.

Replaces /core/misc/vertical-tabs.css.

File

core/themes/claro/css/components/vertical-tabs.pcss.css

View source
  1. /**
  2. * @file
  3. * Vertical tabs module.
  4. *
  5. * Replaces /core/misc/vertical-tabs.css.
  6. */
  7. @import "../base/variables.pcss.css";
  8. :root {
  9. --vertical-tabs-margin-vertical: var(--space-s);
  10. --vertical-tabs-border-radius: var(--details-accordion-border-size-radius);
  11. --vertical-tabs-shadow: var(--details-box-shadow);
  12. --vertical-tabs-border-color: var(--details-border-color);
  13. --vertical-tabs-border-size: 1px;
  14. --vertical-tabs-border: var(--vertical-tabs-border-size) solid var(--vertical-tabs-border-color);
  15. --vertical-tabs-menu-item-shadow-extraspace: 0.5rem;
  16. --vertical-tabs-menu-separator-color: var(--color-lightgray);
  17. --vertical-tabs-menu-separator-size: 1px;
  18. --vertical-tabs-menu-width: 20em;
  19. --vertical-tabs-pane-width: calc(100% - var(--vertical-tabs-menu-width));
  20. --vertical-tabs-menu-link-focus-border-size: var(--details-summary-focus-border-size);
  21. --vertical-tabs-menu-link--active-border-size: 4px;
  22. --vertical-tabs-menu-link--active-border-color: var(--color-absolutezero);
  23. }
  24. /**
  25. * Main wrapper of vertical tabs.
  26. * This wrapper div is added by JavaScript.
  27. */
  28. .vertical-tabs {
  29. margin-top: var(--vertical-tabs-margin-vertical);
  30. margin-bottom: var(--vertical-tabs-margin-vertical);
  31. border-top: 1px solid transparent; /* Need to hide the pane wrapper clearfix's height */
  32. }
  33. @media screen and (-ms-high-contrast: active) {
  34. .vertical-tabs {
  35. border-color: transparent;
  36. }
  37. }
  38. /**
  39. * Vertical tabs menu.
  40. */
  41. .vertical-tabs__menu {
  42. position: relative;
  43. display: none;
  44. float: left; /* LTR */
  45. width: var(--vertical-tabs-menu-width);
  46. margin: 0;
  47. padding-top: var(--vertical-tabs-menu-item-shadow-extraspace);
  48. list-style: none;
  49. color: var(--color-text);
  50. }
  51. [dir="rtl"] .vertical-tabs__menu {
  52. float: right;
  53. margin: 0;
  54. }
  55. @media screen and (min-width: 85em) {
  56. .vertical-tabs__menu {
  57. display: block;
  58. width: var(--vertical-tabs-menu-width);
  59. }
  60. }
  61. /**
  62. * Vertical tabs menu item.
  63. */
  64. .vertical-tabs__menu-item {
  65. overflow: hidden;
  66. margin: calc(var(--vertical-tabs-menu-item-shadow-extraspace) * -2) calc(var(--vertical-tabs-border-size) * -1) calc(var(--vertical-tabs-menu-item-shadow-extraspace) * -1) calc(var(--vertical-tabs-menu-item-shadow-extraspace) * -1); /* LTR */
  67. padding: var(--vertical-tabs-menu-item-shadow-extraspace) 0 var(--vertical-tabs-menu-item-shadow-extraspace) var(--vertical-tabs-menu-item-shadow-extraspace); /* LTR */
  68. }
  69. [dir="rtl"] .vertical-tabs__menu-item {
  70. margin-right: calc(var(--vertical-tabs-menu-item-shadow-extraspace) * -1);
  71. margin-left: calc(var(--vertical-tabs-border-size) * -1);
  72. padding-right: var(--vertical-tabs-menu-item-shadow-extraspace);
  73. padding-left: 0;
  74. }
  75. /**
  76. * These are the (grey) lines that are visually separating the vertical tab menu
  77. * items.
  78. */
  79. .vertical-tabs__menu-item::before,
  80. .vertical-tabs__menu-item::after {
  81. position: absolute;
  82. z-index: 1; /* The line should be kept above the vertical tabs menu link to keep it visible even if the link is hovered and gets the 'hover' background color. */
  83. display: block;
  84. width: 100%;
  85. margin-top: calc(var(--vertical-tabs-menu-separator-size) * -1);
  86. border-top: var(--vertical-tabs-menu-separator-size) solid var(--vertical-tabs-menu-separator-color);
  87. }
  88. /**
  89. * This pseudo element covers the gray separator line of the vertical tab menu
  90. * item that follows the active one.
  91. *
  92. * Without this, we would have a lightgray line at the bottom-left (LTR) corner
  93. * of the active vertical tab menu item.
  94. *
  95. * Let's call this 'masking' line.
  96. */
  97. .vertical-tabs__menu-item::after {
  98. z-index: 2;
  99. border-color: var(--color-white);
  100. }
  101. /**
  102. * Making the separator line visible only if it follows an unhidden menu item.
  103. */
  104. .vertical-tabs__menu-item:not(.vertical-tabs__menu-item--hidden) ~ .vertical-tabs__menu-item::before {
  105. content: "";
  106. }
  107. /* Menu item states. */
  108. .vertical-tabs__menu-item:focus {
  109. outline: 0;
  110. box-shadow: none;
  111. }
  112. .vertical-tabs__menu-item.is-selected::before,
  113. .vertical-tabs__menu-item:not(.vertical-tabs__menu-item--hidden) ~ .vertical-tabs__menu-item.is-selected::before {
  114. content: normal;
  115. }
  116. /* Make the white masking line displayed for the selected menu item. */
  117. .vertical-tabs__menu-item.is-selected::after {
  118. content: "";
  119. }
  120. /**
  121. * Anchor link inside the vertical tabs menu item.
  122. */
  123. .vertical-tabs__menu-link {
  124. position: relative;
  125. display: block;
  126. margin-top: calc(var(--vertical-tabs-border-size) * -1);
  127. padding: var(--space-s) var(--space-s) var(--space-s) calc(var(--space-l) - var(--vertical-tabs-menu-link--active-border-size)); /* LTR */
  128. text-decoration: none;
  129. word-wrap: break-word;
  130. hyphens: auto;
  131. color: var(--color-text);
  132. border: var(--vertical-tabs-border-size) solid transparent;
  133. border-width: var(--vertical-tabs-border-size) 0 var(--vertical-tabs-border-size) var(--vertical-tabs-menu-link--active-border-size); /* LTR */
  134. border-radius: var(--vertical-tabs-border-radius) 0 0 var(--vertical-tabs-border-radius); /* LTR */
  135. }
  136. [dir="rtl"] .vertical-tabs__menu-link {
  137. padding-right: calc(var(--space-l) - var(--vertical-tabs-menu-link--active-border-size));
  138. padding-left: var(--space-s);
  139. border-width: var(--vertical-tabs-border-size) var(--vertical-tabs-menu-link--active-border-size) var(--vertical-tabs-border-size) 0;
  140. border-radius: 0 var(--vertical-tabs-border-radius) var(--vertical-tabs-border-radius) 0;
  141. }
  142. @media screen and (-ms-high-contrast: active) {
  143. .vertical-tabs__menu-link {
  144. border-color: transparent;
  145. }
  146. }
  147. /* Menu link states. */
  148. .vertical-tabs__menu-link:focus {
  149. z-index: 4; /* Focus state should be on the highest level to make the focus effect be fully visible. This also means that it should have bigger z-index than the selected link. */
  150. text-decoration: none;
  151. box-shadow: none;
  152. }
  153. .vertical-tabs__menu-link:hover {
  154. text-decoration: none;
  155. color: var(--color-absolutezero);
  156. }
  157. /* This pseudo element provides the background for the hover state. */
  158. .vertical-tabs__menu-link::before {
  159. position: absolute;
  160. z-index: 0; /* This should be on a lower level than the menu-item separator lines. */
  161. top: calc(var(--vertical-tabs-border-size) * -1);
  162. right: 0; /* LTR */
  163. bottom: calc(var(--vertical-tabs-border-size) * -1);
  164. left: calc(var(--vertical-tabs-menu-link--active-border-size) * -1); /* LTR */
  165. content: "";
  166. pointer-events: none;
  167. background-clip: padding-box;
  168. }
  169. [dir="rtl"] .vertical-tabs__menu-link::before {
  170. right: calc(var(--vertical-tabs-menu-link--active-border-size) * -1);
  171. left: 0;
  172. }
  173. .vertical-tabs__menu-link:hover::before {
  174. background: var(--color-bgblue-hover);
  175. }
  176. .vertical-tabs__menu-link:focus::after {
  177. position: absolute;
  178. top: 0;
  179. right: 0;
  180. bottom: 0;
  181. left: 0;
  182. margin: calc(var(--vertical-tabs-border-size) * -1) calc(var(--vertical-tabs-menu-link--active-border-size) * -1);
  183. content: "";
  184. pointer-events: none;
  185. border: var(--vertical-tabs-menu-link-focus-border-size) solid var(--color-focus);
  186. border-radius: var(--vertical-tabs-border-radius);
  187. }
  188. .vertical-tabs__menu-item.is-selected .vertical-tabs__menu-link {
  189. z-index: 3; /* The selected menu link should be on a higher level than the white masking line that hides the grey separator. */
  190. color: var(--color-absolutezero);
  191. border-color: var(--vertical-tabs-border-color) transparent;
  192. background-color: var(--color-white);
  193. box-shadow: var(--vertical-tabs-shadow);
  194. }
  195. .vertical-tabs__menu-item.is-selected .vertical-tabs__menu-link:hover {
  196. color: var(--color-absolutezero-hover);
  197. background-color: var(--color-bgblue-hover);
  198. }
  199. .vertical-tabs__menu-item.is-selected .vertical-tabs__menu-link::before {
  200. z-index: 1; /* The blue active-tab indication should be on a higher level than the green focus border. */
  201. border-left: var(--vertical-tabs-menu-link--active-border-size) solid var(--vertical-tabs-menu-link--active-border-color); /* LTR */
  202. border-radius: var(--base-border-radius) 0 0 var(--base-border-radius); /* LTR */
  203. }
  204. [dir=rtl] .vertical-tabs__menu-item.is-selected .vertical-tabs__menu-link::before {
  205. border-right: var(--vertical-tabs-menu-link--active-border-size) solid var(--vertical-tabs-menu-link--active-border-color);
  206. border-left: 0;
  207. border-radius: 0 var(--base-border-radius) var(--base-border-radius) 0;
  208. }
  209. .vertical-tabs__menu-item.is-selected .vertical-tabs__menu-link:hover::before {
  210. background: none;
  211. }
  212. @media screen and (-ms-high-contrast: active) {
  213. .vertical-tabs__menu-item.is-selected .vertical-tabs__menu-link {
  214. border-color: windowText transparent;
  215. }
  216. .vertical-tabs__menu-link:focus::after {
  217. border-color: transparent;
  218. }
  219. .vertical-tabs__menu-item.is-selected .vertical-tabs__menu-link::before {
  220. border-color: windowText;
  221. }
  222. }
  223. .vertical-tabs__menu-link-content {
  224. position: relative;
  225. z-index: 1; /* We are using a pseudo element for displaying the hover state's background, and we have to keep the link content above that pseudo element. Without this, the text would be covered by the background. */
  226. }
  227. /**
  228. * Details summary in vertical tabs menu link and in the summary of the details.
  229. */
  230. .vertical-tabs__menu-link-summary,
  231. .vertical-tabs__details-summary-summary {
  232. display: block;
  233. color: var(--color-davysgrey);
  234. font-size: var(--font-size-s);
  235. font-weight: normal;
  236. }
  237. /**
  238. * Wrapper of vertical tabs panes.
  239. */
  240. .vertical-tabs__items {
  241. box-sizing: border-box;
  242. margin-top: var(--vertical-tabs-margin-vertical);
  243. margin-bottom: var(--vertical-tabs-margin-vertical);
  244. color: var(--color-text);
  245. border: var(--vertical-tabs-border);
  246. border-radius: var(--vertical-tabs-border-radius);
  247. background-color: var(--color-white);
  248. box-shadow: var(--vertical-tabs-shadow);
  249. }
  250. /* This modifier is added by JavaScript (this is inherited from Drupal core). */
  251. .vertical-tabs__items--processed {
  252. position: relative;
  253. z-index: 1; /* The wrapper of the details of the vertical tabs should be on a higher level than the vertical tabs menu */
  254. top: -1px;
  255. margin-top: 0;
  256. margin-bottom: 0;
  257. }
  258. /* This clearfix makes the pane wrapper at least as tall as the menu. */
  259. .vertical-tabs__items--processed::after {
  260. display: block;
  261. clear: both;
  262. content: "";
  263. }
  264. @media screen and (min-width: 85em) {
  265. .vertical-tabs__items--processed {
  266. margin-left: var(--vertical-tabs-menu-width); /* LTR */
  267. border-top-left-radius: 0; /* LTR */
  268. }
  269. .js[dir="rtl"] .vertical-tabs__items--processed {
  270. margin-right: var(--vertical-tabs-menu-width);
  271. margin-left: 0;
  272. border-top-left-radius: var(--vertical-tabs-border-radius);
  273. border-top-right-radius: 0;
  274. }
  275. }
  276. /**
  277. * The actual vertical tabs pane.
  278. *
  279. * This is a claro-details element which in this case is also
  280. * vertical-tabs__item.
  281. */
  282. .vertical-tabs__item {
  283. /* Render on top of the border of vertical-tabs__items. */
  284. margin: calc(var(--vertical-tabs-border-size) * -1) calc(var(--vertical-tabs-border-size) * -1) 0;
  285. border-radius: 0;
  286. }
  287. .vertical-tabs__item--first {
  288. border-top-left-radius: var(--details-accordion-border-size-radius);
  289. border-top-right-radius: var(--details-accordion-border-size-radius);
  290. }
  291. .vertical-tabs__item--last {
  292. margin-bottom: calc(var(--vertical-tabs-border-size) * -1);
  293. border-bottom-right-radius: var(--details-accordion-border-size-radius);
  294. border-bottom-left-radius: var(--details-accordion-border-size-radius);
  295. }
  296. @media screen and (min-width: 85em) {
  297. .js .vertical-tabs__item {
  298. overflow: hidden;
  299. margin: 0;
  300. border: 0;
  301. }
  302. .js .vertical-tabs__item--first,
  303. .js .vertical-tabs__item--last {
  304. border-radius: 0;
  305. }
  306. .js .vertical-tabs__item > summary {
  307. display: none;
  308. }
  309. }

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