gin-dropbutton.pcss.css

Same filename and directory in other branches
  1. main core/themes/default_admin/migration/css/base/gin-dropbutton.pcss.css
.dropbutton-widget,
html.js .dropbutton-widget {
  background-color: transparent;
}

/* Overlay the dropdown button on top of the sticky header and main toolbar */
html.js {
  .dropbutton-wrapper.open {
    .dropbutton-widget {
      z-index: 502; /* Above toolbar and sticky header */
    }

    .dropbutton {
      background: var(--gin-bg-layer3);
    }
  }
}

.dropbutton {
  border: 2px solid var(--gin-color-primary);
  border-radius: var(--gin-border-m);
  box-shadow: 0 1px 2px var(--gin-color-primary-light);

  .gin--dark-mode & {
    box-shadow: 0 4px 18px var(--gin-shadow-button);
  }

  &:hover {
    border-color: var(--gin-color-primary);
  }

  &:active,
  &:focus {
    border-color: var(--gin-color-primary-active);
  }

  .dropbutton__items {
    position: absolute;
    min-width: 120px;
    margin: 0;
    padding: 0.5em;
    list-style: none;
    border-radius: var(--gin-border-l);
    background: var(--gin-bg-layer3);
    box-shadow: var(--gin-shadow-l2);
    inset-inline-end: 0;

    .node-form & {
      inset-inline-start: 0;
      inset-inline-end: auto;
    }

    @media (forced-colors: active) {
      border: 1px solid linktext;
    }
  }

  > .dropbutton__items > .dropbutton__item:first-of-type {
    > a,
    > input,
    > .button {
      border-radius: var(--gin-border-s) var(--gin-border-s) 0 0;
    }
  }

  /* Drupal 10.2.x fix */
  &.dropbutton--gin .dropbutton-action > .button {
    border: var(--dropbutton-border-size) solid transparent !important;
  }

  /* The ugly part: make it work for all different dropbutton versions out there */
  &:not(.dropbutton--gin) > .dropbutton__item ~ .dropbutton__item,
  .dropbutton__items > .dropbutton__item,
  .dropbutton__items > .dropbutton__item ~ .dropbutton__item {
    border: 0 none;
    background-color: var(--gin-bg-app);
    box-shadow: none;

    &:first-of-type {
      margin-inline-end: 0;
    }

    /* Multiple Dropbutton only has one item */
    &:first-of-type:last-of-type > * {
      .js .dropbutton--multiple & {
        border-radius: var(--gin-border-s);
      }
    }

    > a,
    > input,
    > .button {
      display: block;
      overflow: hidden;
      box-sizing: border-box;
      width: 100%;
      max-width: 320px;
      margin: 0;
      text-align: start;
      white-space: nowrap;
      text-overflow: ellipsis;
      color: var(--gin-color-primary);
      border: 0 none !important;
      border-radius: 0;
      background: var(--gin-bg-layer3);
      box-shadow: none;
      font-weight: var(--gin-font-weight-heavy);

      &:hover,
      &:active,
      &:focus {
        color: var(--gin-color-button-text);
        border-radius: var(--gin-border-s);
        background: var(--gin-color-primary);

        @media (forced-colors: active) {
          outline: 2px solid transparent;
          outline-offset: -2px;
        }
      }

      &:focus {
        @media (forced-colors: active) {
          outline-style: dotted;
        }
      }
    }
  }

  & > .dropbutton__item:first-of-type {
    > a,
    > input,
    > .button {
      &:hover,
      &:active,
      &:focus {
        color: var(--gin-color-button-text);
        background: var(--gin-color-primary);
      }
    }
  }

  .dropbutton__items > .dropbutton__item {
    border-radius: var(--gin-border-s);
  }

  /* Shadow for pseudo dropdown on views page */
  &:not(.dropbutton--gin) > .dropbutton__item.secondary-action {
    box-shadow: var(--gin-shadow-l2);
  }

  &:not(.dropbutton--gin) > .dropbutton__item:not(:first-of-type),
  .dropbutton__items > .dropbutton__item,
  > .dropbutton__items > .dropbutton__item ~ .dropbutton__item {
    > a,
    > input,
    > .button {
      padding: 0.75em 1em !important;
      font-size: var(--gin-font-size-s) !important;
    }
  }
}

