5.0.0 • Published 11 months ago

@w0s/details-animation v5.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
11 months ago

Animating the <details> element

npm version test status

Features

  • Animation effect on the opening and closing of HTML <details> element.
  • Animation speed (duration) and easing effects (easing) can be customized.
  • In prefers-reduced-motion: reduce environments, no animation is performed. (Version 4.2.0 or later)

Demo

Examples

<script type="importmap">
  {
    "imports": {
      "@w0s/details-animation": "...",
      "@w0s/shadow-append-css": "...",
      "@w0s/writing-mode": "..."
    }
  }
</script>
<script type="module">
  import DetailsAnimation from '@w0s/details-animation';

  for (const targetElement of document.querySelectorAll('.js-details-animation')) {
    new DetailsAnimation(targetElement);
  }
</script>

<details class="js-details-animation"
  open=""
  data-duration="1000"
  data-easing="linear"
>
  <summary>Caption Text</summary>
  <p>Contents text</p>
</details>

Attributes

Sample CSS

In order to achieve animation, the timing of setting the open attribute of the <details> element is delayed. Therefore, the viewlet icon of the <summary> element should be determined by the data-pre-open attribute.

details {
  --summary-icon-rotate: 0deg;

  &:is(:not([open]), [data-pre-open='false']) {
    --summary-icon-rotate: -90deg;
  }

  & > summary {
    list-style: none;

    &::-webkit-details-marker {
      display: none;
    }

    &::before {
      display: inline flow-root;
      margin-inline-end: 0.5em;
      content: '▼';
      rotate: var(--summary-icon-rotate);
    }
  }
}

* By including both :not([open]) and [data-pre-open='false'] in the selector's condition, we can handle both cases when JavaScript works correctly and when it does not (e.g. script disabled environment).

* Safari(17) does not support list-style for the <summary> element, so use the ::-webkit-details-marker pseudo-element. (Can I use...)

5.0.0

11 months ago

4.3.0

12 months ago

4.2.0

12 months ago

4.1.2

12 months ago

4.1.1

12 months ago

4.1.0

1 year ago

4.0.1

1 year ago

4.0.0

2 years ago