Learn more  » Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

nickfrez / unb-pretty   js

Repository URL to install this package:

/ modules / menu.styl

/*
#####
Menus
#####

Menus are a list of actions.  They may be static, or may popup/dropdown based
on user focus.

Usage
=====

.. code:: html

    <ul class="my-menu">
        <li>
            <a href="/somewhere">Hello</a>
        </li>
        <li>
            <a href="/other">World</a>
        </li>
    </ul>

.. code:: css

    .my-menu {
        @extends $menu;
    }


Nested Menus
------------

.. code:: html

    <ul className="user-menu">
        <li>
            <a href="#">Home</a>
        </li>
        <li>
            <a href="#">Tasks</a>
        </li>
        <li>
            <a href="#">User</a>
            <ul>
                <li><a href="#">Logout</a></li>
                <li>
                    <a href="#">Settings</a>
                    <ul>
                        <li><a href="#">Profile</a></li>
                        <li><a href="#">Notifications</a></li>
                    </ul>
                </li>
                <li><a href="#">Admin</a></li>
            </ul>
        </li>
    </ul>

.. code:: css

    .user-menu {
        @extends $menu--nested;
    }


``$menu--nested`` provides a quick way of creating nested menus.  If you want
more control over when, and where nested menus will pop up, you can include
whatever mixins you want.

.. code:: css

    .user-menu {
        @extends $menu--nested--base;
        @extends $menu--nested--focus;
        @extends $menu--nested--hover;
        @extends $menu--nested--popup--right;
    }

*/

// TODO(nick): The $popup--* mixins probably belong somewhere else.
//
$popup--right {
    position: absolute;
    left: 100%;
    top: 0;
    z-index: 5;
}
$popup--left {
    position: absolute;
    right: 100%;
    top: 0;
    z-index: 5;
}


$popup--east {
    position: absolute;
    left: 100%;
    top: 0;
    z-index: 5;
}
$popup--west {
    position: absolute;
    right: 100%;
    top: 0;
    z-index: 5;
}
$popup--north {
    position: absolute;
    right: 100%;
    top: 0;
    z-index: 5;
}
$popup--south {
    position: absolute;
    right: 100%;
    top: 0;
    z-index: 5;
}


$menu--item {
    position: relative;

    a {
        display: block;
        border: 10px;
        box-sizing: border-box;
        /* cursor: pointer; */
        text-decoration: none;
        padding: $padding.lg $padding.xxl $padding.lg $padding.lg;
        outline: none;
        color: rgba(0, 0, 0, 0.870588);
        position: relative;
        white-space: nowrap;
        transition: background-color $transition-duration ease;
    }

    &:hover {
        & > a {
            background-color: darken($color.grey-light, 5);
        }
    }

    &:active {
        background-color: lighten($color.grey, 15);
    }
}

$menu--item--focus {
    & > a:focus {
        background-color: darken($color.grey-light, 5);

        & + ul {
            display: block;
            position: absolute;
        }
    }
}

$menu--item--hover {
    &:hover {
        & > a {
            background-color: darken($color.grey-light, 5);
        }
        & > ul {
            display: block;
            position: absolute;
        }
    }
}


$menu--item--nested--popup--left {
    & > ul {
        @extends $popup--left;
    }
}

$menu--item--nested--popup--right {
    & > ul {
        @extends $popup--right;
    }
}


// =========================== menu ===========================

$menu--base {
    @extends $list--unstyled;

    display: inline-block;
    padding: $padding.md 0;
}

$menu--background {
    @extends $menu--base;

    background-color: white;
    border: 1px solid $color.grey-light;
    border-radius: 3px;
    box-shadow: $color.grey 0px 1px 6px, $color.grey 0px 1px 4px;
}

$menu {
    @extends $menu--background;

    li {
        @extends $menu--item;
    }
}

$menu--nested--base {
    @extends $menu--background;

    li {
        @extends $menu--item;

        ul {
            @extends $menu--background;
            display: none;
        }
    }
}

$menu--nested--hover {
    li {
        @extends $menu--item--hover;
    }
}
$menu--nested--focus {
    li {
        @extends $menu--item--focus;
    }
}
$menu--nested--popup--left {
    li {
        @extends $menu--item--nested--popup--left;
    }
}
$menu--nested--popup--right {
    li {
        @extends $menu--item--nested--popup--right;
    }
}

$menu--nested {
    @extends $menu--nested--base;

    li {
        @extends $menu--item--hover;                 // when to show
        @extends $menu--item--nested--popup--right;  // how to show
    }
}