/* Offset for select button on first item */
.dropbutton--multiple > .dropbutton__item:first-of-type {
  height: 100%;
  border-inline-end: 1px solid var(--gin-color-primary-light-active);

  input {
    height: 100%;
    color: var(--gin-color-primary);
    border: 0 none !important;
    border-radius: 0 !important;
    background-color: transparent;
  }
}

.dropbutton-wrapper {
  box-shadow: none;
}

.dropbutton__item:first-of-type > *,
.dropbutton__toggle {
  white-space: nowrap;
  background: none;

  @media (forced-colors: active) {
    border-width: 0 !important;
  }
}

.dropbutton__item:first-of-type > * {
  padding: calc(0.875rem - 1px) calc(var(--gin-spacing-l) - 1px);
}

.dropbutton__toggle {
  inset-block-start: 2px;
  inset-inline-end: 2px;
  width: calc(var(--gin-spacing-xxl) + 1px);
  height: 2.75rem;
  border-inline-start: var(--dropbutton-border-size, 1px) solid var(--gin-color-primary) !important;

  &:hover {
    background-color: var(--gin-color-primary);
  }

  @media not (forced-colors: active) {
    &::before {
      background-color: var(--gin-color-primary);
      background-image: none;
      mask-image: var(--admin-icon-drop);
      mask-repeat: no-repeat;
      mask-position: center center;
      mask-size: 12px 12px;
    }

    &:hover::before,
    &:active::before,
    &:focus::before {
      background-color: var(--gin-color-button-text);
    }
  }
}

.dropbutton__item:first-of-type ~ .dropbutton__item {
  max-width: unset;
  border-color: var(--gin-color-primary);

  & > *:hover {
    background-color: var(--gin-bg-layer3);
  }
}

.dropbutton__item:first-of-type ~ .dropbutton__item__item ~ .dropbutton__item:last-child {
  border-color: var(--gin-color-primary);
}

html.js {
  .dropbutton {
    box-sizing: border-box;
    height: 3rem;
    min-height: 3rem;
  }

  .dropbutton-wrapper:not(.open) .dropbutton__items {
    visibility: hidden;
    opacity: 0;
  }

  .dropbutton-wrapper .dropbutton__items {
    visibility: visible;
    overflow: auto;
    max-height: 30vh;
    opacity: 1;
  }

  .dropbutton-wrapper:not(.open) .dropbutton__item:first-of-type ~ .dropbutton__items {
    display: none;
  }

  .dropbutton-wrapper:not(.open) .dropbutton__items .dropbutton__item:first-of-type ~ .dropbutton__item {
    display: block;
    height: auto;
  }
}

html.js.no-touchevents {
  .dropbutton--multiple.dropbutton--small .dropbutton__item:first-of-type {
    margin-inline-end: 0;
  }

  .dropbutton--multiple.dropbutton--small > .dropbutton__item:first-of-type {
    margin-inline-end: var(--gin-spacing-xl);
  }

  .dropbutton--multiple.dropbutton--extrasmall > .dropbutton__item:first-of-type {
    margin-inline-end: var(--gin-spacing-l);
  }

  .dropbutton--small {
    min-width: 0;
    height: 2.25rem;
    min-height: 2.25rem;
    border-radius: var(--gin-border-s);

    .dropbutton__toggle {
      width: calc(var(--dropbutton-small-toggle-size, 2rem) + 1px);
    }
  }

  .dropbutton--extrasmall {
    min-width: 0;
    height: 1.75rem;
    min-height: 1.75rem;
    border-radius: var(--gin-border-s);

    .dropbutton__toggle {
      width: calc(var(--dropbutton-extrasmall-toggle-size, 1.5rem) + 1px);
    }

    .dropbutton__item:first-of-type > * {
      padding-inline: var(--gin-spacing-s);
    }
  }

  .dropbutton--multiple.dropbutton--extrasmall .dropbutton__items .dropbutton__item {
    margin-inline-end: 0;
  }
}

File

core/themes/default_admin/migration/css/base/gin-dropbutton.pcss.css

