details.pcss.css

Same filename in this branch
  1. 11.x core/misc/dialog/off-canvas/css/details.pcss.css
  2. 11.x core/themes/olivero/css/components/details.pcss.css
  3. 11.x core/themes/claro/css/components/details.pcss.css
Same filename and directory in other branches
  1. 10 core/misc/dialog/off-canvas/css/details.pcss.css
  2. 10 core/themes/olivero/css/components/details.pcss.css
  3. 10 core/themes/claro/css/components/details.pcss.css
  4. 9 core/themes/olivero/css/components/details.pcss.css
  5. 9 core/themes/claro/css/components/details.pcss.css
  6. 8.9.x core/themes/claro/css/components/details.pcss.css
  7. main core/misc/dialog/off-canvas/css/details.pcss.css
  8. main core/themes/olivero/css/components/details.pcss.css
  9. main core/themes/claro/css/components/details.pcss.css
  10. main core/themes/admin/css/components/details.pcss.css

Collapsible details.

See also

collapse.js

File

core/themes/admin/css/components/details.pcss.css

View source
  1. /**
  2. * @file
  3. * Collapsible details.
  4. *
  5. * @see collapse.js
  6. */
  7. /**
  8. * Available modifiers are:
  9. * - .gin-details--accordion
  10. * - .gin-details--accordion-item
  11. *
  12. * Despite the fact that 'accordion' isn't used anywhere right now, we
  13. * implemented it (since the design defines that).
  14. * This variant can be used by setting the '#accordion' to TRUE for a
  15. * Details render element:
  16. * @code
  17. * $build['detail_accordion'] = [
  18. * '#type' => 'details',
  19. * '#accordion' => TRUE,
  20. * ];
  21. * @endcode
  22. *
  23. * 'Accordion item' is used for the details of the node edit sidebar. For
  24. * creating accordion item list from a set of details, set the surrounding
  25. * Container render element's '#accordion' key to TRUE.
  26. *
  27. * 'Vertical tabs item' is used for the children of the VerticalTabs render
  28. * element.
  29. */
  30. :root {
  31. --size-summary-border-radius: calc(var(--details-border-size-radius) - var(--details-border-size));
  32. --summary-accordion-padding-vertical: calc(var(--space-l) + ((var(--space-m) - var(--space-l)) / 2));
  33. --summary-accordion-line-height: var(--space-l);
  34. }
  35. .gin-details {
  36. display: block;
  37. margin-block: var(--space-m);
  38. color: var(--color-text);
  39. border: var(--details-border-size) solid var(--details-border-color);
  40. border-radius: var(--details-border-size-radius);
  41. background-color: var(--color-white);
  42. box-shadow: var(--details-box-shadow);
  43. /*
  44. * The following width and min-width values ensure that the
    element
  45. * does not shift widths when opening, in the event that a parent table
  46. * element constrains the width. This can happen when toggling the
  47. * "lazy-load" option within an image field.
  48. */
  49. td
  50. }
  51. .gin-details--accordion-item,
  52. .gin-details--vertical-tabs-item {
  53. margin-block: 0;
  54. border-radius: 0;
  55. box-shadow: none;
  56. }
  57. .gin-details--accordion-item:first-of-type {
  58. border-top-left-radius: var(--details-border-size-radius);
  59. border-top-right-radius: var(--details-border-size-radius);
  60. }
  61. .gin-details--accordion-item:last-of-type {
  62. border-bottom-right-radius: var(--details-border-size-radius);
  63. border-bottom-left-radius: var(--details-border-size-radius);
  64. }
  65. /**
  66. * Details summary styles.
  67. */
  68. .gin-details__summary {
  69. position: relative;
  70. box-sizing: border-box;
  71. padding-block: var(--space-m);
  72. padding-inline: var(--details-desktop-wrapper-padding-start) var(--space-m);
  73. list-style: none;
  74. cursor: pointer;
  75. transition: background-color var(--details-bg-color-transition-duration) ease-in-out;
  76. color: var(--color-gray-800);
  77. border-radius: var(--size-summary-border-radius);
  78. background-color: transparent;
  79. line-height: var(--space-m);
  80. }
  81. /* Modifiers */
  82. .gin-details__summary--accordion,
  83. .gin-details__summary--accordion-item,
  84. .gin-details__summary--vertical-tabs-item {
  85. padding-block: var(--summary-accordion-padding-vertical);
  86. padding-inline: var(--details-desktop-wrapper-padding-start) var(--space-l);
  87. background: var(--color-white);
  88. line-height: var(--summary-accordion-line-height);
  89. }
  90. /**
  91. * Accordion list items must not have border radius except they are the first
  92. * or the last ones.
  93. */
  94. .gin-details__summary--accordion-item {
  95. border-radius: 0;
  96. }
  97. .gin-details--accordion-item:first-child .gin-details__summary--accordion-item {
  98. border-top-left-radius: var(--details-border-size-radius);
  99. border-top-right-radius: var(--details-border-size-radius);
  100. }
  101. .gin-details--accordion-item:last-child .gin-details__summary--accordion-item {
  102. border-bottom-right-radius: var(--details-border-size-radius);
  103. border-bottom-left-radius: var(--details-border-size-radius);
  104. }
  105. /**
  106. * Details marker styles.
  107. */
  108. /* Remove the marker on Chrome */
  109. .gin-details__summary::-webkit-details-marker {
  110. display: none;
  111. }
  112. .gin-details__summary::before {
  113. position: absolute;
  114. inset-block-start: 50%;
  115. inset-inline-start: var(--space-s);
  116. display: inline-block;
  117. width: var(--space-m);
  118. height: var(--space-m);
  119. margin-block-start: calc(var(--space-m) / -2);
  120. content: "";
  121. transition: transform var(--details-transform-transition-duration) ease-in 0s;
  122. transform: rotate(90deg);
  123. text-align: center;
  124. background-image: url(../../images/icons/545560/chevron-right.svg);
  125. background-size: contain;
  126. [dir="rtl"]
  127. }
  128. @media (prefers-reduced-motion: reduce) {
  129. .gin-details__summary::before {
  130. transition: none;
  131. }
  132. }
  133. @media (forced-colors: active) {
  134. .gin-details__summary::before {
  135. width: 0.5625rem;
  136. height: 0.5625rem;
  137. transition:
  138. transform var(--details-transform-transition-duration) ease-in 0s,
  139. margin var(--details-transform-transition-duration) ease-in 0s;
  140. transform: rotate(135deg); /* LTR */
  141. border-block-start: 0.125rem solid;
  142. border-inline-end: 0.125rem solid;
  143. background: none;
  144. [dir="rtl"]
  145. }
  146. }
  147. /**
  148. * Safari (at least version 12.1) cannot handle our details marker
  149. * transition properly.
  150. *
  151. * Every additional pointer triggered toggle event freezes the transition,
  152. * and the transition is continued and finished after the pointer leaves
  153. * the Detail elements' summary.
  154. *
  155. * Even that it is possible to provide a JavaScript workaround for it (by
  156. * adding/removing a helper class with JavaScript if the Details is
  157. * toggled), that hack will make RTL details worse than without the hack.
  158. *
  159. * This weird query was found in
  160. * https://stackoverflow.com/questions/16348489#25975282 (based on the
  161. * answer it works for Safari 10.1+)
  162. */
  163. /* stylelint-disable-next-line unit-allowed-list */
  164. @media not all and (min-resolution: 0.001dpcm) {
  165. @supports (-webkit-appearance: none) {
  166. .gin-details__summary::before {
  167. transition: none;
  168. }
  169. }
  170. }
  171. /**
  172. * Details summary focus.
  173. */
  174. .gin-details__summary::after {
  175. position: absolute;
  176. inset: -1px;
  177. content: "";
  178. transition: opacity var(--details-box-shadow-transition-duration) ease-in-out;
  179. pointer-events: none;
  180. opacity: 0;
  181. border-radius: var(--details-border-size-radius);
  182. box-shadow: inset 0 0 0 var(--details-summary-focus-border-size) var(--details-summary-shadow-color);
  183. }
  184. .gin-details > .gin-details__summary--accordion-item::after,
  185. .vertical-tabs__item > .gin-details__summary--vertical-tabs-item::after {
  186. border-radius: 0;
  187. }
  188. .gin-details:first-child > .gin-details__summary--accordion-item::after,
  189. .vertical-tabs__item--first > .gin-details__summary--vertical-tabs-item::after {
  190. border-top-left-radius: var(--details-border-size-radius);
  191. border-top-right-radius: var(--details-border-size-radius);
  192. }
  193. .gin-details:last-child > .gin-details__summary--accordion-item::after,
  194. .vertical-tabs__item--last > .gin-details__summary--vertical-tabs-item::after {
  195. border-bottom-right-radius: var(--details-border-size-radius);
  196. border-bottom-left-radius: var(--details-border-size-radius);
  197. }
  198. /**
  199. * Focus box of accordions and accordion items must not have bottom border
  200. * radius if their accordion is expanded.
  201. */
  202. .gin-details[open] > .gin-details__summary--accordion::after,
  203. .gin-details[open] > .gin-details__summary--accordion-item::after,
  204. .vertical-tabs__item--last[open] > .gin-details__summary--vertical-tabs-item::after {
  205. border-bottom-right-radius: 0;
  206. border-bottom-left-radius: 0;
  207. }
  208. /**
  209. * Details summary states.
  210. */
  211. .gin-details__summary:focus {
  212. box-shadow: none;
  213. }
  214. [open] .gin-details__summary--accordion,
  215. [open] .gin-details__summary--accordion-item,
  216. [open] .gin-details__summary--vertical-tabs-item {
  217. color: var(--color-absolutezero);
  218. }
  219. .gin-details__summary:hover::before,
  220. .gin-details__summary:hover:focus::before,
  221. .gin-details[open] > .gin-details__summary:focus::before,
  222. .gin-details[open] > .gin-details__summary--accordion::before,
  223. .gin-details[open] > .gin-details__summary--accordion-item::before,
  224. .gin-details[open] > .gin-details__summary--vertical-tabs-item::before {
  225. background-image: url(../../images/icons/0036b1/chevron-right.svg);
  226. }
  227. .gin-details[open] > .gin-details__summary {
  228. border-radius: var(--size-summary-border-radius) var(--size-summary-border-radius) 0 0;
  229. }
  230. .gin-details[open] > .gin-details__summary::before {
  231. transform: rotate(-90deg); /* for LTR and RTL */
  232. }
  233. @media (forced-colors: active) {
  234. .gin-details__summary:hover::before,
  235. .gin-details__summary:hover:focus::before,
  236. .gin-details[open] > .gin-details__summary:focus::before {
  237. background: none;
  238. }
  239. .gin-details[open] > .gin-details__summary::before,
  240. [dir="rtl"] .gin-details[open] > .gin-details__summary::before {
  241. margin-block-start: -0.125rem;
  242. margin-inline-end: 0.125rem;
  243. transform: rotate(-45deg); /* for LTR and RTL */
  244. background: none;
  245. }
  246. }
  247. .gin-details[open] > .gin-details__summary--accordion,
  248. .gin-details[open] > .gin-details__summary--accordion-item,
  249. .gin-details[open] > .gin-details__summary--vertical-tabs-item {
  250. box-shadow: var(--details-box-shadow);
  251. }
  252. .gin-details__summary:hover {
  253. color: var(--color-absolutezero);
  254. background-color: var(--color-bgblue-hover);
  255. }
  256. /**
  257. * Focus styles.
  258. */
  259. /**
  260. * Active has to be here for Firefox.
  261. */
  262. [open] > .gin-details__summary--accordion:not(:focus, :active)::after,
  263. [open] > .gin-details__summary--accordion-item:not(:focus, :active)::after,
  264. [open] > .gin-details__summary--vertical-tabs-item:not(:focus, :active)::after {
  265. opacity: 1;
  266. border: var(--details-summary-focus-border-size) solid var(--color-absolutezero);
  267. border-width: 0 0 0 var(--details-summary-focus-border-size); /* LTR */
  268. box-shadow: none;
  269. [dir="rtl"]
  270. }
  271. .gin-details__summary:focus::after,
  272. .gin-details__summary:active::after {
  273. opacity: 1;
  274. }
  275. /**
  276. * Safari workaround.
  277. */
  278. /* stylelint-disable-next-line unit-allowed-list */
  279. @media not all and (min-resolution: 0.001dpcm) {
  280. @supports (-webkit-appearance: none) {
  281. .gin-details__summary::after {
  282. transition: none;
  283. }
  284. }
  285. }
  286. .gin-details[open] > .gin-details__summary:focus {
  287. color: var(--color-absolutezero);
  288. }
  289. /**
  290. * Details wrapper and content.
  291. *
  292. * Accordion and accordion-item variants should have an extra background.
  293. * In that case, we render an additional wrapper 'gin-details__content' that
  294. * creates the visual margins around the content, and use the original
  295. * wrapper for setting the background color.
  296. *
  297. * If there is no border or padding defined, margins of parent-child elements
  298. * collapse to the highest value. We want to take benefit of this behavior,
  299. * because the elements inside the details content won't cause too big
  300. * vertical spacing.
  301. */
  302. .gin-details__wrapper,
  303. .gin-details__content {
  304. margin: var(--space-m);
  305. }
  306. .gin-details__wrapper--accordion,
  307. .gin-details__wrapper--accordion-item,
  308. .gin-details__wrapper--vertical-tabs-item {
  309. margin: 0;
  310. }
  311. .gin-details__wrapper--accordion::before,
  312. .gin-details__wrapper--accordion::after,
  313. .gin-details__wrapper--accordion-item::before,
  314. .gin-details__wrapper--accordion-item::after,
  315. .gin-details__wrapper--vertical-tabs-item::before,
  316. .gin-details__wrapper--vertical-tabs-item::after {
  317. display: table;
  318. clear: both;
  319. content: "";
  320. }
  321. .gin-details__wrapper--accordion,
  322. .gin-details__wrapper--accordion-item,
  323. .gin-details__wrapper--vertical-tabs-item {
  324. border-top: var(--details-border-size) solid var(--details-border-color);
  325. background-color: var(--color-gray-050-o-40);
  326. }
  327. /* @see Drupal.behaviors.verticalTabs */
  328. @media screen and (min-width: 641px) {
  329. .gin-details__wrapper {
  330. margin: var(--space-l) var(--details-desktop-wrapper-padding-start);
  331. }
  332. .gin-details__wrapper--accordion,
  333. .gin-details__wrapper--accordion-item,
  334. .gin-details__wrapper--vertical-tabs-item {
  335. margin: 0;
  336. }
  337. .js .gin-details__wrapper--vertical-tabs-item {
  338. margin: 0;
  339. border-top: 0;
  340. background-color: transparent;
  341. }
  342. }
  343. .gin-details__content--accordion,
  344. .gin-details__content--accordion-item,
  345. .gin-details__content--vertical-tabs-item {
  346. margin: var(--space-m) var(--space-m) var(--space-l);
  347. }
  348. @media screen and (min-width: 85em) {
  349. .vertical-tabs .gin-details__content--vertical-tabs-item {
  350. margin: var(--space-l);
  351. }
  352. }
  353. /* Description. */
  354. .gin-details__description {
  355. margin-block-end: var(--space-m);
  356. color: var(--input-fg-color--description);
  357. font-size: var(--font-size-xs); /* ~13px */
  358. line-height: calc(17rem / 16); /* 17px */
  359. }
  360. .gin-details__description.is-disabled {
  361. color: var(--input--disabled-fg-color);
  362. }
  363. .gin-details__summary-summary {
  364. display: block;
  365. color: var(--color-gray-800);
  366. font-size: var(--font-size-s);
  367. font-weight: normal;
  368. }
  369. .required-mark::after {
  370. display: inline-block;
  371. width: 0.4375rem;
  372. height: 0.4375rem;
  373. margin-inline: 0.3em;
  374. content: "";
  375. vertical-align: super;
  376. background-image: url(../../images/core/ee0000/required.svg);
  377. background-repeat: no-repeat;
  378. background-size: 0.4375rem 0.4375rem;
  379. }

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