UNPKG

stacked-menu

Version:

A flexible stacked navigation menu.

435 lines (413 loc) 16.1 kB
/** The root StackedMenu */ .stacked-menu { position: relative; background-color: #15191d; padding: .25rem 0; /* global state */ /* nav child */ /* nav level 1 */ /* disabled state */ } .stacked-menu ul.menu { display: block; margin-bottom: 0; padding-left: 0; list-style: none; } .stacked-menu ul.menu + .menu { margin-top: 1em; } .stacked-menu .menu-header { margin: .5em 0 0; padding: 0.5rem 1rem; color: #555; font-size: 0.8125rem; font-weight: bold; letter-spacing: 1px; text-transform: uppercase; } .stacked-menu .menu-header > .badge, .stacked-menu .menu-header > .label { position: absolute; right: 0.75rem; z-index: 2; } .stacked-menu .menu-subhead { display: none; padding: 0.5rem 1rem; overflow: hidden; color: #fff; font-size: 0.875rem; line-height: 1.75em; } .stacked-menu .menu-link { display: block; position: relative; outline: 0; padding: 0.5rem 1rem; overflow: hidden; color: #999; font-size: 0.875rem; line-height: 1.75em; text-decoration: none; } .stacked-menu .menu-link > .menu-icon { margin-right: .5em; width: 1.25em; color: #999; font-size: 1rem; text-align: center; } .stacked-menu .menu-link > .badge, .stacked-menu .menu-link > .label { position: absolute; right: 0.75rem; z-index: 2; margin-top: .25em; } .stacked-menu .menu-link:focus { background-color: transparent; overflow: visible; color: #5d67ad; text-decoration: none; } .stacked-menu .menu-link:focus .menu-icon { color: #eee; } .stacked-menu .menu-link:hover { background-color: transparent; overflow: visible; color: #5d67ad; text-decoration: none; } .stacked-menu .menu-link:hover .menu-icon { color: #eee; } .stacked-menu .menu-item + .menu-item { margin-top: 0; } .stacked-menu .menu-item.has-open:not(.has-active) > .menu-link { background-color: transparent; color: #5d67ad; } .stacked-menu .menu-item.has-open:not(.has-active) > .menu-link .menu-icon { color: #eee; } .stacked-menu .menu-item.has-active > .menu-link { background-color: transparent; color: #fff; } .stacked-menu .menu-item.has-active > .menu-link .menu-icon { color: #eee; } .stacked-menu .has-child { position: relative; } .stacked-menu .has-child > .menu { visibility: hidden; opacity: 0; background-color: #1b2126; height: 0; } .stacked-menu .has-child.has-active:hover > .menu, .stacked-menu .has-child.has-open > .menu { overflow: visible; } .stacked-menu .has-child.has-active > .menu { visibility: visible; opacity: 1; height: auto; } .stacked-menu > .menu > .menu-item { /* level 1 */ } .stacked-menu > .menu > .menu-item > .menu-link { color: #ccc; } .stacked-menu > .menu > .menu-item > .menu-link:focus { background-color: #0f1114; color: #eee; } .stacked-menu > .menu > .menu-item > .menu-link:hover { background-color: #0f1114; color: #eee; } .stacked-menu > .menu > .menu-item.has-open > .menu-link { background-color: #0f1114; color: #eee; } .stacked-menu > .menu > .menu-item.has-active > .menu-link { -webkit-box-shadow: inset 3px 0 0 #5d67ad; box-shadow: inset 3px 0 0 #5d67ad; background-color: #20262c; color: #eee; } .stacked-menu > .menu > .menu-item > .menu { /* level 2 */ } .stacked-menu > .menu > .menu-item > .menu .menu-link { padding-left: 3rem; } .stacked-menu > .menu > .menu-item > .menu .menu { /* level 3 */ } .stacked-menu > .menu > .menu-item > .menu .menu .menu-link { padding-left: 4rem; } .stacked-menu > .menu > .menu-item > .menu .menu .menu .menu-link { padding-left: 5rem; } .stacked-menu .menu-item.disabled > .menu-link, .stacked-menu .menu-item > .menu-link.disabled { color: #555; } .stacked-menu .menu-item.disabled > .menu-link .menu-icon, .stacked-menu .menu-item > .menu-link.disabled .menu-icon { color: #555; } .stacked-menu .menu-item.disabled > .menu-link:focus, .stacked-menu .menu-item.disabled > .menu-link:focus .menu-icon, .stacked-menu .menu-item > .menu-link.disabled:focus, .stacked-menu .menu-item > .menu-link.disabled:focus .menu-icon { background-color: transparent; color: #555; } .stacked-menu .menu-item.disabled > .menu-link:hover, .stacked-menu .menu-item.disabled > .menu-link:hover .menu-icon, .stacked-menu .menu-item > .menu-link.disabled:hover, .stacked-menu .menu-item > .menu-link.disabled:hover .menu-icon { background-color: transparent; color: #555; } /* Compact */ .stacked-menu-has-compact .has-child.has-active > .menu { visibility: hidden; opacity: 0; height: 0; } .stacked-menu-has-compact .has-child.has-active .menu-subhead { background-color: #20262c; } .stacked-menu-has-compact .has-child .menu-subhead { display: block; } .stacked-menu-has-compact > .menu > .menu-item > .menu-link { padding-right: 0; padding-left: 0; max-height: 40px; text-align: center; } .stacked-menu-has-compact > .menu > .menu-item > .menu-link > .badge, .stacked-menu-has-compact > .menu > .menu-item > .menu-link > .label { top: 0; right: 0.25rem; } .stacked-menu-has-compact > .menu > .menu-item > .menu-link .menu-icon { margin: 0; font-size: 1.25em; line-height: 1.5em; } .stacked-menu-has-compact > .menu > .menu-item.has-child > .menu-link .menu-text { display: none; } .stacked-menu-has-compact > .menu > .menu-header { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; visibility: hidden; opacity: 0; margin: 0; height: 0; overflow: hidden; user-select: none; } .stacked-menu-has-compact > .menu > .menu-item:not(.has-child) > .menu-link .menu-text { -webkit-transition: opacity 150ms linear; -o-transition: opacity 150ms linear; display: block; position: absolute; top: 0; left: 100%; visibility: hidden; opacity: 0; transition: opacity 150ms linear; border-radius: 0 0 0 0; background-color: #0f1114; padding: 0.5rem 0.75rem 0.5rem 0; width: 0; height: 0; line-height: 1.75em; white-space: nowrap; } .stacked-menu-has-compact > .menu > .menu-item:not(.has-child) > .menu-link:hover .menu-text { visibility: visible; opacity: 1; width: auto; height: auto; } .stacked-menu-has-compact > .menu > .menu-item.has-active > .menu-link .menu-text { background-color: #20262c; } .stacked-menu-has-compact > .menu > .menu-item.disabled > .menu-link .menu-text, .stacked-menu-has-compact > .menu > .menu-item > .menu-link.disabled .menu-text { background-color: #15191d; } .stacked-menu-has-compact > .menu > .menu-item.has-child > .menu-link:before { content: none; } .stacked-menu-has-compact > .menu > .menu-item.has-child > .menu-link .menu-text { padding: 0.5rem 1rem; width: 200px; text-align: left; } /* Behavior */ .stacked-menu-has-collapsible { /** caret angle, Only show on collapsible mode */ } .stacked-menu-has-collapsible .has-child > .menu-link::after { -webkit-transform: translateY(-0.5em); -ms-transform: translateY(-0.5em); -o-transform: translateY(-0.5em); display: inline-block; position: absolute; top: 50%; right: 0.75rem; transform: translateY(-0.5em); width: 1em; height: 1em; line-height: 1em; text-align: center; content: '+'; } .stacked-menu-has-collapsible .has-child.has-active > .menu-link::after, .stacked-menu-has-collapsible .has-child.has-open > .menu-link::after { content: '-'; } .stacked-menu-has-collapsible .has-child > .menu { visibility: visible; opacity: 1; overflow: hidden; } .stacked-menu-has-collapsible .has-child.has-open:not(.has-active) > .menu { height: auto; } /** collapsible on compact mode */ .stacked-menu-has-collapsible.stacked-menu-has-compact { /** hide caret on level 1 */ /** child level 2 up */ } .stacked-menu-has-collapsible.stacked-menu-has-compact > .menu > .has-child > .menu { -webkit-transform-origin: 0 0; -ms-transform-origin: 0 0; -o-transform-origin: 0 0; -webkit-transform: scale(0.6); -ms-transform: scale(0.6); -o-transform: scale(0.6); -webkit-transition: opacity 150ms linear, -webkit-transform 150ms linear; -o-transition: opacity 150ms linear, -o-transform 150ms linear; transform: scale(0.6); transform-origin: 0 0; transition: opacity 150ms linear, -webkit-transform 150ms linear; transition: opacity 150ms linear, transform 150ms linear; transition: opacity 150ms linear, transform 150ms linear, -webkit-transform 150ms linear, -o-transform 150ms linear; } .stacked-menu-has-collapsible.stacked-menu-has-compact > .menu > .has-child.has-open > .menu { -webkit-transform: scale(1); -ms-transform: scale(1); -o-transform: scale(1); transform: scale(1); } .stacked-menu-has-collapsible.stacked-menu-has-compact > .menu > .has-child > .menu-link:after { display: none; } .stacked-menu-has-collapsible.stacked-menu-has-compact .has-child.has-open > .menu { position: absolute; top: 0; left: 100%; visibility: visible; opacity: 1; border-radius: 0 0 0 0; width: 200px; height: auto; } .stacked-menu-has-collapsible.stacked-menu-has-compact .has-child > .menu .menu-link { padding-left: 1rem; } .stacked-menu-has-collapsible.stacked-menu-has-compact .menu .menu .has-child.has-open > .menu { position: static; top: auto; left: auto; width: auto; } .stacked-menu-has-collapsible.stacked-menu-has-compact .menu .menu .has-child > .menu .menu-link { padding-left: 2rem; } .stacked-menu-has-collapsible.stacked-menu-has-compact .menu .menu .has-child > .menu .menu .menu-link { padding-left: 3rem; } /* Give a transition */ .stacked-menu-has-hoverable { /** except level 1 .has-active */ } .stacked-menu-has-hoverable .has-child > .menu { -webkit-transform-origin: 0 0; -ms-transform-origin: 0 0; -o-transform-origin: 0 0; -webkit-transition: opacity 150ms linear, -webkit-transform 150ms linear; -o-transition: opacity 150ms linear, -o-transform 150ms linear; transform-origin: 0 0; transition: opacity 150ms linear, -webkit-transform 150ms linear; transition: opacity 150ms linear, transform 150ms linear; transition: opacity 150ms linear, transform 150ms linear, -webkit-transform 150ms linear, -o-transform 150ms linear; } .stacked-menu-has-hoverable .has-child:not(.has-active) > .menu { -webkit-transform: scale(0.6); -ms-transform: scale(0.6); -o-transform: scale(0.6); transform: scale(0.6); } .stacked-menu-has-hoverable.stacked-menu-has-compact { /** level 1 */ /** overwrite for all */ } .stacked-menu-has-hoverable.stacked-menu-has-compact > .menu > .has-child > .menu { -webkit-transition: opacity 150ms linear, -webkit-transform 150ms linear; -o-transition: opacity 150ms linear, -o-transform 150ms linear; transition: opacity 150ms linear, -webkit-transform 150ms linear; transition: opacity 150ms linear, transform 150ms linear; transition: opacity 150ms linear, transform 150ms linear, -webkit-transform 150ms linear, -o-transform 150ms linear; } .stacked-menu-has-hoverable.stacked-menu-has-compact .has-child > .menu { -webkit-transform: scale(0.6); -ms-transform: scale(0.6); -o-transform: scale(0.6); transform: scale(0.6); } /* Behavior */ .stacked-menu-has-hoverable, .stacked-menu-has-compact { /** except level 1 .has-active */ } .stacked-menu-has-hoverable .has-child, .stacked-menu-has-compact .has-child { /** caret */ } .stacked-menu-has-hoverable .has-child.has-open:not(.has-active) > .menu, .stacked-menu-has-compact .has-child.has-open:not(.has-active) > .menu { -webkit-transform: scale(1); -ms-transform: scale(1); -o-transform: scale(1); position: absolute; top: 0; left: 100%; transform: scale(1); visibility: visible; opacity: 1; width: 200px; height: auto; } .stacked-menu-has-hoverable .has-child > .menu .menu-item > .menu .menu-link, .stacked-menu-has-hoverable .has-child > .menu .menu-item > .menu .menu .menu-link, .stacked-menu-has-compact .has-child > .menu .menu-item > .menu .menu-link, .stacked-menu-has-compact .has-child > .menu .menu-item > .menu .menu .menu-link { padding-left: 1rem; } .stacked-menu-has-hoverable .has-child > .menu-link:before, .stacked-menu-has-compact .has-child > .menu-link:before { -webkit-transform: translateY(-8px); -ms-transform: translateY(-8px); -o-transform: translateY(-8px); position: absolute; top: 50%; right: 0; transform: translateY(-8px); border-top: 8px solid transparent; /** the caret */ border-right: 8px solid #1b2126; border-bottom: 8px solid transparent; width: 0; height: 0; content: ''; } /** hoverable on compact mode */ .stacked-menu-has-hoverable.stacked-menu-has-compact { /** overwrite for all */ } .stacked-menu-has-hoverable.stacked-menu-has-compact .has-child.has-open > .menu { -webkit-transform: scale(1); -ms-transform: scale(1); -o-transform: scale(1); position: absolute; top: 0; left: 100%; transform: scale(1); visibility: visible; opacity: 1; border-radius: 0 0 0 0; width: 200px; height: auto; } .stacked-menu-has-hoverable.stacked-menu-has-compact .has-child.has-open > .menu .menu-item > .menu-link { padding-left: 1rem; } /** open menu to left direction */ /** Core */ .stacked-menu-has-left { /** compact */ } .stacked-menu-has-left > .menu > .menu-item.has-active > .menu-link { -webkit-box-shadow: inset -3px 0 0 #5d67ad; box-shadow: inset -3px 0 0 #5d67ad; } .stacked-menu-has-left.stacked-menu-has-compact > .menu > .menu-item > .menu-link > .badge { right: auto; left: 0.25rem; } .stacked-menu-has-left.stacked-menu-has-compact > .menu > .menu-item:not(.has-child) > .menu-link .menu-text { right: 100%; left: auto; border-radius: 0 0 0 0; padding: 0.5rem 0 0.5rem 0.75rem; } /** Behavior */ .stacked-menu-has-left { /** both hoverable & collapsible on compact mode */ } .stacked-menu-has-left.stacked-menu-has-hoverable .has-child > .menu { -webkit-transform-origin: 100% 0; -ms-transform-origin: 100% 0; -o-transform-origin: 100% 0; transform-origin: 100% 0; } .stacked-menu-has-left.stacked-menu-has-collapsible.stacked-menu-has-compact > .menu > .has-child > .menu { -webkit-transform-origin: 100% 0; -ms-transform-origin: 100% 0; -o-transform-origin: 100% 0; transform-origin: 100% 0; } .stacked-menu-has-left.stacked-menu-has-hoverable .has-child.has-open:not(.has-active) > .menu, .stacked-menu-has-left.stacked-menu-has-compact .has-child.has-open:not(.has-active) > .menu { right: 100%; left: auto; } .stacked-menu-has-left.stacked-menu-has-hoverable .has-child.has-open:not(.has-active) > .menu-link:before, .stacked-menu-has-left.stacked-menu-has-compact .has-child.has-open:not(.has-active) > .menu-link:before { right: auto; left: 0; border-right: 0 solid transparent; border-left: 8px solid #1b2126; } .stacked-menu-has-left.stacked-menu-has-hoverable.stacked-menu-has-compact .has-child.has-open > .menu, .stacked-menu-has-left.stacked-menu-has-collapsible.stacked-menu-has-compact .has-child.has-open > .menu { right: 100%; left: auto; } /*# sourceMappingURL=stacked-menu.css.map */