details.pcss.css

Same filename in this branch
  1. main core/misc/dialog/off-canvas/css/details.pcss.css
  2. main core/themes/olivero/css/components/details.pcss.css
  3. main core/themes/claro/css/components/details.pcss.css
  4. main core/themes/admin/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. 11.x core/misc/dialog/off-canvas/css/details.pcss.css
  5. 11.x core/themes/olivero/css/components/details.pcss.css
  6. 11.x core/themes/claro/css/components/details.pcss.css
  7. 9 core/themes/olivero/css/components/details.pcss.css
  8. 9 core/themes/claro/css/components/details.pcss.css
  9. 8.9.x core/themes/claro/css/components/details.pcss.css
  10. 11.x core/themes/admin/css/components/details.pcss.css
  11. 11.x core/themes/default_admin/css/components/details.pcss.css

Collapsible details.

See also

collapse.js

File

core/themes/default_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(--admin-space-l) + ((var(--admin-space-m) - var(--admin-space-l)) / 2));
  33. --summary-accordion-line-height: var(--admin-space-l);
  34. }
  35. .gin-details {
  36. display: block;
  37. margin-block: var(--admin-space-m);
  38. color: var(--admin-color-text);
  39. border: var(--details-border-size) solid var(--details-border-color);
  40. border-radius: var(--admin-radius-m);
  41. background-color: var(--admin-color-bg-surface);
  42. box-shadow: var(--details-box-shadow);
  43. /*
  44. * The inline-size / min-inline-size pair keeps the
    element from
  45. * shifting widths when opening, in the event that a parent table element
  46. * constrains the width. This can happen when toggling the "lazy-load"
  47. * option within an image field.
  48. */
  49. td
  50. &.error {
  51. border: 2px solid var(--admin-color-error);
  52. }
  53. .gin--dark-mode
  54. }
  55. .gin-details--accordion-item,
  56. .gin-details--vertical-tabs-item {
  57. margin-block: 0;
  58. border-radius: 0;
  59. box-shadow: none;
  60. }
  61. .gin-details--accordion-item {
  62. &:first-of-type {
  63. border-start-start-radius: var(--details-border-size-radius);
  64. border-start-end-radius: var(--details-border-size-radius);
  65. }
  66. &:last-of-type {
  67. border-end-end-radius: var(--details-border-size-radius);
  68. border-end-start-radius: var(--details-border-size-radius);
  69. }
  70. }
  71. /**
  72. * Details summary styles.
  73. */
  74. .gin-details__summary {
  75. position: relative;
  76. box-sizing: border-box;
  77. list-style: none;
  78. cursor: pointer;
  79. transition: background-color var(--details-bg-color-transition-duration) ease-in-out;
  80. color: var(--admin-color-text);
  81. border-radius: var(--size-summary-border-radius);
  82. background-color: transparent;
  83. font-weight: var(--admin-font-weight-semibold);
  84. line-height: var(--admin-space-m);
  85. padding-block: calc(var(--admin-space-l) - var(--admin-space-2xs));
  86. padding-inline: 2.75rem var(--admin-space-m);
  87. &:not(.form-required) .required-mark {
  88. display: none;
  89. }
  90. /* Remove the marker on Chrome. */
  91. &::-webkit-details-marker {
  92. display: none;
  93. }
  94. /* Details marker. */
  95. &::before {
  96. position: absolute;
  97. inset-block-start: 50%;
  98. inset-inline-start: 1.125rem;
  99. display: inline-block;
  100. inline-size: var(--admin-space-m);
  101. block-size: var(--admin-space-m);
  102. margin-block-start: calc(var(--admin-space-m) / -2);
  103. content: "";
  104. transition: transform var(--details-transform-transition-duration) ease-in 0s;
  105. transform: rotate(90deg);
  106. text-align: center;
  107. background: var(--admin-color-text);
  108. mask-image: url("../../migration/media/icons/general/handle.svg");
  109. mask-repeat: no-repeat;
  110. mask-position: center center;
  111. mask-size: 100% 100%;
  112. &:dir(rtl) {
  113. transform: rotate(-270deg);
  114. }
  115. @media (prefers-reduced-motion: reduce) {
  116. transition: none;
  117. }
  118. @media (forced-colors: active) {
  119. background-color: buttonBorder;
  120. }
  121. /**
  122. * Safari (at least version 12.1) cannot handle our details marker
  123. * transition properly.
  124. *
  125. * Every additional pointer triggered toggle event freezes the transition,
  126. * and the transition is continued and finished after the pointer leaves
  127. * the Detail elements' summary.
  128. *
  129. * Even that it is possible to provide a JavaScript workaround for it (by
  130. * adding/removing a helper class with JavaScript if the Details is
  131. * toggled), that hack will make RTL details worse than without the hack.
  132. *
  133. * This weird query was found in
  134. * https://stackoverflow.com/questions/16348489#25975282 (based on the
  135. * answer it works for Safari 10.1+)
  136. */
  137. /* stylelint-disable-next-line unit-allowed-list */
  138. @media not all and (min-resolution: 0.001dpcm) {
  139. @supports (-webkit-appearance: none) {
  140. transition: none;
  141. }
  142. }
  143. }
  144. &:hover {
  145. color: var(--admin-color-primary-hover);
  146. background-color: var(--admin-color-bg-item-hover);
  147. }
  148. &:hover::before,
  149. &:hover:focus::before {
  150. background: currentColor;
  151. @media (forced-colors: active) {
  152. background-color: linkText;
  153. }
  154. }
  155. }
  156. /* Modifiers */
  157. .gin-details__summary--accordion,
  158. .gin-details__summary--accordion-item,
  159. .gin-details__summary--vertical-tabs-item {
  160. padding-block: var(--summary-accordion-padding-vertical);
  161. padding-inline: 2.75rem var(--admin-space-l);
  162. background: var(--admin-color-bg-surface);
  163. line-height: var(--summary-accordion-line-height);
  164. .gin--dark-mode
  165. }
  166. /**
  167. * Accordion list items must not have border radius except they are the first
  168. * or the last ones.
  169. */
  170. .gin-details__summary--accordion-item {
  171. border-radius: 0;
  172. [open] > &:not(:focus, :active)::after {
  173. border-inline-start-width: 5px;
  174. }
  175. }
  176. .gin-details--accordion-item:first-child .gin-details__summary--accordion-item {
  177. border-start-start-radius: var(--details-border-size-radius);
  178. border-start-end-radius: var(--details-border-size-radius);
  179. }
  180. .gin-details--accordion-item:last-child .gin-details__summary--accordion-item {
  181. border-end-end-radius: var(--details-border-size-radius);
  182. border-end-start-radius: var(--details-border-size-radius);
  183. }
  184. /**
  185. * Details summary states.
  186. */
  187. [open] .gin-details__summary--accordion,
  188. [open] .gin-details__summary--accordion-item,
  189. [open] .gin-details__summary--vertical-tabs-item {
  190. color: var(--admin-color-primary);
  191. text-decoration-style: var(--admin-link-decoration-style);
  192. }
  193. .gin-details[open] > .gin-details__summary {
  194. border-start-start-radius: var(--size-summary-border-radius);
  195. border-start-end-radius: var(--size-summary-border-radius);
  196. border-end-end-radius: 0;
  197. border-end-start-radius: 0;
  198. &::before {
  199. transform: rotate(-90deg); /* for LTR and RTL */
  200. }
  201. }
  202. @media (forced-colors: active) {
  203. .gin-details__summary:hover::before,
  204. .gin-details__summary:hover:focus::before,
  205. .gin-details[open] > .gin-details__summary:focus::before {
  206. background: none;
  207. }
  208. .gin-details[open] > .gin-details__summary::before {
  209. margin-block-start: -0.125rem;
  210. margin-inline-end: 0.125rem;
  211. transform: rotate(-45deg); /* for LTR and RTL */
  212. background: none;
  213. }
  214. }
  215. .gin-details[open] > .gin-details__summary--accordion,
  216. .gin-details[open] > .gin-details__summary--accordion-item,
  217. .gin-details[open] > .gin-details__summary--vertical-tabs-item {
  218. box-shadow: var(--details-box-shadow);
  219. }
  220. /**
  221. * Details wrapper and content.
  222. *
  223. * Accordion and accordion-item variants should have an extra background. In
  224. * that case, we render an additional wrapper 'gin-details__content' that
  225. * creates the visual margins around the content, and use the original wrapper
  226. * for setting the background color.
  227. *
  228. * If there is no border or padding defined, margins of parent-child elements
  229. * collapse to the highest value. We want to take benefit of this behavior,
  230. * because the elements inside the details content won't cause too big
  231. * vertical spacing.
  232. */
  233. .gin-details__wrapper,
  234. .gin-details__content {
  235. margin-block: var(--admin-space-m);
  236. margin-inline: calc(var(--admin-space-l) - var(--admin-space-2xs));
  237. }
  238. .gin-details__wrapper--accordion,
  239. .gin-details__wrapper--accordion-item,
  240. .gin-details__wrapper--vertical-tabs-item {
  241. margin: 0;
  242. border-block-start: 1px solid var(--admin-color-border);
  243. background: var(--admin-color-bg);
  244. &::before,
  245. &::after {
  246. display: table;
  247. clear: both;
  248. content: "";
  249. }
  250. /* @see Drupal.behaviors.verticalTabs */
  251. @media screen and (min-width: 641px) {
  252. margin: 0;
  253. }
  254. }
  255. @media screen and (min-width: 641px) {
  256. .js .gin-details__wrapper--vertical-tabs-item {
  257. margin: 0;
  258. border-block-start: 0;
  259. background-color: transparent;
  260. }
  261. }
  262. .gin-details__content--accordion,
  263. .gin-details__content--accordion-item,
  264. .gin-details__content--vertical-tabs-item {
  265. margin-block: var(--admin-space-m) var(--admin-space-l);
  266. margin-inline: var(--admin-space-m);
  267. }
  268. @media screen and (min-width: 85em) {
  269. .vertical-tabs .gin-details__content--vertical-tabs-item {
  270. margin: var(--admin-space-l);
  271. }
  272. }
  273. /* Description. */
  274. .gin-details__description {
  275. margin-block-end: var(--admin-space-m);
  276. color: var(--admin-color-text-soft);
  277. font-size: var(--admin-font-size-xs); /* ~13px */
  278. line-height: calc(17rem / 16); /* 17px */
  279. max-inline-size: var(--admin-max-line-length);
  280. &.is-disabled {
  281. color: var(--input--disabled-fg-color);
  282. }
  283. }
  284. .gin-details__summary-summary {
  285. display: block;
  286. opacity: 0.8;
  287. color: var(--admin-color-text-soft);
  288. font-size: var(--admin-font-size-s);
  289. font-weight: normal;
  290. }
  291. /* @todo this probably needs to be moved. */
  292. .required-mark::after {
  293. display: inline-block;
  294. inline-size: 0.4375rem;
  295. block-size: 0.4375rem;
  296. margin-inline: 0.3em;
  297. content: "";
  298. vertical-align: super;
  299. background-image: url(../../images/core/ee0000/required.svg);
  300. background-repeat: no-repeat;
  301. background-size: 0.4375rem 0.4375rem;
  302. }
  303. .gin-details.gin-details--package-listing,
  304. .gin-details.module-list__module-details,
  305. .system-status-report .gin-details {
  306. border: 1px solid var(--admin-color-border);
  307. border-radius: var(--admin-radius-m);
  308. }

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