/************************************* * MENU MODULE *************************************/ @mixin dropdown-menu-base { position: static; float: none; list-style: none; border-radius: 0; border:0; margin: 0; padding: 0; font-size: inherit; //mobile up breakpoint -> min-width:768px @include media-breakpoint-up( 'md' ) { position: absolute; display: none; top: 100%; @if ( true == $is_rtl ) { right: 0; } @else { left: 0; } z-index: 1000; min-width: 10rem; max-width: 50vw; } } .sek-nav-wrap { position: relative; display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; padding: .5rem 0; // https://github.com/presscustomizr/nimble-builder/issues/368 .sek-mobile-menu-expanded-below & { padding: 0; } } .sek-nav-collapse { flex-basis: 100%; flex-grow: 1; align-items: center; // justify-content property should be consistent with the default value in sek_get_module_params_for_czr_menu_content_child() // justify-content: flex-start; // -webkit-box-pack: start; // -ms-flex-pack: start; } .sek-nav { display: flex; flex-wrap: wrap; flex-direction: column; .sek-module .sek-module-inner & { &, & ul { list-style: none !important; padding: 0 !important; margin: 0 !important; } margin-right: -10px !important; margin-left: -10px !important; li { list-style: none; padding: 0; & > ul li { padding: 0; } } } li { font-size: 16px;// consistent with defaults a { line-height: 1.5em;// consistent with default registration params padding: .6em .8em; display: flex; align-items: center; justify-content: space-between; color: inherit; overflow:hidden; .sek-nav-wrap & { text-decoration: none; } &:hover { .sek-nav__title { text-decoration: underline; } } } &:not(:last-of-type) { border-bottom: 1px solid; //customizable border-color: rgba(49,49,49,.09); } } .menu-item-has-children, .page_item_has_children { position: relative; & > a::after { // Feb 2020 => replaced font awesome by a unicode character well supported // see https://github.com/presscustomizr/nimble-builder/issues/602 content: "\203A";//https://unicode-table.com/en/203A/ font-family: "Arial Unicode MS", Arial;//<= https://www.fileformat.info/info/unicode/char/203A/fontsupport.htm moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; display: none; font-style: normal; font-variant: normal; text-rendering: auto; font-weight: 900; transition: all 0.3s ease; transform-style: preserve-3d; backface-visibility: hidden; perspective: 1000px; padding: 0 .45em; font-size: 1em; position: relative; transform: translateZ(0) rotate(90deg); -ms-transform: rotate(90deg); } &.show > a::after { @if ( true == $is_rtl ) { transform: translateZ(0) rotate(90deg) !important; -ms-transform: rotate(90deg)!important; } @else { transform: translateZ(0) rotate(-90deg)!important; -ms-transform: rotate(-90deg)!important; } } } & .sub-menu, & .children { @include dropdown-menu-base(); } } // RULES FOR HORIZONTAL DESKTOP MENU //mobile up breakpoint -> min-width:768px @include media-breakpoint-up( 'md' ) { .sek-nav { flex-direction: row; .menu-item-has-children, .page_item_has_children { & > a::after { display:inline-block; } } & > li:not(:last-of-type) { border-bottom: none; } & > li > a { padding: 5px; } .sek-module .sek-module-inner & { li { margin: 0 5px; & > ul li { @if ( true == $is_rtl ) { padding: 0 .9rem 0 0; } @else { padding: 0 0 0 .9rem; } } } } } .sek-nav-collapse { display: flex!important;// <= !important because the php template sets this selector to display:none with inline style. This hack allows us to prevent a Content Layout Shift on page load flex-basis: auto; // justify-content property should be consistent with the default value in sek_get_module_params_for_czr_menu_content_child() justify-content: flex-end; -webkit-box-pack: end; -ms-flex-pack: end; } // https://github.com/presscustomizr/nimble-builder/issues/368 .sek-mobile-menu-expanded-below { display: none!important; } .sek-nav-toggler { display: none; } .sek-dropdown-menu { .sek-nav & li { padding: 0 10px !important; margin: 0 !important; a { padding: 10px 12px; } } // following two should be customizable... background: white; box-shadow: 1px 2px 2px 2px rgba(0,0,0,.15); ul { @if ( true == $is_rtl ) { right: 100%; } @else { left: 100%; } } .sek-menu-link__row-reverse { flex-direction: row-reverse !important; } .sek-nav__title { word-break: normal; white-space: nowrap; } .sek-dropdown-submenu & { top: 15px; } } @at-root .sek-submenu-fade .sek-dropdown-menu a { transition: all 0.25s ease; transform: translate(0, 0); &:hover { transform: translate(3px, 0); } } // submenu revealing fade effect // lets use a trick to make this not impact on the snake // basically we know that assigning a perspective to an element // plus position:relative creates a new system // where fixed elements behave like absolute elements relative to the parent // this way the actual visual position of the dropdown will not be impacted // though, as fixed element, even if overflowing the tc-page-wrap, will not // make the orizontal scrollbar appear! @at-root .sek-submenu-fade { .page_item_has_children, .menu-item-has-children { perspective: 1000px; > ul { position: fixed; opacity: 0; visibility: hidden; display: block; transition: all 0.25s ease-in-out; transform: translate( 0, -10px ); } &:not(.show) { //temporary fix for Firefox : https://github.com/presscustomizr/customizr/issues/1083 //the perspective thing seems to not work with this browser //need further investigation overflow: hidden; //because of the fact the submenu is displayed //it might still grab the the hover while fading out //let's avoid this resetting its pointer-events //when the li parent hasn't the show class ul { pointer-events: none; cursor: $cursor-disabled; } } } li.show { perspective: none; > ul { position: absolute; visibility: visible; opacity: 1; transform: translate( 0, 0); } } } // end fade effect .nb-collapsible-mobile-menu .nb-dd-mm-toggle-wrapper { display: none; } }//@include media-breakpoint-up( 'md' ) // ANIMATION : ROTATING ARROWS FOR SUBMENU PARENTS .sek-dropdown-submenu { & > a{ &::after { @if ( true == $is_rtl ) { transform: translateZ(0) rotate(0deg)!important; -ms-transform: rotate(0deg)!important; } @else { transform: translateZ(0) rotate(0deg)!important; -ms-transform: rotate(0deg)!important; } } //TODO: row reverse &[class*=-reverse]::after { top: .1em; @if ( true == $is_rtl ) { transform: translateZ(0) rotate(180deg)!important; -ms-transform: rotate(180deg)!important; } @else { transform: translateZ(0) rotate(-180deg)!important; -ms-transform: rotate(-180deg)!important; } } } } .sek-dropdown-menu { @include dropdown-menu-base(); .show > & { display: block; } .sek-nav .sek-nav__title { //the sidemenu and mobile menu should NOT break lines word-break: break-word;// was break-all; Fixed in dec-2017 @see https://github.com/presscustomizr/customizr/issues/1339 white-space: normal; } //SNAKE &.open-right { left: 0; right: auto; } @at-root &.open-right ul:not(.open-left), & ul.open-right { left: 100%; right: auto; top: 0; } &.open-left { left: auto; right: 0; } @at-root &.open-left ul:not(.open-right), & ul.open-left { right: 100%; left: auto; } // progressive background filling on hover not activated when releasing the menu module initial version, in v1.4.0 // li { // position: relative; // &::before { // content: ''; // position: absolute; // width: 0%; // height: 100%; // top: 0; // left: 0; // transition-delay: 0s; // transition-duration: .6s; // transition-timing-function: cubic-bezier(0.19, 1, 0.22, 1); // transform-origin: 0 100%; // background-color: rgba(0, 0, 0, 0.045); // } // &:hover::before { // width: 100%; // } // } } // Janv 2021 NEW COLLAPSIBLE MOBILE MENU // June 2020 for https://github.com/presscustomizr/nimble-builder/issues/721 // Note that [data-sek-is-mobile-vertical-menu] value is set on page load and dynamically on window resize nav.nb-collapsible-mobile-menu { [data-sek-mm-state="expanded"] { overflow: auto; max-height: 80vh; padding-bottom: 10px; //background: #ffffff; } li .sub-menu { li a { font-size: 0.88em; } li > a { padding: .6em 32px; } li li > a { padding: .6em 60px; } li li li > a { padding: .6em 80px; } li li li li > a { padding: .6em 100px; } } } nav.nb-collapsible-mobile-menu [data-sek-mm-state] { display: none } nav.nb-collapsible-mobile-menu [data-sek-mm-state="expanded"] { display: block; } nav.nb-collapsible-mobile-menu [data-sek-mm-state="expanded"], nav.nb-collapsible-mobile-menu [data-sek-mm-state="expanded"] li, nav.nb-collapsible-mobile-menu [data-sek-mm-state="expanded"] ul { background: #ffffff; } nav.nb-collapsible-mobile-menu [data-sek-mm-state="expanded"] .sub-menu, nav.nb-collapsible-mobile-menu [data-sek-mm-state="expanded"] li { position: relative; } [data-sek-is-mobile-vertical-menu="yes"] .sek-nav li a { min-height: 45px;//<= which is also the height if the toggle button when there are children items ( .nb-dd-mm-toggle ) -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; // Janv 2021 : default alignment of vertical mobile menu items // consistent with registration params // see in sek_get_module_params_for_czr_menu_content_child() justify-content: flex-start; -webkit-box-pack: start; -ms-flex-pack: start; } // nav.nb-collapsible-mobile-menu [data-sek-mm-state="expanded"] > li > a { // min-height: 43px; // } // Hide sub-menus for mobile vertical menu // show sub-menus when .expanded class is added [data-sek-is-mobile-vertical-menu="yes"] .sub-menu { display: none; } nav.nb-collapsible-mobile-menu [data-sek-mm-state="expanded"] .sub-menu { display: none; } nav.nb-collapsible-mobile-menu [data-sek-mm-state="expanded"] .sub-menu.expanded { display: block; } // MOBILE MENU ARROW TOGGLE WHEN THERE IS A SUBMENU /* * Mobile dropdown on click */ nav.nb-collapsible-mobile-menu [data-sek-mm-state="expanded"] .page_item_has_children > a, nav.nb-collapsible-mobile-menu [data-sek-mm-state="expanded"] .menu-item-has-children > a { // this padding gives the necessary space for the toggle arrow button padding-right: 60px; } .nb-dd-mm-toggle-wrapper { position: absolute; top: 1px; right: 0; text-align: center; line-height: 1; bottom: 1px; height: 45px; width: 60px; } .nb-collapsible-mobile-menu [data-sek-mm-state="expanded"] .nb-dd-mm-toggle-wrapper { display: block; } .nb-dd-mm-toggle { background: none!important; -webkit-appearance: none; outline: none; border: none; padding: 0; cursor: pointer; display: block; height: 45px; width: 60px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; overflow: hidden; } .nb-dd-mm-toggle i { display: block; -webkit-transition: all .3s ease; -o-transition: all .3s ease; transition: all .3s ease; -webkit-transform-style: preserve-3d; -moz-transform-style: preserve-3d; transform-style: preserve-3d; -webkit-backface-visibility: hidden; -moz-backface-visibility: hidden; backface-visibility: hidden; width: 100%; color:#000000; } li.expanded > .nb-dd-mm-toggle-wrapper .nb-arrow-for-mobile-menu { -webkit-transform: rotate(-180deg); -moz-transform: rotate(-180deg); transform: rotate(-180deg); } .nb-arrow-for-mobile-menu::after { content: "\25BE";//https://unicode-table.com/en/25BE/ font-family: "Arial Unicode MS", Arial;//<= https://www.fileformat.info/info/unicode/char/203A/fontsupport.htm moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; // display: none; font-style: normal; font-variant: normal; text-rendering: auto; font-weight: 900; transition: all 0.3s ease; transform-style: preserve-3d; backface-visibility: hidden; perspective: 1000px; padding: 0 .45em; font-size: 18px; line-height: 45px; position: relative; } // MOBILE : HAMBURGER BUTTON //Hueman inspired nav toggler .nb-loc .sek-module-inner nav .sek-nav-toggler { -webkit-appearance: none !important; cursor: pointer; &, &:hover, &:focus { //following 3 should be customizable background: 0 0; background-color: rgba(0, 0, 0, 0); color: black; outline: none; border: none; } height: 40px; width: 40px; padding: 0; vertical-align: middle; //align to the right (left when rtl) // @if ( true == $is_rtl ) { // margin-right: auto; // margin-left: -10px; // } // @else { // margin-left: auto; // margin-right: -10px; // } @at-root .sek-ham__span-wrapper { height: 12px; position: relative; display: block; .line { display: block; height: 1.5px; position: absolute; left: 10px; border-radius: 5px; background-clip: padding-box; transition: all ease .35s; backface-visibility: hidden; border-top: 1.5px solid; } .line-1 { top: 0; } .line-2 { top: 50%; } .line-3 { top: 100%; } @at-root .sek-nav-toggler { .line-1 { transform: translate(-3px, 6px) rotate(45deg); width: 28px; } .line-2 { opacity: 0; } .line-3 { transform: translate(-3px, -6px) rotate(-45deg); width: 28px; } } @at-root .sek-nav-toggler.sek-collapsed .line { width: 20px; transform: translate(0,0) rotate(0); opacity: 1; } @at-root .sek-nav-toggler.sek-collapsed.hovering .line { transform: translateX(-3px); width: 26px; } } } // PRO SEARCH ICON IN DESKTOP + SEARCH FIELD DESKTOP AND MOBILE // June 2020 search icon + form in menu module for https://github.com/presscustomizr/nimble-builder-pro/issues/12 .nb-module-menu-search { position: relative; } // Note that [data-sek-is-mobile-vertical-menu] value is set on page load and dynamically on window resize [data-sek-is-mobile-vertical-menu="yes"] .nb-module-menu-search { display: none; } .nb-svg-search-icon { cursor: pointer; padding: 0; } .nb-module-menu-search .nb-search-expand { display:none; background: #fff; position: absolute; z-index: 100; top: 49px; right: 0; left: 0; width: 340px; -webkit-box-shadow: 0 1px 0 rgba(255,255,255,.1); box-shadow: 0 1px 0 rgba(255,255,255,.1); } .nb-search-expand .nb-search-expand-inner { border: 1px solid #eee; box-shadow: 0 0 5px rgba(0,0,0,.2),0 1px 0 rgba(255,255,255,.15); transition: -webkit-transform .35s ease-in-out,height .25s ease-in-out,background-color .45s ease-in-out; transition: transform .35s ease-in-out,height .25s ease-in-out,background-color .45s ease-in-out; padding: 15px; // make sure NB cleans any icon printed ::after the label ( like in hueman theme for example ) [role=search].search-form label::after { content: none; } } [data-sek-module-type="czr_menu_module"] .nb-search-expand .nb-search-expand-inner [role=search].search-form { display: flex; float: none; } [data-sek-module-type="czr_menu_module"] .nb-search-expand .nb-search-expand-inner label input[type=search] { max-width: 100%; } [data-sek-module-type="czr_menu_module"] .nb-search-expand .nb-search-expand-inner input[type=submit], [data-sek-is-mobile-vertical-menu="yes"] .nb-mobile-search form input[type=submit] { margin: 0; background: #808080!important; color: #fff; font-size: 16px; padding: 10px 10px; font-weight: normal; display: inline-block; border: none; cursor: pointer; -webkit-border-radius: 3px; border-radius: 3px; } // Note that [data-sek-is-mobile-vertical-menu] value is set on page load and dynamically on window resize [data-sek-module-type="czr_menu_module"] .nb-search-expand .nb-search-expand-inner input[type=search], [data-sek-is-mobile-vertical-menu="yes"] .nb-mobile-search input[type=search], [data-sek-module-type="czr_menu_module"] .nb-search-expand .nb-search-expand-inner input[type=submit], [data-sek-is-mobile-vertical-menu="yes"] .nb-mobile-search form input[type=submit] { text-transform: none!important; } .nb-mobile-search { display: none; } // Note that [data-sek-is-mobile-vertical-menu] value is set on page load and dynamically on window resize [data-sek-is-mobile-vertical-menu="yes"] .nb-mobile-search { display: block; padding: 6px 14px 15px; } [data-sek-is-mobile-vertical-menu="yes"] .nb-mobile-search input { font-size: 16px; } .nb-search-expand-inner, .nb-mobile-search { input { &[type="search"] { color: #000000!important; } &[type="submit"] { color: #ffffff!important; } } }