diff --git a/contents/_includes/covers/nested-dropdowns.njk b/contents/_includes/covers/nested-dropdowns.njk new file mode 100644 index 0000000..713e04a --- /dev/null +++ b/contents/_includes/covers/nested-dropdowns.njk @@ -0,0 +1,28 @@ + \ No newline at end of file diff --git a/contents/index.njk b/contents/index.njk index dffecf9..b6600a3 100644 --- a/contents/index.njk +++ b/contents/index.njk @@ -133,6 +133,7 @@ eleventyExcludeFromCollections: true {% pattern "Full screen menu" %}{% include "covers/full-screen-menu.njk" %}{% endpattern %} {% pattern "Mega menu" %}{% include "covers/mega-menu.njk" %}{% endpattern %} {% pattern "Menu" %}{% include "covers/menu.njk" %}{% endpattern %} + {% pattern "Nested dropdowns" %}{% include "covers/nested-dropdowns.njk" %}{% endpattern %} {% pattern "Pagination" %}{% include "covers/pagination.njk" %}{% endpattern %} {% pattern "Previous next buttons" %}{% include "covers/previous-next-buttons.njk" %}{% endpattern %} {% pattern "Split navigation" %}{% include "covers/split-navigation.njk" %}{% endpattern %} diff --git a/contents/nested-dropdowns.md b/contents/nested-dropdowns.md new file mode 100644 index 0000000..370e738 --- /dev/null +++ b/contents/nested-dropdowns.md @@ -0,0 +1,102 @@ +--- +layout: layouts/post.njk +title: Nested dropdowns +description: Create nested dropdown menu with CSS +keywords: css dropdown menu, css multi-level dropdown menu, css nested dropdown menu +--- + +## HTML + +```html + +``` + +## CSS + +```css +.nested-dropdowns { + /* Border */ + border: 1px solid #d1d5db; + display: flex; + + /* Reset list styles */ + list-style-type: none; + margin: 0; + padding: 0; +} + +.nested-dropdowns li { + cursor: pointer; + + /* Spacing */ + padding: 0.25rem; + + /* Used to position the sub nested-dropdowns */ + position: relative; +} + +/* The sub nested-dropdowns */ +.nested-dropdowns ul { + /* Border */ + border: 1px solid #d1d5db; + + /* Hidden by default */ + display: none; + + /* Absolute position */ + left: 0; + position: absolute; + top: 100%; + + /* Reset styles */ + list-style-type: none; + margin: 0; + padding: 0; +} + +/* The second level sub nested-dropdowns */ +.nested-dropdowns ul ul { + left: 100%; + position: absolute; + top: 0; +} + +/* Change background color of list item when being hovered */ +.nested-dropdowns li:hover { + background-color: rgba(0, 0, 0, 0.1); +} + +/* Show the direct sub nested-dropdowns when hovering the list item */ +.nested-dropdowns li:hover > ul { + display: block; +} +``` + +{% demo %}{% include "covers/nested-dropdowns.njk" %}{% enddemo %} diff --git a/pages/nested-dropdowns/index.tsx b/pages/nested-dropdowns/index.tsx deleted file mode 100644 index a512976..0000000 --- a/pages/nested-dropdowns/index.tsx +++ /dev/null @@ -1,149 +0,0 @@ -import * as React from 'react'; -import Head from 'next/head'; -import { Spacer } from '@1milligram/design'; - -import { RelatedPatterns } from '../../components/RelatedPatterns'; -import { Pattern } from '../../constants/Pattern'; -import { PatternLayout } from '../../layouts/PatternLayout'; -import BrowserFrame from '../../placeholders/BrowserFrame'; - -const Details: React.FC<{}> = () => { - return ( - - - - - - - -
- Hover on the Patterns → Navigation to see the sub dropdowns. -
- -
  • Home
  • -
  • -
    Patterns
    - -
      -
    • Layout
    • -
    • Input
    • -
    • -
      Navigation
      - -
        -
      • Breadcrumb
      • -
      • Dropdown
      • -
      • Menu
      • -
      • Nested dropdown
      • -
      -
    • -
    • Display
    • -
    • Feedback
    • -
    -
  • -
  • Products
  • -
  • About
  • - -`} - css={` - .dropdown { - /* Border */ - border: 1px solid #d1d5db; - display: flex; - - /* Reset list styles */ - list-style-type: none; - margin: 0; - padding: 0; - } - - .dropdown li { - /* Spacing */ - padding: 8px; - - /* Used to position the sub dropdown */ - position: relative; - } - - /* The sub dropdown */ - .dropdown ul { - /* Border */ - border: 1px solid #d1d5db; - - /* Hidden by default */ - display: none; - - /* Absolute position */ - left: 0; - position: absolute; - top: 100%; - - /* Reset styles */ - list-style-type: none; - margin: 0; - padding: 0; - - /* Width */ - width: 200px; - } - - /* The second level sub dropdown */ - .dropdown ul ul { - left: 100%; - position: absolute; - top: 0; - } - - /* Change background color of list item when being hovered */ - .dropdown li:hover { - background-color: rgba(0, 0, 0, 0.1); - } - - /* Show the direct sub dropdown when hovering the list item */ - .dropdown li:hover > ul { - display: block; - } - `} - > -
    -
      -
    • Home
    • -
    • -
      Patterns
      -
        -
      • Layout
      • -
      • Input
      • -
      • -
        Navigation
        -
          -
        • Breadcrumb
        • -
        • Dropdown
        • -
        • Menu
        • -
        • Nested dropdown
        • -
        -
      • -
      • Display
      • -
      • Feedback
      • -
      -
    • -
    • Products
    • -
    • About
    • -
    -
    -
    - - -
    - ); -}; - -export default Details; diff --git a/patterns/nested-dropdowns/Cover.tsx b/patterns/nested-dropdowns/Cover.tsx deleted file mode 100644 index 989d992..0000000 --- a/patterns/nested-dropdowns/Cover.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import * as React from 'react'; - -import Circle from '../../placeholders/Circle'; -import Frame from '../../placeholders/Frame'; -import Line from '../../placeholders/Line'; - -const Cover: React.FC<{}> = () => { - return ( - -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    - -
    -
    -
    - - ); -}; - -export default Cover; diff --git a/styles/index.scss b/styles/index.scss index 4d0c851..f7a667e 100644 --- a/styles/index.scss +++ b/styles/index.scss @@ -60,6 +60,7 @@ @import './patterns/mega-menu'; @import './patterns/menu'; @import './patterns/modal'; +@import './patterns/nested-dropdowns'; @import './patterns/notification'; @import './patterns/overlay-play-button'; @import './patterns/pagination'; diff --git a/styles/patterns/_nested-dropdowns.scss b/styles/patterns/_nested-dropdowns.scss new file mode 100644 index 0000000..7329ef1 --- /dev/null +++ b/styles/patterns/_nested-dropdowns.scss @@ -0,0 +1,65 @@ +.nested-dropdowns { + /* Border */ + border: 1px solid #d1d5db; + display: flex; + + /* Reset list styles */ + list-style-type: none; + margin: 0; + padding: 0; +} + +.nested-dropdowns li { + cursor: pointer; + + /* Spacing */ + padding: 0.25rem; + + /* Used to position the sub nested-dropdowns */ + position: relative; +} + +/* The sub nested-dropdowns */ +.nested-dropdowns ul { + /* Border */ + border: 1px solid #d1d5db; + + /* Hidden by default */ + display: none; + + /* Absolute position */ + left: 0; + position: absolute; + top: 100%; + + /* Reset styles */ + list-style-type: none; + margin: 0; + padding: 0; +} + +/* The second level sub nested-dropdowns */ +.nested-dropdowns ul ul { + left: 100%; + position: absolute; + top: 0; +} + +/* Change background color of list item when being hovered */ +.nested-dropdowns li:hover { + background-color: rgba(0, 0, 0, 0.1); +} + +/* Show the direct sub nested-dropdowns when hovering the list item */ +.nested-dropdowns li:hover > ul { + display: block; +} + +/* Demo */ +.nested-dropdowns__item { + align-items: center; + display: flex; +} +.nested-dropdowns__arrow { + margin-left: 0.25rem; +} \ No newline at end of file