You are here

dropbutton.pcss.css in Drupal 10

Dropbutton styles.

1. Transparent border is needed for high contrast mode. The border-width has to be set with !important to render borders with the defined width in high contrast mode Firefox.

File

core/themes/claro/css/components/dropbutton.pcss.css
View source
  1. /**
  2. * @file
  3. * Dropbutton styles.
  4. *
  5. * 1. Transparent border is needed for high contrast mode. The border-width has
  6. * to be set with !important to render borders with the defined width in high
  7. * contrast mode Firefox.
  8. */
  9. :root {
  10. /**
  11. * Dropbutton
  12. */
  13. --dropbutton-spacing-size: var(--space-m);
  14. --dropbutton-font-size: var(--font-size-base);
  15. --dropbutton-line-height: var(--space-m);
  16. --dropbutton-toggle-size: 3rem;
  17. --dropbutton-border-size: 1px;
  18. --dropbutton-toggle-size-spacing: var(--dropbutton-border-size);
  19. --dropbutton-border-radius-size: 2px;
  20. --dropbutton-item-max-width: 12.5rem;
  21. /* Variant variables: small. */
  22. --dropbutton-small-spacing-size: 0.625rem;
  23. --dropbutton-small-font-size: var(--font-size-xs);
  24. --dropbutton-small-line-height: 0.75rem;
  25. --dropbutton-small-toggle-size: calc((2 * var(--dropbutton-small-spacing-size)) + var(--dropbutton-small-line-height));
  26. /* Variant variables: extra small. */
  27. --dropbutton-extrasmall-spacing-size: 0.375rem;
  28. --dropbutton-extrasmall-font-size: var(--font-size-xs);
  29. --dropbutton-extrasmall-line-height: 0.75rem;
  30. --dropbutton-extrasmall-toggle-size: calc((2 * var(--dropbutton-extrasmall-spacing-size)) + var(--dropbutton-extrasmall-line-height));
  31. }
  32. .dropbutton-wrapper {
  33. display: inline-flex;
  34. border-radius: var(--button-border-radius-size);
  35. box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
  36. }
  37. .form-actions .dropbutton-wrapper {
  38. margin: var(--space-xs) var(--space-m) var(--space-xs) 0;
  39. }
  40. [dir="rtl"] .form-actions .dropbutton-wrapper {
  41. margin-right: 0;
  42. margin-left: var(--space-m);
  43. }
  44. .dropbutton-widget {
  45. position: relative;
  46. flex: 1 1 auto;
  47. }
  48. .js .dropbutton-wrapper.open .dropbutton-widget {
  49. z-index: 100;
  50. }
  51. /**
  52. * Dropbutton list.
  53. */
  54. .dropbutton {
  55. display: block;
  56. overflow: visible;
  57. margin: 0;
  58. list-style: none;
  59. }
  60. [dir="rtl"] .dropbutton {
  61. margin: 0;
  62. }
  63. .js .dropbutton {
  64. min-width: 6rem; /* Help mitigate long dropbutton text from obscuring other dropbuttons. */
  65. height: var(--dropbutton-toggle-size);
  66. }
  67. /* Variants. */
  68. .js.no-touchevents .dropbutton--small {
  69. height: var(--dropbutton-small-toggle-size);
  70. }
  71. .js.no-touchevents .dropbutton--extrasmall {
  72. height: var(--dropbutton-extrasmall-toggle-size);
  73. }
  74. /**
  75. * First dropbutton list item.
  76. */
  77. .js .dropbutton--multiple .dropbutton__item:first-of-type {
  78. margin-right: calc(var(--dropbutton-toggle-size) + var(--dropbutton-toggle-size-spacing)); /* LTR */
  79. }
  80. [dir="rtl"].js .dropbutton--multiple .dropbutton__item:first-of-type {
  81. margin-right: 0;
  82. margin-left: calc(var(--dropbutton-toggle-size) + var(--dropbutton-toggle-size-spacing));
  83. }
  84. /* First dropbutton list item variants */
  85. .js.no-touchevents .dropbutton--multiple.dropbutton--small .dropbutton__item:first-of-type {
  86. margin-right: calc(var(--dropbutton-small-toggle-size) + var(--dropbutton-toggle-size-spacing)); /* LTR */
  87. }
  88. [dir="rtl"].js.no-touchevents .dropbutton--multiple.dropbutton--small .dropbutton__item:first-of-type {
  89. margin-right: 0;
  90. margin-left: calc(var(--dropbutton-small-toggle-size) + var(--dropbutton-toggle-size-spacing));
  91. }
  92. .js.no-touchevents .dropbutton--multiple.dropbutton--extrasmall .dropbutton__item:first-of-type {
  93. margin-right: calc(var(--dropbutton-extrasmall-toggle-size) + var(--dropbutton-toggle-size-spacing)); /* LTR */
  94. }
  95. [dir="rtl"].js.no-touchevents .dropbutton--multiple.dropbutton--extrasmall .dropbutton__item:first-of-type {
  96. margin-right: 0;
  97. margin-left: calc(var(--dropbutton-extrasmall-toggle-size) + var(--dropbutton-toggle-size-spacing));
  98. }
  99. /**
  100. * Dropbutton toggler.
  101. */
  102. .dropbutton__toggle {
  103. position: absolute;
  104. z-index: 3;
  105. top: 0;
  106. right: 0; /* LTR */
  107. bottom: 0;
  108. width: var(--dropbutton-toggle-size);
  109. height: var(--dropbutton-toggle-size);
  110. border: var(--dropbutton-border-size) solid transparent !important; /* 1 */
  111. border-radius: 0 var(--button-border-radius-size) var(--button-border-radius-size) 0; /* LTR */
  112. background: var(--button-bg-color);
  113. font-size: 1px; /* iOS Safari sets a minimum button-width based on font-size. */
  114. appearance: none;
  115. }
  116. [dir="rtl"] .dropbutton__toggle {
  117. right: auto;
  118. left: 0;
  119. border-radius: var(--button-border-radius-size) 0 0 var(--button-border-radius-size);
  120. }
  121. .dropbutton__toggle::before {
  122. position: absolute;
  123. top: 50%;
  124. right: 50%;
  125. width: 0.875rem;
  126. height: 0.5625rem;
  127. content: "";
  128. transform: translate(50%, -50%) rotate(0);
  129. background: url(../../images/icons/000f33/chevron-down.svg) no-repeat center;
  130. background-size: contain;
  131. }
  132. /* Toggler states. */
  133. .dropbutton__toggle:hover {
  134. color: var(--button-fg-color);
  135. background-color: var(--button--hover-bg-color);
  136. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.25);
  137. }
  138. .dropbutton__toggle:focus {
  139. z-index: 2;
  140. }
  141. .dropbutton__toggle:active {
  142. color: var(--button-fg-color);
  143. background-color: var(--button--active-bg-color);
  144. }
  145. .dropbutton-wrapper.open .dropbutton__toggle::before {
  146. transform: translate(50%, -50%) rotate(180deg);
  147. }
  148. [dir="rtl"] .dropbutton-wrapper.open .dropbutton__toggle::before {
  149. transform: translate(50%, -50%) rotate(-180deg);
  150. }
  151. /* Toggler variants */
  152. .no-touchevents .dropbutton--small .dropbutton__toggle {
  153. width: var(--dropbutton-small-toggle-size);
  154. height: var(--dropbutton-small-toggle-size);
  155. }
  156. .no-touchevents .dropbutton--extrasmall .dropbutton__toggle {
  157. width: var(--dropbutton-extrasmall-toggle-size);
  158. height: var(--dropbutton-extrasmall-toggle-size);
  159. }
  160. .no-touchevents .dropbutton--small .dropbutton__toggle::before,
  161. .no-touchevents .dropbutton--extrasmall .dropbutton__toggle::before {
  162. width: 0.75rem; /* 12px */
  163. }
  164. /* High contrast. */
  165. @media (-ms-high-contrast: active), (forced-colors: active) {
  166. /* Default. */
  167. .dropbutton__toggle::before {
  168. width: 0.5625rem;
  169. height: 0.5625rem;
  170. margin-top: calc(0.5625rem / (2 * -1.41429));
  171. transform: translate(50%, -50%) rotate(135deg); /* LTR */
  172. border: 0.125rem solid;
  173. border-width: 0.125rem 0.125rem 0 0;
  174. background: none;
  175. }
  176. .dropbutton-wrapper.open .dropbutton__toggle::before {
  177. margin-top: calc(0.5625rem / (2 * 1.41429));
  178. transform: translate(50%, -50%) rotate(315deg);
  179. }
  180. [dir="rtl"] .dropbutton-wrapper.open .dropbutton__toggle::before {
  181. transform: translate(50%, -50%) rotate(-45deg);
  182. }
  183. /* Variants */
  184. .no-touchevents .dropbutton--small .dropbutton__toggle::before,
  185. .no-touchevents .dropbutton--extrasmall .dropbutton__toggle::before {
  186. width: 0.4375rem;
  187. height: 0.4375rem;
  188. margin-top: calc(0.4375rem / (2 * -1.41429));
  189. }
  190. .dropbutton-wrapper.open .dropbutton__toggle::before {
  191. margin-top: calc(0.4375rem / (2 * 1.41429));
  192. }
  193. }
  194. /**
  195. * Item in the first dropbutton list item (that looks like a button).
  196. *
  197. * Duplicates base button styles.
  198. */
  199. .dropbutton__item:first-of-type > * {
  200. display: inline-block;
  201. margin: 0;
  202. padding: calc(var(--dropbutton-spacing-size) - var(--dropbutton-border-size)) calc(var(--space-l) - var(--dropbutton-border-size));
  203. cursor: pointer;
  204. text-align: center;
  205. text-decoration: none;
  206. color: var(--button-fg-color);
  207. border: var(--dropbutton-border-size) solid transparent !important; /* 1 */
  208. border-radius: var(--button-border-radius-size);
  209. background-color: var(--button-bg-color);
  210. font-size: var(--dropbutton-font-size);
  211. font-weight: 700;
  212. line-height: var(--dropbutton-line-height);
  213. appearance: none;
  214. -webkit-font-smoothing: antialiased;
  215. }
  216. .dropbutton--multiple .dropbutton__item:first-of-type > * {
  217. padding-right: calc(var(--dropbutton-spacing-size) - var(--dropbutton-border-size));
  218. padding-left: calc(var(--dropbutton-spacing-size) - var(--dropbutton-border-size));
  219. }
  220. /* Variants */
  221. .no-touchevents .dropbutton--small .dropbutton__item:first-of-type > * {
  222. padding-top: calc(var(--dropbutton-small-spacing-size) - var(--dropbutton-border-size));
  223. padding-bottom: calc(var(--dropbutton-small-spacing-size) - var(--dropbutton-border-size));
  224. font-size: var(--dropbutton-small-font-size);
  225. line-height: var(--dropbutton-small-line-height);
  226. }
  227. .no-touchevents .dropbutton--extrasmall .dropbutton__item:first-of-type > * {
  228. padding-top: calc(var(--dropbutton-extrasmall-spacing-size) - var(--dropbutton-border-size));
  229. padding-bottom: calc(var(--dropbutton-extrasmall-spacing-size) - var(--dropbutton-border-size));
  230. font-size: var(--dropbutton-extrasmall-font-size);
  231. line-height: var(--dropbutton-extrasmall-line-height);
  232. }
  233. .dropbutton__item:first-of-type > *:hover,
  234. .dropbutton__item:first-of-type > .button:hover {
  235. text-decoration: none;
  236. color: var(--button-fg-color);
  237. background-color: var(--button--hover-bg-color);
  238. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.25);
  239. }
  240. .dropbutton__item:first-of-type > *:focus:hover,
  241. .dropbutton__item:first-of-type > .button:focus:hover {
  242. box-shadow: 0 0 0 2px var(--color-white), 0 0 0 5px var(--color-focus);
  243. }
  244. .dropbutton__item:first-of-type > *:focus {
  245. text-decoration: none;
  246. }
  247. .dropbutton__item:first-of-type > *:active {
  248. color: var(--button-fg-color);
  249. background-color: var(--button--active-bg-color);
  250. }
  251. .dropbutton--multiple .dropbutton__item:first-of-type > * {
  252. position: relative;
  253. z-index: 3;
  254. }
  255. .dropbutton--multiple .dropbutton__item:first-of-type > *:focus {
  256. z-index: 2;
  257. }
  258. .js .dropbutton--multiple .dropbutton__item:first-of-type > * {
  259. border-radius: var(--button-border-radius-size) 0 0 var(--button-border-radius-size); /* LTR */
  260. }
  261. [dir="rtl"].js .dropbutton--multiple .dropbutton__item:first-of-type > * {
  262. border-radius: 0 var(--button-border-radius-size) var(--button-border-radius-size) 0;
  263. }
  264. .dropbutton > .dropbutton__item > a,
  265. .dropbutton > .dropbutton__item > .button {
  266. display: block;
  267. box-sizing: border-box;
  268. width: 100%;
  269. margin: 0;
  270. text-align: left; /* LTR */
  271. }
  272. [dir="rtl"] .dropbutton > .dropbutton__item > a,
  273. [dir="rtl"] .dropbutton > .dropbutton__item > .button {
  274. text-align: right;
  275. }
  276. .js .dropbutton-wrapper:not(.open) .dropbutton__item:first-of-type ~ .dropbutton__item {
  277. visibility: hidden;
  278. }
  279. /**
  280. * Non-first dropbutton list elements.
  281. */
  282. .dropbutton__item:first-of-type ~ .dropbutton__item {
  283. border: var(--dropbutton-border-size) solid var(--color-gray-200);
  284. border-bottom: 0;
  285. box-shadow: 0 2px 10px rgba(0, 0, 0, 0.15);
  286. }
  287. .dropbutton__item:first-of-type ~ .dropbutton__item ~ .dropbutton__item {
  288. border-top: 0;
  289. }
  290. .dropbutton__item ~ .dropbutton__item:last-child {
  291. border-bottom: var(--dropbutton-border-size) solid var(--color-gray-200);
  292. border-radius: 0 0 var(--dropbutton-border-radius-size) var(--dropbutton-border-radius-size);
  293. }
  294. /**
  295. * Dropbutton items of non-first dropbutton list elements.
  296. */
  297. .dropbutton__item:first-of-type ~ .dropbutton__item {
  298. max-width: var(--dropbutton-item-max-width);
  299. }
  300. .dropbutton__item:first-of-type ~ .dropbutton__item > a,
  301. .dropbutton__item:first-of-type ~ .dropbutton__item > .button {
  302. position: relative;
  303. padding: calc(var(--dropbutton-spacing-size) - var(--dropbutton-border-size));
  304. text-decoration: none;
  305. color: var(--color-gray-800);
  306. border: var(--dropbutton-border-size) solid transparent !important; /* 1 */
  307. border-radius: var(--dropbutton-border-radius-size);
  308. background: var(--color-white);
  309. box-shadow: 0;
  310. font-size: var(--dropbutton-font-size);
  311. font-weight: normal;
  312. line-height: var(--dropbutton-line-height);
  313. -webkit-font-smoothing: antialiased;
  314. }
  315. /**
  316. * Set the inherited button border color to transparent for high contrast
  317. * mode.
  318. */
  319. @media screen and (-ms-high-contrast: active) {
  320. .dropbutton__item:first-of-type ~ .dropbutton__item > a,
  321. .dropbutton__item:first-of-type ~ .dropbutton__item > .button {
  322. border-color: transparent !important;
  323. }
  324. }
  325. .dropbutton__item:first-of-type ~ .dropbutton__item > a:not(:focus),
  326. .dropbutton__item:first-of-type ~ .dropbutton__item > .button:not(:focus) {
  327. z-index: 1;
  328. }
  329. /* Variants. */
  330. .no-touchevents .dropbutton--small .dropbutton__item:first-of-type ~ .dropbutton__item > a,
  331. .no-touchevents .dropbutton--small .dropbutton__item:first-of-type ~ .dropbutton__item > .button {
  332. padding-top: var(--dropbutton-small-spacing-size);
  333. padding-bottom: var(--dropbutton-small-spacing-size);
  334. font-size: var(--dropbutton-small-font-size);
  335. line-height: var(--dropbutton-small-line-height);
  336. }
  337. .no-touchevents .dropbutton--extrasmall .dropbutton__item:first-of-type ~ .dropbutton__item > a,
  338. .no-touchevents .dropbutton--extrasmall .dropbutton__item:first-of-type ~ .dropbutton__item > .button {
  339. padding-top: var(--dropbutton-extrasmall-spacing-size);
  340. padding-bottom: var(--dropbutton-extrasmall-spacing-size);
  341. font-size: var(--dropbutton-extrasmall-font-size);
  342. line-height: var(--dropbutton-extrasmall-line-height);
  343. }
  344. /* States. */
  345. .dropbutton__item > *:focus {
  346. position: relative;
  347. z-index: 3;
  348. }
  349. .dropbutton__item:first-of-type ~ .dropbutton__item > *:hover {
  350. color: var(--color-text);
  351. background: var(--color-gray-050);
  352. }
  353. .dropbutton__item > .button:not(:focus) {
  354. box-shadow: none;
  355. }
  356. .dropbutton__item:first-of-type ~ .dropbutton__item > *:focus {
  357. border-color: var(--color-focus) !important; /* 1 */
  358. box-shadow: inset 0 0 0 1px var(--color-focus), 0 0 0 1px var(--color-focus);
  359. }