/*----------------------------------------*\ RESPONSIVE CSS \*----------------------------------------*/ /* CONTENTS A) BASIC MOBILE RESETS B) HEADER & TOP MENUS C) MAIN CONTENT & SIDEBAR D) TOGGLE BUTTON & FLYOUT MENU E) UX ELEMENTS F) PAGE SPECIFIC STYLES G) FORMS */ /* Hide new elements (toggle button and flyout menu) above 900px */ .mobile-toggle-button, .flyout-menu { display: none; } /* redmine's body is set to min-width: 900px add first breakpoint here and start adding responsiveness */ @media screen and (max-width: 899px) { /*----------------------------------------*\ A) BASIC MOBILE RESETS \*----------------------------------------*/ /* apply natural border box, see: http://www.paulirish.com/2012/box-sizing-border-box-ftw/ this helps us to better deal with percentages and padding / margin */ *, *:before, *:after { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } body, html { height: 100%; margin: 0; padding: 0; } html { overflow-y: auto; /* avoid 2nd scrollbar on desktop */ -webkit-text-size-adjust: 100%; /* prevent font scaling in landscape mode on webkit */ } body { min-width: 0; /* reset the min-width of 900px */ -webkit-overflow-scrolling: touch; } body, input, select, textarea, button { font-size: 14px; /* Set font-size for standard elements to 14px */ } select { max-width: 100%; /* prevent long names within select menues from breaking content */ } #wrapper { position: relative; overflow-x: hidden; /* hide horizontal overflow */ max-width: 100%; } #wrapper, #wrapper2 { margin: 0; } /*----------------------------------------*\ B) HEADER & TOP MENUS \*----------------------------------------*/ #header { width: 100%; height: 64px; /* the height of our header on mobile */ min-height: 0; margin: 0; padding: 0; border: none; background-color: #628db6; position: fixed; z-index: 9999; } /* Hide project name on mobile (project name is still visible in select menu) */ #header h1 { display: none !important; } /* reset #header a color for mobile toggle button */ #header a.mobile-toggle-button { color: #f8f8f8; } /* Hide top-menu and main-menu on mobile, because it's placed in our flyout menu */ #top-menu, #header #main-menu { display: none; } /* the quick search within header holding search form and #project_quick_jump_box box*/ #header #quick-search { float: none; clear: none; /* there are themes which set clear property, this resets it */ max-width: 100%; /* reset max-width */ margin: 0; background: inherit; } /* styles for combobox within quick-search (#project_quick_jump_box) */ #project-jump.drdn { position: absolute; top: 0px; left: 0; width: 100%; max-width: 100%; height: 2em; height: 64px; padding: 5px; padding-right: 72px; padding-left: 20px; } #project-jump .drdn-trigger { font-size:1.5em; font-weight:bold; display:block; width:100%; color:#fff; padding-left:24px; background:transparent; height:50px; line-height:40px; border:0; } #project-jump .drdn-trigger:before { /* set a font-size in order to achive same result in different themes */ font-family: Verdana, sans-serif; font-size: 1.5em; position: absolute; left: 0; padding: 0 8px; /* achieve dropdwon arrow by scaling a caret character */ content: '^'; -webkit-transform: scale(1,-.8); -ms-transform: scale(1,-.8); transform: scale(1,-.8); text-align: right; pointer-events: none; opacity: .6; } #project-jump.expanded .drdn-trigger:before { -webkit-transform: scale(1,.8); -ms-transform: scale(1,.8); transform: scale(1,.8); padding-top:8px; } #project-jump .drdn-content { position:absolute; left:0px; top:64px; width:100%; font-size:15px; font-weight:normal; } #project-jump .drdn-content .autocomplete { height:40px; font-size:20px; } #project-jump .drdn-content a { padding:8px; } #header #quick-search form { display: none; } /*----------------------------------------*\ C) MAIN CONTENT & SIDEBAR \*----------------------------------------*/ #main { padding: 64px 0 0; /* padding-top equals header height */ } #main.nosidebar #content, div#content { width: 100%; min-height: 0; /* reset min-height of #content */ margin: 0; } /* hide sidebar and sidebar switch panel, since it's placed in mobile flyout menu */ #sidebar, #sidebar-switch-panel { display: none; } .splitcontentleft, .splitcontentright, .splitcontenttop { width: 100%; flex: auto; margin-right: 0; margin-left: 0; } /*----------------------------------------*\ D) TOGGLE BUTTON & FLYOUT MENU \*----------------------------------------*/ .mobile-toggle-button { font-size: 42px; line-height: 64px; position: relative; z-index: 10; display: block; /* remove display: none; of non-mobile version */ float: right; width: 60px; height: 64px; margin-top: 0; text-align: center; border-left: 1px solid #ddd; } .mobile-toggle-button:hover, .mobile-toggle-button:active { text-decoration: none; } .mobile-toggle-button:after { font-family: Verdana, sans-serif; display: block; margin-top: -3px; content: '\2261'; } /* search magnifier icon */ .search-magnifier { font-family: Verdana, sans-serif; color: #bbb; cursor: pointer; -webkit-transform: rotate(-45deg); -moz-transform: rotate(45deg); -o-transform: rotate(45deg); } .search-magnifier--flyout { font-size: 25px; line-height: 54px; position: absolute; z-index: 1; left: 12px; } /* Flyout Menu */ .flyout-menu { position: absolute; right: -250px; display: block; /* remove display: none; of non-mobile version */ overflow-x: hidden; width: 250px; height: 100%; margin: 0; /* reset margin for themes that define it */ padding: 0; /* reset padding for themes that define it */ color: white; background-color: #3e5b76; } /* avoid zoom on search input focus for ios devices */ .flyout-menu input[type='text'] { font-size: 16px; } .flyout-menu h3 { font-size: 11px; line-height: 19px; height: 20px; margin: 0; padding: 0; letter-spacing: .1em; text-transform: uppercase; color: white; border-top: 1px solid #506a83; border-bottom: 1px solid #506a83; background-color: #628db6; } .flyout-menu h4 { color: white; } .flyout-menu h3, .flyout-menu h4, .flyout-menu > p, .flyout-menu > a, .flyout-menu ul li a, .flyout-menu__search, .flyout-menu__sidebar > div, .flyout-menu__sidebar > p, .flyout-menu__sidebar > a, .flyout-menu__sidebar > form, .flyout-menu > div, .flyout-menu > form { padding-left: 8px; } .flyout-menu .flyout-menu__avatar { margin-top: -1px; /* move avatar up 1px */ padding-left: 0; } .flyout-menu__sidebar > form { display: block; } .flyout-menu__sidebar > form h3 { margin-left: -8px; } .flyout-menu__sidebar > form label { display: inline-block; margin: 8px 0; } .flyout-menu__sidebar > form br br { display: none; } /* Targets list containing checkboxes (e.g. activities sidebar) in flyout menu */ .flyout-menu__sidebar form > ul { margin-left: -8px; padding-left: 0; } .flyout-menu__sidebar form > ul li { line-height: 39px; display: block; padding-left: 8px; border-top: 1px solid rgba(255,255,255,.1); } .flyout-menu__sidebar form > ul li:first-child { border-top: none; } .flyout-menu__sidebar form > ul li label { margin: 0; } .flyout-menu__sidebar form > ul li label a { line-height: 1; display: inline; padding-left: 0; border: none; } .flyout-menu ul { margin: 0; padding: 0; list-style: none; } .flyout-menu #watchers { display: -webkit-flex; display: -ms-flexbox; display: -webkit-box; display: flex; flex-direction: column; -webkit-flex-direction: column; -ms-flex-direction: column; -webkit-box-orient: vertical; -webkit-box-direction: normal; } .flyout-menu #watchers .contextual { -webkit-box-ordinal-group: 4; -webkit-order: 3; -ms-flex-order: 3; order: 3; } .flyout-menu #watchers h3 { margin-left: -8px; } .flyout-menu #watchers ul li { display: -webkit-flex; display: -ms-flexbox; display: -webkit-box; display: flex; flex-direction: row; -webkit-flex-direction: row; -ms-flex-direction: row; -webkit-box-orient: horizontal; -webkit-box-direction: normal; -webkit-align-items: center; -ms-flex-align: center; -webkit-box-align: center; align-items: center; } .flyout-menu ul li a { line-height: 40px; display: block; overflow: hidden; height: 40px; white-space: nowrap; text-overflow: ellipsis; border-top: 1px solid rgba(255,255,255,.1); } .flyout-menu ul li:first-child a { line-height: 39px; height: 39px; border-top: none; } .flyout-menu a { color: white; } .flyout-menu ul li a:hover { text-decoration: none; } .flyout-menu ul li a.new-object, .new-object ~ .menu-children { display: none; } /* Left flyout search container */ .flyout-menu__search { line-height: 54px; height: 64px; padding-top: 3px; padding-right: 8px; } .flyout-menu__search input[type='text'] { line-height: 2; width: 100%; height: 38px; padding-left: 27px; vertical-align: middle; border: none; -webkit-border-radius: 3px; border-radius: 3px; background-color: #fff; } .flyout-menu__avatar { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; width: 100%; border-top: 1px solid rgba(255,255,255,.1); } .flyout-menu__avatar img.gravatar { width: 40px; height: 40px; padding: 0; vertical-align: top; border-width: 0; } .flyout-menu__avatar a { line-height: 40px; height: auto; height: 40px; text-decoration: none; color: white; } /* avatar */ .flyout-menu__avatar a:first-child { line-height: 0; width: 40px; padding: 0; } .flyout-menu__avatar .user { padding-left: 15px; padding-right: 15px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; -webkit-flex-grow: 1; -ms-flex-grow: 1; flex-grow: 1; } /* user link when no avatar is present */ .flyout-menu__avatar--no-avatar a.user { line-height: 40px; padding-left: 8px; } .flyout-is-active body { overflow: hidden; /* for body not to have scrollbars when left flyout menu is active */ } html.flyout-is-active { overflow: hidden; } .flyout-is-active #wrapper, .flyout-is-active #header { right: 250px; /* when left flyout is active, move body and header to the right (same amount like flyout-menu's width) */ } .flyout-is-active #wrapper { overflow: visible; height: 100%; } .flyout-is-active .mobile-toggle-button:after { content: '\00D7'; /* close glyph */ } .flyout-is-active #wrapper2 { /* * only relevant for devices with cursor when flyout it active, in order to show, * that whole wrapper content is clickable and closes flyout menu */ cursor: pointer; } #admin-menu { padding-left: 0; } #admin-menu li { padding-bottom: 0; } #admin-menu a, #admin-menu a.selected { line-height: 40px; padding: 0; padding-left: 32px !important; background-position: 8px 50%; } /*----------------------------------------*\ E) UX ELEMENTS \*----------------------------------------*/ .mobile-hide {display:none;} .mobile-show {display:initial;} /* Contextual Buttons */ #content>.contextual { width: 100%; margin-bottom: .5em; padding-left: 0; /* reset left padding in order to use whole space */ white-space: normal; } #content>.contextual>a, #content>.contextual .drdn, p.buttons a { font-weight: bold; display: inline-block; margin: 5px 0; margin-right: 2px; padding: 9px 9px 9px 9px; border: 1px solid #ddd; -webkit-border-radius: 3px; border-radius: 3px; } #content>.contextual .drdn-content { right:initial; left:0px; top:40px; } #content>.contextual .drdn .drdn-content a { padding-top: 9px; padding-bottom: 9px; } #content>.contextual a.icon, p.buttons a.icon { background-position-x: 4px; padding-left: 25px; } .flyout-menu .contextual { float: none; } /* loading indicator */ #ajax-indicator { width: 60%; left: 20%; } /* jquery ui dialogs */ .ui-dialog { max-width: 98%; margin: 1%; } .ui-dialog .ui-dialog-content { padding-left: 0; padding-right: 0; } #filters-table {width:100%; float:none;} .add-filter {width:100%; float:none; text-align: left; margin-top: 8px;} /*----------------------------------------*\ F) PAGE SPECIFIC STYLES \*----------------------------------------*/ /* page /login */ #login-form table { width: 100%; } #login-form input#username, #login-form input#password, #login-form input#openid_url { width: 100%; height: auto; } /* some themes add a margin to login page, remove it on mobile */ .action-login #main { margin: 0; } div#activity dl, #search-results {margin-left: 0;} .version-overview table.progress {width:75%;} div#version-summary {float:none; width:100%; margin-left:0;} body.controller-versions.action-show div#roadmap .related-issues {width:100%;} /* History and Changeset */ div#issue-changesets { float: none; width: auto; margin-left: 0; padding-left: 0; margin-bottom: 2em; } div#issue-changesets div.changeset { padding-top: 1em; } /* Gantt charts */ /* * [1] override inline styles with important * [2] keep border between subjects and gantt area * [3] remove whitespace between subjects and gantt area * [4] maintain width due to [3] */ .gantt_subjects_column { width: 60% !important; /* [1] */ } .gantt_subjects_container { width: 100% !important; overflow: hidden; } .gantt_subjects_column .gantt_hdr { width: 100% !important; right: 0 !important; /* [2] */ border-right: solid 1px #c0c0c0; } #gantt_area { left: -2px; /* [3] */ margin-right: -2px; /* [4] */ } /*----------------------------------------*\ G) FORMS \*----------------------------------------*/ input, select, textarea { max-width: 100%; } /* tabular forms resets for mobile */ .tabular p, .tabular.settings p { padding-left: 0; } .tabular label, .tabular.settings label { display: block; width: 100%; margin-left: 0; text-align: left; } .tabular input, .tabular select, .tabular textarea { width: 100%; max-width: 100%; } .tabular input[type="checkbox"], .tabular input.date { width: auto; max-width: 95%; } /* new issue form */ #all_attributes p:first-child { float: none !important; } #all_attributes #issue_tracker_id { width: 90%; } #issue_is_private_label { display: inline; } span#watchers_inputs { width: 100%; } /* issue edit form */ label[for='issue_description'] ~ a .icon-edit { word-wrap: normal; } /* issues page */ body.controller-issues p.query-totals { margin-top: 0px; text-align: left; } /* subtasks and related issues list on issue show */ #issue_tree .issues, #relations .issues { border-collapse: separate; border-spacing: 0 1em; /* vertical space between tasks */ } #issue_tree .issue > td:not(.checkbox), #relations .issue > td:not(.checkbox) { display: block; float: left; text-align: left; padding-right: 5px; } #issue_tree .issue > td, #relations .issue > td, #issue_tree .issue .user { text-overflow: ellipsis; /* if text exceeds its space, add ... */ overflow: hidden; } #issue_tree .issue > td.subject, #relations .issue > td.subject { width: 100%; /* let subject have one full width column */ word-break: break-word; /* break word if subject is too long */ padding-right: 25px; /* this is the spaces that .buttons uses next to subject */ } #issue_tree .issue > td:not(.subject), #relations .issue > td:not(.subject) { width: 20%; /* three columns for all cells that are not subject */ } #issue_tree .issues, #issue_tree .issue, #relations .issues, #relations .issue { position: relative; /* needed for .buttons positioning */ } /* positioniong of unline button */ #issue_tree .issue > td.buttons, #relations .issue > td.buttons { text-align: right; position: absolute; right: 0; margin: 0; padding-right: 0; } #issue_tree .issue .buttons a, #relations .issue .buttons a { vertical-align: middle; } /* attachment upload form */ .attachments_fields span { position: relative; clear: both; margin-bottom: 1em; white-space: normal; } .attachments_fields span a.remove-upload { position: absolute; top: 0; right: 0; } .attachments_fields input.description { margin-left: 0; width: 100%; } } @media all and (max-width: 599px) { span.pagination {text-align:center;} .pagination ul.pages li {display:none;} .pagination ul.pages li.current, .pagination ul.pages li.previous, .pagination ul.pages li.next {display:inline-block; width:32%; overflow:hidden;} #login-form {width:100%; margin-top:2em;} }