You are here

details.css in Drupal 10

Collapsible details.

See also

collapse.js

File

core/themes/claro/css/components/details.css
View source
  1. /*
  2. * DO NOT EDIT THIS FILE.
  3. * See the following change record for more information,
  4. * https://www.drupal.org/node/3084859
  5. * @preserve
  6. */
  7. /**
  8. * @file
  9. * Collapsible details.
  10. *
  11. * @see collapse.js
  12. */
  13. /**
  14. * Available modifiers are:
  15. * - .claro-details--accordion
  16. * - .claro-details--accordion-item
  17. *
  18. * Despite the fact that 'accordion' isn't used anywhere right now, we
  19. * implemented it (since the design defines that).
  20. * This variant can be used by setting the '#accordion' to TRUE for a
  21. * Details render element:
  22. * @code
  23. * $build['detail_accordion'] = [
  24. * '#type' => 'details',
  25. * '#accordion' => TRUE,
  26. * ];
  27. *
  28. * 'Accordion item' is used for the details of the node edit sidebar. For
  29. * creating accordion item list from a set of details, set the surrounding
  30. * Container render element's '#accordion' key to TRUE.
  31. *
  32. * 'Vertical tabs item' is used for the children of the VerticalTabs render
  33. * element.
  34. */
  35. :root {
  36. --size-summary-border-radius: calc(var(--details-border-size-radius) - var(--details-border-size));
  37. --summary-accordion-padding-vertical: calc(var(--space-l) + ((var(--space-m) - var(--space-l)) / 2));
  38. --summary-accordion-line-height: var(--space-l);
  39. }
  40. .claro-details {
  41. display: block;
  42. margin-top: var(--space-m);
  43. margin-bottom: var(--space-m);
  44. color: var(--color-text);
  45. border: var(--details-border-size) solid var(--details-border-color);
  46. border-radius: var(--details-border-size-radius);
  47. background-color: var(--color-white);
  48. box-shadow: var(--details-box-shadow)
  49. /*
  50. * The following width and min-width values ensure that the
    element
  51. * does not shift widths when opening, in the event that a parent table
  52. * element constrains the width. This can happen when toggling the
  53. * "lazy-load" option within an image field.
  54. */
  55. }
  56. td .claro-details {
  57. width: min-content;
  58. min-width: 100%
  59. }
  60. .claro-details--accordion-item,
  61. .claro-details--vertical-tabs-item {
  62. margin-top: 0;
  63. margin-bottom: 0;
  64. border-radius: 0;
  65. box-shadow: none;
  66. }
  67. .claro-details--accordion-item:first-of-type {
  68. border-top-left-radius: var(--details-border-size-radius);
  69. border-top-right-radius: var(--details-border-size-radius);
  70. }
  71. .claro-details--accordion-item:last-of-type {
  72. border-bottom-right-radius: var(--details-border-size-radius);
  73. border-bottom-left-radius: var(--details-border-size-radius);
  74. }
  75. /**
  76. * Details summary styles.
  77. */
  78. .claro-details__summary {
  79. position: relative;
  80. box-sizing: border-box;
  81. padding: var(--space-m) var(--space-m) var(--space-m) var(--details-desktop-wrapper-padding-start); /* LTR */
  82. list-style: none;
  83. cursor: pointer;
  84. transition: background-color var(--details-bg-color-transition-duration) ease-in-out;
  85. word-wrap: break-word;
  86. -webkit-hyphens: auto;
  87. hyphens: auto;
  88. color: var(--color-gray-800);
  89. border-radius: var(--size-summary-border-radius);
  90. background-color: transparent;
  91. line-height: var(--space-m);
  92. }
  93. [dir="rtl"] .claro-details__summary {
  94. padding-right: var(--details-desktop-wrapper-padding-start);
  95. padding-left: var(--space-m);
  96. }
  97. /* Modifiers */
  98. .claro-details__summary--accordion,
  99. .claro-details__summary--accordion-item,
  100. .claro-details__summary--vertical-tabs-item {
  101. padding: var(--summary-accordion-padding-vertical) var(--space-l) var(--summary-accordion-padding-vertical) var(--details-desktop-wrapper-padding-start); /* LTR */
  102. background: var(--color-white);
  103. line-height: var(--summary-accordion-line-height);
  104. }
  105. [dir="rtl"] .claro-details__summary--accordion,
  106. [dir="rtl"] .claro-details__summary--accordion-item,
  107. [dir="rtl"] .claro-details__summary--vertical-tabs-item {
  108. padding-right: var(--details-desktop-wrapper-padding-start);
  109. padding-left: var(--space-l);
  110. }
  111. /**
  112. * Accordion list items must not have border radius except they are the first
  113. * or the last ones.
  114. */
  115. .claro-details__summary--accordion-item {
  116. border-radius: 0;
  117. }
  118. .claro-details--accordion-item:first-child .claro-details__summary--accordion-item {
  119. border-top-left-radius: var(--details-border-size-radius);
  120. border-top-right-radius: var(--details-border-size-radius);
  121. }
  122. .claro-details--accordion-item:last-child .claro-details__summary--accordion-item {
  123. border-bottom-right-radius: var(--details-border-size-radius);
  124. border-bottom-left-radius: var(--details-border-size-radius);
  125. }
  126. /**
  127. * Details marker styles.
  128. */
  129. /* Remove the marker on Chrome */
  130. .claro-details__summary::-webkit-details-marker {
  131. display: none;
  132. }
  133. .claro-details__summary::before {
  134. position: absolute;
  135. top: 50%;
  136. left: var(--space-s); /* LTR */
  137. display: inline-block;
  138. width: var(--space-m);
  139. height: var(--space-m);
  140. margin-top: calc(var(--space-m) / -2);
  141. content: "";
  142. transition: transform var(--details-transform-transition-duration) ease-in 0s;
  143. transform: rotate(90deg); /* LTR */
  144. text-align: center;
  145. background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3e%3cpath d='M5.21 1.314L3.79 2.723l5.302 5.353-5.303 5.354 1.422 1.408 6.697-6.762z' fill='%23545560'/%3e%3c/svg%3e");
  146. background-size: contain;
  147. }
  148. [dir="rtl"] .claro-details__summary::before {
  149. right: var(--space-s);
  150. left: auto;
  151. transform: rotate(-270deg);
  152. }
  153. @media (prefers-reduced-motion: reduce) {
  154. .claro-details__summary::before {
  155. transition: none;
  156. }
  157. }
  158. @media (forced-colors: active) {
  159. .claro-details__summary::before {
  160. width: 0.5625rem;
  161. height: 0.5625rem;
  162. transition: transform var(--details-transform-transition-duration) ease-in 0s, margin var(--details-transform-transition-duration) ease-in 0s;
  163. transform: rotate(135deg); /* LTR */
  164. border-top: 0.125rem solid;
  165. border-right: 0.125rem solid;
  166. background: none;
  167. }
  168. [dir="rtl"] .claro-details__summary::before {
  169. transform: rotate(-225deg);
  170. }
  171. }
  172. /**
  173. * Safari (at least version 12.1) cannot handle our details marker
  174. * transition properly.
  175. *
  176. * Every additional pointer triggered toggle event freezes the transition,
  177. * and the transition is continued and finished after the pointer leaves
  178. * the Detail elements' summary.
  179. *
  180. * Even that it is possible to provide a JavaScript workaround for it (by
  181. * adding/removing a helper class with JavaScript if the Details is
  182. * toggled), that hack will make RTL details worse than without the hack.
  183. *
  184. * This weird query was found in
  185. * https://stackoverflow.com/questions/16348489#25975282 (based on the
  186. * answer it works for Safari 10.1+)
  187. */
  188. /* stylelint-disable-next-line unit-allowed-list */
  189. @media not all and (min-resolution: 0.001dpcm) {
  190. @supports (-webkit-appearance: none) {
  191. .claro-details__summary::before {
  192. transition: none;
  193. }
  194. }
  195. }
  196. /**
  197. * Details summary focus.
  198. */
  199. .claro-details__summary::after {
  200. position: absolute;
  201. top: -1px;
  202. right: -1px;
  203. bottom: -1px;
  204. left: -1px;
  205. content: "";
  206. transition: opacity var(--details-box-shadow-transition-duration) ease-in-out;
  207. pointer-events: none;
  208. opacity: 0;
  209. border-radius: var(--details-border-size-radius);
  210. box-shadow: inset 0 0 0 var(--details-summary-focus-border-size) var(--details-summary-shadow-color);
  211. }
  212. .claro-details > .claro-details__summary--accordion-item::after,
  213. .vertical-tabs__item > .claro-details__summary--vertical-tabs-item::after {
  214. border-radius: 0;
  215. }
  216. .claro-details:first-child > .claro-details__summary--accordion-item::after,
  217. .vertical-tabs__item--first > .claro-details__summary--vertical-tabs-item::after {
  218. border-top-left-radius: var(--details-border-size-radius);
  219. border-top-right-radius: var(--details-border-size-radius);
  220. }
  221. .claro-details:last-child > .claro-details__summary--accordion-item::after,
  222. .vertical-tabs__item--last > .claro-details__summary--vertical-tabs-item::after {
  223. border-bottom-right-radius: var(--details-border-size-radius);
  224. border-bottom-left-radius: var(--details-border-size-radius);
  225. }
  226. /**
  227. * Focus box of accordions and accordion items must not have bottom border
  228. * radius if their accordion is expanded.
  229. */
  230. .claro-details[open] > .claro-details__summary--accordion::after,
  231. .claro-details[open] > .claro-details__summary--accordion-item::after,
  232. .vertical-tabs__item--last[open] > .claro-details__summary--vertical-tabs-item::after {
  233. border-bottom-right-radius: 0;
  234. border-bottom-left-radius: 0;
  235. }
  236. /**
  237. * Details summary states.
  238. */
  239. .claro-details__summary:focus {
  240. box-shadow: none;
  241. }
  242. [open] .claro-details__summary--accordion,
  243. [open] .claro-details__summary--accordion-item,
  244. [open] .claro-details__summary--vertical-tabs-item {
  245. color: var(--color-absolutezero);
  246. }
  247. .claro-details__summary:hover::before,
  248. .claro-details__summary:hover:focus::before,
  249. .claro-details[open] > .claro-details__summary:focus::before,
  250. .claro-details[open] > .claro-details__summary--accordion::before,
  251. .claro-details[open] > .claro-details__summary--accordion-item::before,
  252. .claro-details[open] > .claro-details__summary--vertical-tabs-item::before {
  253. background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3e%3cpath d='M5.21 1.314L3.79 2.723l5.302 5.353-5.303 5.354 1.422 1.408 6.697-6.762z' fill='%230036B1'/%3e%3c/svg%3e");
  254. }
  255. .claro-details[open] > .claro-details__summary {
  256. border-radius: var(--size-summary-border-radius) var(--size-summary-border-radius) 0 0;
  257. }
  258. .claro-details[open] > .claro-details__summary::before {
  259. transform: rotate(-90deg); /* for LTR and RTL */
  260. }
  261. @media (forced-colors: active) {
  262. .claro-details__summary:hover::before,
  263. .claro-details__summary:hover:focus::before {
  264. background: none;
  265. }
  266. .claro-details[open] > .claro-details__summary::before,
  267. [dir="rtl"] .claro-details[open] > .claro-details__summary::before {
  268. margin-top: calc(0.125rem / -2);
  269. margin-right: 0.125rem;
  270. transform: rotate(-45deg); /* for LTR and RTL */
  271. background: none;
  272. }
  273. }
  274. .claro-details[open] > .claro-details__summary--accordion,
  275. .claro-details[open] > .claro-details__summary--accordion-item,
  276. .claro-details[open] > .claro-details__summary--vertical-tabs-item {
  277. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  278. }
  279. .claro-details__summary:hover {
  280. color: var(--color-absolutezero);
  281. background-color: var(--color-bgblue-hover);
  282. }
  283. /**
  284. * Focus styles.
  285. */
  286. /**
  287. * Active has to be here for Firefox.
  288. * Merges standard collapse-processed selectors.
  289. */
  290. [open] > .claro-details__summary--accordion:not(:focus):not(:active)::after,
  291. [open] > .claro-details__summary--accordion-item:not(:focus):not(:active)::after,
  292. .collapse-processed[open] > .claro-details__summary--accordion .details-title:not(:focus)::after,
  293. .collapse-processed[open] > .claro-details__summary--accordion-item .details-title:not(:focus)::after,
  294. [open] > .claro-details__summary--vertical-tabs-item:not(:focus):not(:active)::after,
  295. .collapse-processed[open] > .claro-details__summary--vertical-tabs-item .details-title:not(:focus)::after {
  296. opacity: 1;
  297. border: var(--details-summary-focus-border-size) solid var(--color-absolutezero);
  298. border-width: 0 0 0 var(--details-summary-focus-border-size); /* LTR */
  299. box-shadow: none;
  300. }
  301. [dir="rtl"] [open] > .claro-details__summary--accordion:not(:focus)::after,
  302. [dir="rtl"] [open] > .claro-details__summary--accordion-item:not(:focus)::after,
  303. [dir="rtl"] .collapse-processed[open] > .claro-details__summary--accordion .details-title:not(:focus)::after,
  304. [dir="rtl"] .collapse-processed[open] > .claro-details__summary--accordion-item .details-title:not(:focus)::after,
  305. [dir="rtl"] [open] > .claro-details__summary--vertical-tabs-item:not(:focus)::after,
  306. [dir="rtl"] .collapse-processed[open] > .claro-details__summary--vertical-tabs-item .details-title:not(:focus)::after {
  307. border-width: 0 var(--details-summary-focus-border-size) 0 0;
  308. }
  309. .claro-details__summary:focus::after,
  310. .claro-details__summary:active::after,
  311. .collapse-processed > .claro-details__summary .details-title:focus::after {
  312. opacity: 1;
  313. }
  314. /**
  315. * Safari workaround.
  316. */
  317. /* stylelint-disable-next-line unit-allowed-list */
  318. @media not all and (min-resolution: 0.001dpcm) {
  319. @supports (-webkit-appearance: none) {
  320. .claro-details__summary::after {
  321. transition: none;
  322. }
  323. }
  324. }
  325. .claro-details[open] > .claro-details__summary:focus {
  326. color: var(--color-absolutezero);
  327. }
  328. /**
  329. * Details wrapper and content.
  330. *
  331. * Accordion and accordion-item variants should have an extra background.
  332. * In that case, we render an additional wrapper 'claro-details__content' that
  333. * creates the visual margins around the content, and use the original
  334. * wrapper for setting the background color.
  335. *
  336. * If there is no border or padding defined, margins of parent-child elements
  337. * collapse to the highest value. We want to take benefit of this behavior,
  338. * because the elements inside the details content won't cause too big
  339. * vertical spacing.
  340. */
  341. .claro-details__wrapper,
  342. .claro-details__content {
  343. margin: var(--space-m);
  344. }
  345. .claro-details__wrapper--accordion,
  346. .claro-details__wrapper--accordion-item,
  347. .claro-details__wrapper--vertical-tabs-item {
  348. margin: 0;
  349. }
  350. .claro-details__wrapper--accordion::before,
  351. .claro-details__wrapper--accordion::after,
  352. .claro-details__wrapper--accordion-item::before,
  353. .claro-details__wrapper--accordion-item::after,
  354. .claro-details__wrapper--vertical-tabs-item::before,
  355. .claro-details__wrapper--vertical-tabs-item::after {
  356. display: table;
  357. clear: both;
  358. content: "";
  359. }
  360. .claro-details__wrapper--accordion,
  361. .claro-details__wrapper--accordion-item,
  362. .claro-details__wrapper--vertical-tabs-item {
  363. border-top: var(--details-border-size) solid var(--details-border-color);
  364. background-color: var(--color-gray-050-o-40);
  365. }
  366. @media screen and (min-width: 48em) {
  367. .claro-details__wrapper {
  368. margin: var(--space-l) var(--details-desktop-wrapper-padding-start);
  369. }
  370. .claro-details__wrapper--accordion,
  371. .claro-details__wrapper--accordion-item,
  372. .claro-details__wrapper--vertical-tabs-item {
  373. margin: 0;
  374. }
  375. }
  376. @media screen and (min-width: 85em) {
  377. .js .claro-details__wrapper--vertical-tabs-item {
  378. margin: 0;
  379. border-top: 0;
  380. background-color: transparent;
  381. }
  382. }
  383. .claro-details__content--accordion,
  384. .claro-details__content--accordion-item,
  385. .claro-details__content--vertical-tabs-item {
  386. margin: var(--space-m) var(--space-m) var(--space-l);
  387. }
  388. @media screen and (min-width: 85em) {
  389. .vertical-tabs .claro-details__content--vertical-tabs-item {
  390. margin: var(--space-l);
  391. }
  392. }
  393. /* Description. */
  394. .claro-details__description {
  395. margin-bottom: var(--space-m);
  396. color: var(--input-fg-color--description);
  397. font-size: var(--font-size-xs); /* ~13px */
  398. line-height: calc(17rem / 16); /* 17px */
  399. }
  400. .claro-details__description.is-disabled {
  401. color: var(--input--disabled-fg-color);
  402. }
  403. /**
  404. * Collapse processed for non-supporting browsers like IE or Edge.
  405. */
  406. .collapse-processed > .claro-details__summary {
  407. padding: 0;
  408. }
  409. .collapse-processed > .claro-details__summary::after {
  410. content: none;
  411. }
  412. .collapse-processed > .claro-details__summary .details-title {
  413. position: relative;
  414. display: block;
  415. padding: var(--space-m) var(--space-m) var(--space-m) var(--details-desktop-wrapper-padding-start); /* LTR */
  416. text-decoration: none;
  417. color: inherit;
  418. border-radius: var(--size-summary-border-radius);
  419. }
  420. [dir="rtl"] .collapse-processed > .claro-details__summary .details-title {
  421. padding-right: var(--details-desktop-wrapper-padding-start);
  422. padding-left: var(--space-m);
  423. }
  424. .collapse-processed > .claro-details__summary--accordion .details-title,
  425. .collapse-processed > .claro-details__summary--accordion-item .details-title,
  426. .collapse-processed > .claro-details__summary--vertical-tabs-item .details-title {
  427. padding: var(--summary-accordion-padding-vertical) var(--space-l) var(--summary-accordion-padding-vertical) var(--details-desktop-wrapper-padding-start); /* LTR */
  428. }
  429. [dir="rtl"] .collapse-processed > .claro-details__summary--accordion .details-title,
  430. [dir="rtl"] .collapse-processed > .claro-details__summary--accordion-item .details-title,
  431. [dir="rtl"] .collapse-processed > .claro-details__summary--vertical-tabs-item .details-title {
  432. padding-right: var(--details-desktop-wrapper-padding-start);
  433. padding-left: var(--space-l);
  434. }
  435. /* Focus and hover states. */
  436. .collapse-processed > .claro-details__summary .details-title:focus,
  437. .collapse-processed > .claro-details__summary .details-title:hover {
  438. z-index: 1;
  439. text-decoration: none;
  440. outline: none;
  441. box-shadow: none;
  442. }
  443. .collapse-processed > .claro-details__summary .details-title::after {
  444. position: absolute;
  445. top: -1px;
  446. right: -1px;
  447. bottom: -1px;
  448. left: -1px;
  449. content: "";
  450. transition: opacity var(--details-box-shadow-transition-duration) ease-in-out;
  451. pointer-events: none;
  452. opacity: 0;
  453. border: var(--details-summary-focus-border-size) solid var(--color-focus);
  454. border-radius: var(--details-border-size-radius);
  455. }
  456. .collapse-processed > .claro-details__summary .details-title:focus::after {
  457. opacity: 1;
  458. }
  459. /* Accordion item modifiers for the focus box. */
  460. .collapse-processed > .claro-details__summary--accordion-item .details-title::after,
  461. .vertical-tabs__item > .claro-details__summary--vertical-tabs-item .details-title::after {
  462. border-radius: 0;
  463. }
  464. .collapse-processed:first-child > .claro-details__summary--accordion-item .details-title::after,
  465. .vertical-tabs__item--first > .claro-details__summary--vertical-tabs-item .details-title::after {
  466. border-top-left-radius: var(--details-border-size-radius);
  467. border-top-right-radius: var(--details-border-size-radius);
  468. }
  469. .collapse-processed:last-child > .claro-details__summary--accordion-item .details-title::after,
  470. .vertical-tabs__item--last > .claro-details__summary--vertical-tabs-item .details-title::after {
  471. border-bottom-right-radius: var(--details-border-size-radius);
  472. border-bottom-left-radius: var(--details-border-size-radius);
  473. }
  474. .collapse-processed[open] > .claro-details__summary--accordion .details-title::after,
  475. .collapse-processed[open] > .claro-details__summary--accordion-item .details-title::after,
  476. .vertical-tabs__item[open] > .claro-details__summary--vertical-tabs-item .details-title::after {
  477. border-bottom-right-radius: 0;
  478. border-bottom-left-radius: 0;
  479. }
  480. .claro-details__summary-summary {
  481. display: block;
  482. color: var(--color-gray-800);
  483. font-size: var(--font-size-s);
  484. font-weight: normal;
  485. }
  486. @media (forced-colors: active) {
  487. .collapse-processed[open] > .claro-details__summary--accordion .details-title:not(:focus)::after,
  488. .collapse-processed[open] > .claro-details__summary--accordion-item .details-title:not(:focus)::after,
  489. .collapse-processed[open] > .claro-details__summary--vertical-tabs-item .details-title:not(:focus)::after {
  490. top: -1px;
  491. right: -1px;
  492. bottom: -1px;
  493. left: -1px;
  494. }
  495. .collapse-processed > .claro-details__summary .details-title::after {
  496. top: -0.3125rem;
  497. right: -0.3125rem;
  498. bottom: -0.3125rem;
  499. left: -0.3125rem;
  500. border: 2px dotted;
  501. }
  502. }
  503. .required-mark::after {
  504. display: inline-block;
  505. width: 0.4375rem;
  506. height: 0.4375rem;
  507. margin-right: 0.3em;
  508. margin-left: 0.3em;
  509. content: "";
  510. vertical-align: super;
  511. background-image: url("data:image/svg+xml,%3csvg height='16' width='16' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='m0 7.562 1.114-3.438c2.565.906 4.43 1.688 5.59 2.35-.306-2.921-.467-4.93-.484-6.027h3.511c-.05 1.597-.234 3.6-.558 6.003 1.664-.838 3.566-1.613 5.714-2.325l1.113 3.437c-2.05.678-4.06 1.131-6.028 1.356.984.856 2.372 2.381 4.166 4.575l-2.906 2.059c-.935-1.274-2.041-3.009-3.316-5.206-1.194 2.275-2.244 4.013-3.147 5.206l-2.856-2.059c1.872-2.307 3.211-3.832 4.017-4.575-2.081-.402-4.058-.856-5.93-1.356' fill='%23e00'/%3e%3c/svg%3e");
  512. background-repeat: no-repeat;
  513. background-size: 0.4375rem 0.4375rem;
  514. }