View source
  1. .dropbutton-widget,
  2. html.js .dropbutton-widget {
  3. background-color: transparent;
  4. }
  5. /* Overlay the dropdown button on top of the sticky header and main toolbar */
  6. html.js {
  7. .dropbutton-wrapper.open {
  8. .dropbutton-widget {
  9. z-index: 502; /* Above toolbar and sticky header */
  10. }
  11. .dropbutton {
  12. background: var(--gin-bg-layer3);
  13. }
  14. }
  15. }
  16. .dropbutton {
  17. border: 2px solid var(--gin-color-primary);
  18. border-radius: var(--gin-border-m);
  19. box-shadow: 0 1px 2px var(--gin-color-primary-light);
  20. .gin--dark-mode
  21. &:hover {
  22. border-color: var(--gin-color-primary);
  23. }
  24. &:active,
  25. &:focus {
  26. border-color: var(--gin-color-primary-active);
  27. }
  28. .dropbutton__items {
  29. position: absolute;
  30. min-width: 120px;
  31. margin: 0;
  32. padding: 0.5em;
  33. list-style: none;
  34. border-radius: var(--gin-border-l);
  35. background: var(--gin-bg-layer3);
  36. box-shadow: var(--gin-shadow-l2);
  37. inset-inline-end: 0;
  38. .node-form
  39. @media (forced-colors: active) {
  40. border: 1px solid linktext;
  41. }
  42. }
  43. > .dropbutton__items > .dropbutton__item:first-of-type {
  44. > a,
  45. > input,
  46. > .button {
  47. border-radius: var(--gin-border-s) var(--gin-border-s) 0 0;
  48. }
  49. }
  50. /* Drupal 10.2.x fix */
  51. &.dropbutton--gin .dropbutton-action > .button {
  52. border: var(--dropbutton-border-size) solid transparent !important;
  53. }
  54. /* The ugly part: make it work for all different dropbutton versions out there */
  55. &:not(.dropbutton--gin) > .dropbutton__item ~ .dropbutton__item,
  56. .dropbutton__items > .dropbutton__item,
  57. .dropbutton__items > .dropbutton__item ~ .dropbutton__item {
  58. border: 0 none;
  59. background-color: var(--gin-bg-app);
  60. box-shadow: none;
  61. &:first-of-type {
  62. margin-inline-end: 0;
  63. }
  64. /* Multiple Dropbutton only has one item */
  65. &:first-of-type:last-of-type > * {
  66. .js .dropbutton--multiple
  67. }
  68. > a,
  69. > input,
  70. > .button {
  71. display: block;
  72. overflow: hidden;
  73. box-sizing: border-box;
  74. width: 100%;
  75. max-width: 320px;
  76. margin: 0;
  77. text-align: start;
  78. white-space: nowrap;
  79. text-overflow: ellipsis;
  80. color: var(--gin-color-primary);
  81. border: 0 none !important;
  82. border-radius: 0;
  83. background: var(--gin-bg-layer3);
  84. box-shadow: none;
  85. font-weight: var(--gin-font-weight-heavy);
  86. &:hover,
  87. &:active,
  88. &:focus {
  89. color: var(--gin-color-button-text);
  90. border-radius: var(--gin-border-s);
  91. background: var(--gin-color-primary);
  92. @media (forced-colors: active) {
  93. outline: 2px solid transparent;
  94. outline-offset: -2px;
  95. }
  96. }
  97. &:focus {
  98. @media (forced-colors: active) {
  99. outline-style: dotted;
  100. }
  101. }
  102. }
  103. }
  104. & > .dropbutton__item:first-of-type {
  105. > a,
  106. > input,
  107. > .button {
  108. &:hover,
  109. &:active,
  110. &:focus {
  111. color: var(--gin-color-button-text);
  112. background: var(--gin-color-primary);
  113. }
  114. }
  115. }
  116. .dropbutton__items > .dropbutton__item {
  117. border-radius: var(--gin-border-s);
  118. }
  119. /* Shadow for pseudo dropdown on views page */
  120. &:not(.dropbutton--gin) > .dropbutton__item.secondary-action {
  121. box-shadow: var(--gin-shadow-l2);
  122. }
  123. &:not(.dropbutton--gin) > .dropbutton__item:not(:first-of-type),
  124. .dropbutton__items > .dropbutton__item,
  125. > .dropbutton__items > .dropbutton__item ~ .dropbutton__item {
  126. > a,
  127. > input,
  128. > .button {
  129. padding: 0.75em 1em !important;
  130. font-size: var(--gin-font-size-s) !important;
  131. }
  132. }
  133. }
  134. /* Offset for select button on first item */
  135. .dropbutton--multiple > .dropbutton__item:first-of-type {
  136. height: 100%;
  137. border-inline-end: 1px solid var(--gin-color-primary-light-active);
  138. input {
  139. height: 100%;
  140. color: var(--gin-color-primary);
  141. border: 0 none !important;
  142. border-radius: 0 !important;
  143. background-color: transparent;
  144. }
  145. }
  146. .dropbutton-wrapper {
  147. box-shadow: none;
  148. }
  149. .dropbutton__item:first-of-type > *,
  150. .dropbutton__toggle {
  151. white-space: nowrap;
  152. background: none;
  153. @media (forced-colors: active) {
  154. border-width: 0 !important;
  155. }
  156. }
  157. .dropbutton__item:first-of-type > * {
  158. padding: calc(0.875rem - 1px) calc(var(--gin-spacing-l) - 1px);
  159. }
  160. .dropbutton__toggle {
  161. inset-block-start: 2px;
  162. inset-inline-end: 2px;
  163. width: calc(var(--gin-spacing-xxl) + 1px);
  164. height: 2.75rem;
  165. border-inline-start: var(--dropbutton-border-size, 1px) solid var(--gin-color-primary) !important;
  166. &:hover {
  167. background-color: var(--gin-color-primary);
  168. }
  169. @media not (forced-colors: active) {
  170. &::before {
  171. background-color: var(--gin-color-primary);
  172. background-image: none;
  173. mask-image: var(--admin-icon-drop);
  174. mask-repeat: no-repeat;
  175. mask-position: center center;
  176. mask-size: 12px 12px;
  177. }
  178. &:hover::before,
  179. &:active::before,
  180. &:focus::before {
  181. background-color: var(--gin-color-button-text);
  182. }
  183. }
  184. }
  185. .dropbutton__item:first-of-type ~ .dropbutton__item {
  186. max-width: unset;
  187. border-color: var(--gin-color-primary);
  188. & > *:hover {
  189. background-color: var(--gin-bg-layer3);
  190. }
  191. }
  192. .dropbutton__item:first-of-type ~ .dropbutton__item__item ~ .dropbutton__item:last-child {
  193. border-color: var(--gin-color-primary);
  194. }
  195. html.js {
  196. .dropbutton {
  197. box-sizing: border-box;
  198. height: 3rem;
  199. min-height: 3rem;
  200. }
  201. .dropbutton-wrapper:not(.open) .dropbutton__items {
  202. visibility: hidden;
  203. opacity: 0;
  204. }
  205. .dropbutton-wrapper .dropbutton__items {
  206. visibility: visible;
  207. overflow: auto;
  208. max-height: 30vh;
  209. opacity: 1;
  210. }
  211. .dropbutton-wrapper:not(.open) .dropbutton__item:first-of-type ~ .dropbutton__items {
  212. display: none;
  213. }
  214. .dropbutton-wrapper:not(.open) .dropbutton__items .dropbutton__item:first-of-type ~ .dropbutton__item {
  215. display: block;
  216. height: auto;
  217. }
  218. }
  219. html.js.no-touchevents {
  220. .dropbutton--multiple.dropbutton--small .dropbutton__item:first-of-type {
  221. margin-inline-end: 0;
  222. }
  223. .dropbutton--multiple.dropbutton--small > .dropbutton__item:first-of-type {
  224. margin-inline-end: var(--gin-spacing-xl);
  225. }
  226. .dropbutton--multiple.dropbutton--extrasmall > .dropbutton__item:first-of-type {
  227. margin-inline-end: var(--gin-spacing-l);
  228. }
  229. .dropbutton--small {
  230. min-width: 0;
  231. height: 2.25rem;
  232. min-height: 2.25rem;
  233. border-radius: var(--gin-border-s);
  234. .dropbutton__toggle {
  235. width: calc(var(--dropbutton-small-toggle-size, 2rem) + 1px);
  236. }
  237. }
  238. .dropbutton--extrasmall {
  239. min-width: 0;
  240. height: 1.75rem;
  241. min-height: 1.75rem;
  242. border-radius: var(--gin-border-s);
  243. .dropbutton__toggle {
  244. width: calc(var(--dropbutton-extrasmall-toggle-size, 1.5rem) + 1px);
  245. }
  246. .dropbutton__item:first-of-type > * {
  247. padding-inline: var(--gin-spacing-s);
  248. }
  249. }
  250. .dropbutton--multiple.dropbutton--extrasmall .dropbutton__items .dropbutton__item {
  251. margin-inline-end: 0;
  252. }
  253. }

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