You are here

vertical-tabs.pcss.css in Drupal 9

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