/** * Roundcube Webmail styles for the Elastic skin * * Copyright (c) The Roundcube Dev Team * * The contents are subject to the Creative Commons Attribution-ShareAlike * License. It is allowed to copy, distribute, transmit and to adapt the work * by keeping credits to the original authors in the README.md file. * See http://creativecommons.org/licenses/by-sa/3.0/ for details. */ /*** Responsive design - Layout ***/ /* - Large screen (width > 1200px) ----------------------------------------------------------------------------------------------------- | menu | sidebar | list | content | ----------------------------------------------------------------------------------------------------- - Normal screen (1200px => width => 768px) - typical: 768x1024 (iPad Mini/Air) ------------------------------------------------------------------- |menu| sidebar/list | content | ------------------------------------------------------------------- - Small (480px < width < 768px) ------------------------------------------ |menu| sidebar/list/content | ------------------------------------------ - Phone (width <= 480px) - typical: 320x480 (iPhone 5), 375x667 (iPhone 6-7), 360x564 (Galaxy S6) ------------------------ | sidebar/list/content | ------------------------ */ html { height: 100%; font-size: @page-font-size; } body { min-width: @page-min-width; height: 100%; color: @color-font; overflow: hidden; html.iframe & { overflow: auto; } } #layout { overflow: hidden; display: flex; height: 100%; width: 100%; & > div { & > .scroller { flex: 1; position: relative; // for .listing-info positioning } & > .header, & > .footer { font-size: @layout-header-font-size; font-weight: bold; line-height: @layout-header-height; height: @layout-header-height; min-height: @layout-header-height; padding: 0 .25em; margin: 0; position: relative; // for absolute positioning of searchbar overflow: hidden; white-space: nowrap; display: flex; justify-content: center; } & > .header { border-bottom: 1px solid @color-layout-border; color: @color-layout-header; background-color: @color-layout-header-background; .header-title { .overflow-ellipsis(); flex: 1; text-align: center; margin: 0 -20rem; } a.button { color: @color-toolbar-button; } a.toolbar-list-button, a.toolbar-menu-button { order: 99; // always the last button } } & > .footer { border-top: 1px solid @color-layout-border; background-color: @color-layout-footer-background; & when not (@layout-footer-height = @layout-header-height) { height: @layout-footer-height; min-height: @layout-footer-height; line-height: @layout-footer-height; } &.small { height: @layout-footer-small-height; min-height: @layout-footer-small-height; line-height: @layout-footer-small-height; } &:empty { display: none; } } } } #layout-sidebar { position: relative; // e.g. for .column-resizer display: flex; flex-direction: column; flex: 2; max-width: 30%; min-width: 220px; border-right: 1px solid @color-layout-border; background-color: @color-layout-sidebar-background; &.sidebar-right { order: 2; border-right: 0; border-left: 1px solid @color-layout-border; // sidebar on right is unusual situation, probably there's no list in layout, // in such a case we can make it a little bit wider flex: 3; } } #layout-list { position: relative; // e.g. for .column-resizer display: flex; flex-direction: column; flex: 3; max-width: 30%; min-width: 300px; border-right: 1px solid @color-layout-border; background-color: @color-layout-list-background; } #layout-content { display: flex; flex: 6; flex-direction: column; background-color: @color-layout-content-background; width: 100%; html.iframe & { height: 100%; } & > .formcontent, // e.g. Help plugin & > .content { height: 100%; width: 100%; overflow: auto; flex: 1; } .iframe-wrapper { width: 100%; flex: 1; iframe { width: 100%; height: 100%; border: 0; } } &.only > .scroller { overflow: auto; } } #layout-menu { &.popover { left: 0 !important; } .popover-header { height: @layout-header-height; line-height: @layout-header-height; border: 0; border-radius: 0; text-align: center; img { max-height: @layout-header-height; max-width: @layout-menu-width; padding: .25rem; @media screen and (min-width: (@screen-width-xs + 1px)) and (max-width: @screen-width-medium) { max-width: @layout-menu-width * 0.45; } } @media screen and (min-width: (@screen-width-xs + 1px)) { padding: 0 !important; background-color: @color-taskmenu-background !important; a { display: none !important; } } html.layout-phone & { display: flex !important; align-items: center; justify-content: center; padding: 0 .5rem; img { max-width: @layout-mobile-menu-width - 50px; } a { width: auto; flex: 1; &:before { height: @layout-touch-header-height; float: right; } .inner { display: none; } } } } } .column-resizer { cursor: col-resize; z-index: 1; position: absolute; top: 0; right: -3px; width: 6px; height: 100%; &.inverted { right: auto; left: -3px; } &.active { width: 10000px; right: -5000px; &.inverted { right: auto; left: -5000px; } } } @media screen and (max-width: @screen-width-large) { #layout-sidebar, #layout-list { min-width: 260px; flex: 3; } #layout-list > .header > a.button { padding: 0 .25rem; margin: 0 .25rem; } } @media screen and (max-width: @screen-width-medium) { // Disable column resizing by hiding splitters and resetting columns width .column-resizer { display: none; } #layout-sidebar, #layout-list { width: auto !important; flex: 3 !important; } } @media screen and (max-width: @screen-width-small) { #layout-sidebar, #layout-list { max-width: none; border: 0 !important; } #layout > div > .header { background-color: @color-layout-mobile-header-background; a.button { // make the button active area smaller on touch devices margin: 0 .3rem !important; padding: 0 !important; &:before { font-size: 1.75rem; height: @layout-touch-header-height; margin: 0; } &.filter:before { font-size: 1.6rem; // this icon is too big in FA5 } .inner { display: none; } } } #layout > div > .footer { background-color: @color-layout-mobile-footer-background; } a.toolbar-list-button { display: none; } } @media screen and (max-width: @screen-width-xs) { } @media screen and (max-width: @screen-width-mini) { #layout-sidebar, #layout-list { min-width: @page-min-width; } } @media screen and (min-width: (@screen-width-xs + 1px)) { a.task-menu-button { display: none; } #layout-menu { // FIXME: we set background color here not in taskmenu.less, because // otherwise background is partially white on Android/iOS background-color: @color-taskmenu-background; width: @layout-menu-width-sm; } } @media screen and (min-width: (@screen-width-small + 1px)) { .floating-action-buttons, #layout-content > .header > .header-title, #layout > div > .header > .buttons, a.toolbar-menu-button { display: none; } } @media screen and (min-width: (@screen-width-medium + 1px)) { #layout-menu { width: @layout-menu-width; } } @media screen and (min-width: (@screen-width-large + 1px)) { #layout-list > .header > .header-title:not(.all-sizes), a.toolbar-list-button, a.back-list-button, a.back-sidebar-button { display: none; } } html.layout-phone { .hidden-phone { display: none !important; } } html.layout-phone, html.layout-small { .hidden-small { display: none !important; } } html.layout-small { .hidden-lbs { display: none !important; } } html.layout-large, html.layout-normal { .hidden-lbs, .hidden-big { display: none !important; } } html.layout-large { .hidden-large { display: none !important; } }