You are here

vertical-tabs.pcss.css in Drupal 10

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