logo polydile logo polydile en modo oscuro dile-components

dile-slide-menu

This component is designed to show or hide a menu, or any other type of content, with a smooth slide-down and slide-up animation.

Installation

npm i @dile/ui

Usage

Import the component.

import '@dile/ui/components/slide-menu/slide-menu.js';

Use the component.

<dile-slide-menu label="Options">
  <ul>
    <li><a href="opt1">Option 1</a></li>
    <li><a href="opt2">Option 2</a></li>
    <li><a href="opt3">Option 3</a></li>
  </ul>
</dile-slide-menu>

Properties

Methods

CSS custom properties

You can customize the component styles using this CSS custom properties.

Custom property Description Default
--dile-slide-menu-font-size Font size for the open or close labels 1em
--dile-slide-menu-color Label text color #303030
--dile-slide-menu-font-weight Label font weight bold
--dile-slide-menu-text-decoration Label text decoration none
--dile-slide-menu-control-margin Margin to the controler label 0 0 0 0.25rem
--dile-slide-menu-closed-transform Transformation to the icon on closed state rotate(-90deg)
--dile-slide-menu-opened-transform Transformation to the icon on opened state rotate(0deg)
--dile-slide-menu-icon-margin Icon Margin 0 0.25rem 0 0
--dile-slide-menu-icon-color Icon color --dile-primary-color or #303030

dile-slide-menu demos

Regular demo

<style>
  ul.menulist {
    margin: 0 0.5rem;
    font-size: 0.9rem;
  }
  dile-slide-menu {
    --dile-slide-menu-icon-color: var(--dile-secondary-color, #999);
  }
</style>
<dile-slide-menu>
  <ul class="menulist">
    <li><a href="#">Option 1</a></li>
    <li><a href="#">Option 2</a></li>
    <li><a href="#">Option 3</a></li>
  </ul>
</dile-slide-menu>

Opened initial state

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Eaque, accusantium, nulla vel neque labore odio beatae perferendis modi possimus temporibus necessitatibus, exercitationem ea veritatis asperiores animi soluta officiis illum magnam.

<style>
  p.nomargin {
    margin: 0;
  }
</style>
<dile-slide-menu opened>
  <p class="nomargin">
  Lorem ipsum dolor, sit amet consectetur adipisicing elit. Eaque, accusantium, nulla vel neque labore odio beatae perferendis modi possimus temporibus necessitatibus, exercitationem ea veritatis asperiores animi soluta officiis illum magnam.
  </p>
</dile-slide-menu>

Styled menu

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Eaque, accusantium, nulla vel neque labore odio beatae perferendis modi possimus temporibus necessitatibus, exercitationem ea veritatis asperiores animi soluta officiis illum magnam.

<style>
  .styled {
    --dile-on-primary-color: purple;
    --dile-slide-menu-font-size: 0.875rem;
    --dile-slide-menu-font-weight: 300;
  }
  .styled p {
    font-size: 0.875rem;
    padding: 1rem 1.5rem;
    border-radius: 1rem;
    background-color: blueviolet;
    color: #fff;
    width: 360px;
  }
</style>
<dile-slide-menu class="styled">
  <p>
  Lorem ipsum dolor, sit amet consectetur adipisicing elit. Eaque, accusantium, nulla vel neque labore odio beatae perferendis modi possimus temporibus necessitatibus, exercitationem ea veritatis asperiores animi soluta officiis illum magnam.
  </p>
</dile-slide-menu>

Change icon

<script type="module">
import { LitElement, html, css } from 'lit';
import { addIcon } from "@dile/icons/index.js";

class MyComponent extends LitElement {
  static get styles() {
    return css`
      :host {
        --dile-slide-menu-icon-color: #f45;
      }
      
      ul {
        margin: 0;
        padding: 0;
      }
      li {
        padding: 0;
        margin: 0 0 0.5rem 0.5rem;
        list-style: none;
      }
      a {
        color: #69c;
      }
    `
  }

  render() {
    return html`
      <dile-slide-menu .icon=${addIcon}>
        <ul>
          <li><a href="#">Option 1</a></li>
          <li><a href="#">Option 2</a></li>
          <li><a href="#">Option 3</a></li>
        </ul>
      </dile-slide-menu>
    `
  }

}
customElements.define('my-component', MyComponent);
</script>
<my-component></my-component>