// Based on http://www.odoo.com/openerp_website/static/src/less/header.less // ======================================================================== // ============= MIXINS .o-top-menu-links() { &:not(.btn) { display: inline-block; padding: 0 20px; font-weight: @fw_semibold; text-transform: uppercase; @media screen and (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { font-size: 11px; &:not(.dropdown-toggle) { padding: 0 10px; } } } } .o-white-header() { background-color: @w-header-white; color: @header-link-normal; .deep-1(); .o_logo { background-position: 0 0; } > .o_main_header_main > .o_primary_nav > li.dropdown > a { &::before, &::after { background-color: @header-link-normal; box-shadow: 0 1px 1px fade(@header-link-normal,10%); } } } // ============= MAIN HEADER #oe_main_menu_navbar ~ #wrapwrap .o_main_header { &.o_has_sub_nav.o_scrolled { top: 34px - (@w-header-height + 1); } } .o_main_header { @secondary-menu-animation-duration-opening: 500ms; @secondary-menu-animation-duration-closing: @secondary-menu-animation-duration-opening * 2/3; position: fixed; width: 100%; height: @w-header-height; z-index: 2; background-color: fade(white, 60%); color: @header-link-normal; font-family: @headings-font-family; font-size: 12px; .transition(all .2s ease); .transition-property(~'background, box-shadow' ); .translate3d(auto, auto, 0); a:focus, a:active, a:focus:active { outline: none; } .btn-primary { color: white!important; font-size: inherit!important; font-weight: @fw_bold; text-transform: uppercase; } > .o_main_header_main { .container(); // FIXME Remove this once the web_editor "container container" rule is fixed. height: 100%; a { color: inherit; &:hover, &:focus { color: saturate(@header-link-normal, 10%); } } .o_logo { margin: 15px 0; .size(63px, 20px); background-size: cover; } > .o_primary_nav { @w-header-arrow-length: 10px; @media (min-width: @screen-sm-min) { height: 100%; &:before { content: ""; background: transparent; z-index: -1; visibility: hidden; box-shadow: 0 1px 0 transparent; .size( 100%, @w-header-height); .o-position-absolute(0,0); .transition(~'background @{secondary-menu-animation-duration-opening} @{o-ease} 0ms, visibility 0ms linear @{secondary-menu-animation-duration-opening}, box-shadow @{secondary-menu-animation-duration-opening} linear 0ms' ); } &.o_sub_opened:before { visibility: visible; background: @w-header-white; box-shadow: 0 1px 0 @gray-lighter; .transition(~'background @{secondary-menu-animation-duration-opening} @{o-ease} 0ms, visibility 0ms linear 0s, box-shadow @{secondary-menu-animation-duration-opening} linear 0ms'); } } margin: 0 auto; padding: 0; text-align: center; white-space: nowrap; .dropdown { position: static; > a { position: relative; .backface-visibility(hidden); &::before, &::after { content: ""; display: block; .o-position-absolute(50%, 0); .o-transform-origin(50%, 50%); .o-transition(all, 300ms); width: @w-header-arrow-length; height: 1px; background-color: @headings-color; box-shadow: 0 1px 1px fade(@headings-color, 10%); } &::before { .rotate(45deg); right: @w-header-arrow-length / sqrt(2) - 1; } &::after { .rotate(-45deg); } } &.open > a { color: @odoo-brand-primary!important; font-weight: @fw_semibold; &::before, &::after { background-color: @odoo-brand-primary!important; box-shadow: 0 1px 1px fade(@odoo-brand-primary, 10%); right: @w-header-arrow-length / sqrt(2) / 2; } &::before { .rotate(-45deg); } &::after { .rotate(45deg); } } > .dropdown-menu { border: none; border-radius: 0; margin: 0; } } > li { display: inline-block; > a { height: 100%; line-height: @w-header-height; .o-top-menu-links(); } &.dropdown > a { margin-right: @w-header-arrow-length * 2; } // Secondary nav animation @media (min-width: @screen-sm-min) { &.open > .o_secondary_nav { visibility: visible; background-color: white; .translate(0, 0); .transition(~'transform @{secondary-menu-animation-duration-opening} @{o-ease} 0ms, visibility 0ms linear 0ms, background-color 0ms linear @{secondary-menu-animation-duration-opening}'); .container > .row > div { opacity: 1; .translate(0, 0); &:nth-child(1) { .transition-delay(@secondary-menu-animation-duration-opening * 1/5); } &:nth-child(2) { .transition-delay(@secondary-menu-animation-duration-opening * 2/5); } &:nth-child(3) { .transition-delay(@secondary-menu-animation-duration-opening * 3/5); } &:nth-child(4) { .transition-delay(@secondary-menu-animation-duration-opening * 4/5); } } .o_store_link { max-height: @w-header-height; .o-transition(max-height, @secondary-menu-animation-duration-opening, @o-ease, @secondary-menu-animation-duration-opening * 3/5); } &::before { opacity: 0.5; } } } } .o_secondary_nav { @w-li-link-height: 30px; @w-li-link-animation-time: 300ms; @w-menu-gutter-increase: 60px; width: 100%; padding: 15px 0 (@w-header-height + 15); box-shadow: 0 3px 6px fade(black, 5%); @media (min-width: @screen-md-min) { // Change gutter width for that case > .container > .row { margin-left: (@grid-gutter-width + @w-menu-gutter-increase) / -2; margin-right: (@grid-gutter-width + @w-menu-gutter-increase) / -2; > div { padding-left: (@grid-gutter-width + @w-menu-gutter-increase) / 2; padding-right: (@grid-gutter-width + @w-menu-gutter-increase) / 2; } } } > .container > .row > div { font-size: 16px; overflow: hidden; @media (min-width: @screen-sm-min) { height: 340px; padding-top: 10px; + div { border-left: 1px solid @gray-lighter; } } ul { position: relative; list-style: none; padding: 0; > li { height: @w-li-link-height; .o-transition(all, @w-li-link-animation-time, @o-ease, @w-li-link-animation-time/3); .transition-property(~'height, opacity'); > a { display: block; height: 100%; line-height: @w-li-link-height; font-weight: @fw_medium; font-size: 1.4rem; } &.dropdown { &:not(.open) > a { &::before, &::after { .o-transform-origin((@w-header-arrow-length * 0.8), 50%); width: @w-header-arrow-length * 0.8; right: 0; } } > ul { .o-position-absolute(@w-li-link-height, 0, 0, 0); .translate(100%, 0); .opacity(0); .o-transition(all, @w-li-link-animation-time, @o-ease, 0); } &.open > ul { .translate(0, 0); .opacity(1); .o-transition(all, @w-li-link-animation-time, @o-ease, @w-li-link-animation-time/3); } } } &.o_sub_opened > li:not(.open) { opacity: 0; height: 0 !important; overflow: hidden; .o-transition(all, @w-li-link-animation-time, @o-ease, 0); } } .o_nav_app_family { text-align: center; font-weight: @fw_medium; line-height: 2; .o-no-select(); > span { .o-retina-bg("apps_families_s.png", 0px, 50%); display: none; } @media (min-width: @screen-sm-min) { > span { display: block; margin: 0 auto; background-size: auto 100%; width: 51px; height: 50px; } > div { font-size: 0.7em; font-weight: @fw_medium; line-height: 1.5; color: @text-color; margin-bottom: 1.3em; } } } @media (min-width: @screen-sm-min) { &.o_website_apps { a:hover, a:focus, .o_nav_app_family { color: @color-beta; } } &.o_sale_apps { a:hover, a:focus, .o_nav_app_family { color: @color-gamma; } .o_nav_app_family > span { background-position: -60px 50%; } } &.o_operation_apps { a:hover, a:focus, .o_nav_app_family { color: @color-delta; } .o_nav_app_family > span { background-position: -120px 50%; } } &.o_productivity_apps { a:hover, a:focus, .o_nav_app_family { color: @color-epsilon; } .o_nav_app_family > span { background-position: -181px 50%; } } } } > .o_store_link { .o-position-absolute(auto, 0, 0, 0); overflow: hidden; display: block; height: @w-header-height; line-height: @w-header-height; border-top: 1px solid @gray-lighter; text-align: center; font-size: 12px; font-weight: @fw_semibold; } @media (min-width: @screen-sm-min) { // Animation display: block; background-color: @w-header-white; visibility: hidden; z-index: -2; .translate(0, -115%); .transition(~'transform @{secondary-menu-animation-duration-closing} @{o-ease} 0ms, visibility 0ms linear @{secondary-menu-animation-duration-closing}, background-color 0ms linear 0ms'); .container > .row > div { opacity: 0; .translate(0, -30%); .o-transition(all, @secondary-menu-animation-duration-opening, @o-ease, 0ms); } .o_store_link { max-height: 0; .o-transition(max-height, @secondary-menu-animation-duration-opening/2, @o-ease, 0s); } // Overlay &::before { content: ""; .o-position-absolute(100%, 0, -1000px, 0); display: block; background-color: #000; opacity: 0; .o-transition(opacity, @secondary-menu-animation-duration-opening, @o-ease); } } } } .o_header_buttons { height: 100%; line-height: @w-header-height; float: right; > * { display: inline-block; float: left; } a { .o-top-menu-links(); &.dropdown-toggle { padding: 0 10px; } &.o_my_cart { padding: 0; .my_cart_quantity { font-family: sans-serif; border-radius: 100%; font-weight: bold; font-size: 90%; padding: 4px 0; min-width: 19px; text-align: center; display: inline-block; } } } .btn-primary { margin-top: 9px; } > .dropdown { margin: 0 5px; @media screen and (min-width: @screen-md-min) { margin: 0 15px; } &, .dropdown-toggle { height: 100%; } > .dropdown-menu { left: auto; right: 0; li a { padding-top: 5px; padding-bottom: 5px; color: @text-color; } } } } } > .o_sub_nav { min-height: @w-sub-nav-height; border: 1px solid fade(black, 5%); border-width: 1px 0; background-color: fade(white, 80%); > .container { .navbar-header { height: @w-sub-nav-height - 2; line-height: @w-sub-nav-height - 2; font-weight: @fw_semibold; color: @text-color; overflow: hidden; .o_app_name_logo, .o_app_name_title { .translate(-61px, 0); .o-transition(transform, 400ms); } &:hover { color: @headings-color; } .o_app_name_logo { .o_logo(); .o_logo_15(); vertical-align: middle; margin: auto 5px 3px 0; } .o_app_name_title { color: inherit; vertical-align: middle; display: inline-block; span{ margin-right: 5px; } } } .nav { margin-right: -15px; // gutter's right compensation } .nav > li { margin-left: 20px; height: @w-sub-nav-height - 2; line-height: @w-sub-nav-height - 2; > a { height: 100%; line-height: @w-sub-nav-height - 2; padding: 0; font-size: 12px; font-weight: @fw_medium; color: @text-color; &:hover, &:focus { color: @headings-color; background-color: transparent; } } &.active > a { color: @headings-color; font-weight: @fw_semibold; } } .call-to-action { line-height: @w-sub-nav-height - 4; overflow: hidden; width: 100%; max-width: 0px; transform-origin: 0 0; .transition(max-width 0.3s ease 0ms); > a { margin-left: 35px; font-weight: @fw_semibold; padding: (@padding-base-vertical - 2px) @padding-base-horizontal; line-height: 1.4em; font-size: 12px!important; } } } } &.o_inverted:not(.o_scrolled) > .o_sub_nav { .transition( 0.3s background-color); background-color: fade(white, 5%); border-color: fade(white, 10%); .nav > li > a, .o_app_name_title { color: fade(white, 90%); &:hover, &:focus { color: white; } } } @media (min-width: @screen-sm-min) { // Top menu styles // -------------------------------- &.o_has_sub_nav { position: absolute; &.o_scrolled { position: fixed; top: -(@w-header-height + 1); } } &.o_inverted { background-color: transparent; color: white; a:hover, a:focus { color: inherit; } .o_logo { .o_logo_inverse; } .o_main_header_main > .o_primary_nav > li.dropdown > a { &::before, &::after { background-color: white; box-shadow: 0 1px 1px fade(white, 10%); } } } > .o_main_header_main > .o_header_buttons { .dropdown.open { background-color: @w-header-white; color: @header-link-normal; .dropdown-menu { background-color: @w-header-white; margin-top: 0; border: none; border-radius: 0; .deep-1(); text-align: left; min-width: 100%; padding-bottom: @w-header-height/4; > li > a { display: block; color: @header-link-normal; float: none; text-transform: none; font-weight: normal; } } } } } &.o_scrolled:not(.o_transparent_blocked), &.o_sub_opened { .o-white-header(); } &.o_scrolled .o_sub_nav { background: @w-header-white; > .container { .navbar-header > span{ .translate(0, 0); } .call-to-action { max-width: 133px; } } } &.o_sub_opened .o_sub_nav { display: none; } } @media (max-width: @screen-xs-max) { .o_main_header { @mobile-dark: #25252D; @mobile-light: #33343D; position: relative; height: auto; min-height: @w-header-height; .o-white-header(); > .o_main_header_main { position: relative; > .o_primary_nav, .o_header_buttons { display: none; } > .o_mobile_menu_toggle { .o-position-absolute(0, 0); width: @w-header-height; line-height: @w-header-height; font-size: @w-header-height/3; text-align: center; } } > .o_sub_nav { display: none; } &.o_mobile_menu_opened { > .o_main_header_main { margin: 0; > .o_header_buttons { float: none; background-color: @mobile-dark; padding: 0 (@grid-gutter-width/2); box-sizing: content-box; margin: @w-header-height (-@grid-gutter-width/2) 0; display: block; text-align: center; .size(100%, auto); > * { overflow: visible!important; color: @w-header-white; float: none; display: inline; > a:not(.btn) { display: initial!important; } .dropdown-toggle { color: @w-header-white!important; } .dropdown-menu { position: relative; line-height: 2; background: fade(white, 5%); width: 100%; margin: 0 (-@grid-gutter-width/2) 0; box-sizing: content-box; padding: 5px (@grid-gutter-width/2); > li > a { float: none; display: block; margin-bottom: 5px; padding: 10px; color: @w-header-white!important; font-size: 0.8em; &:hover { background: fade(white, 5%); } } } } } > .o_primary_nav { display: block; background-color: @mobile-dark; color: white; margin: 0 (-@grid-gutter-width/2) 0; padding: 0; float: none; white-space: normal; a:hover, a:focus, a:active { color: white; } li { border: 0 solid @mobile-light; border-width: 1px 5px 0; } > li { width: 100%; padding: 0 @grid-gutter-width/2; &.dropdown { padding: 0; > a { display: none; } > .dropdown-menu { position: static; display: block; background-color: transparent; box-shadow: none; } > .o_secondary_nav { padding: 0; > .container > .row > div { padding: 0; ul { list-style-type: none; > li { height: @w-header-height; padding: 0 @grid-gutter-width/2; border-width: 1px 0 0; > a { line-height: @w-header-height; } &.dropdown.open { height: auto; border: none; > ul { position: static; } } } } > .o_nav_app_family { height: @w-header-height; line-height: @w-header-height; background-color: @mobile-light; > * { display: none; } &::after { content: "(Apps)"; } } } > .o_store_link { position: relative; border: 0 solid @mobile-light; border-width: 14px 0 0; padding-top: 14px; line-height: 1.5; height: 60px; } } &::after { content: ""; display: inline-block; width: 100%; height: 20px; margin-bottom: -5px; // FIXME don't know why background-color: @mobile-light; } } } } } } } }