diff options
Diffstat (limited to 'devtools/client/responsive/index.css')
-rw-r--r-- | devtools/client/responsive/index.css | 756 |
1 files changed, 756 insertions, 0 deletions
diff --git a/devtools/client/responsive/index.css b/devtools/client/responsive/index.css new file mode 100644 index 0000000000..35262e5583 --- /dev/null +++ b/devtools/client/responsive/index.css @@ -0,0 +1,756 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* TODO: May break up into component local CSS. Pending future discussions by + * React component group on how to best handle CSS. */ + +/** + * CSS Variables specific to the responsive design mode + */ + +:root { + --toolbar-row-height: 28px; + --rdm-box-shadow: 0 4px 4px 0 rgba(155, 155, 155, 0.26); + --viewport-active-color: #3b3b3b; + --input-invalid-border-color: var(--red-60); + --custom-device-button-hover: var(--grey-30); + --device-list-grid-template-columns: auto auto max-content 1fr; +} + +:root.theme-dark { + --rdm-box-shadow: 0 4px 4px 0 rgba(105, 105, 105, 0.26); + --viewport-active-color: #fcfcfc; + --input-invalid-border-color: var(--red-50); + --custom-device-button-hover: var(--grey-70); +} + +* { + box-sizing: border-box; +} + +:root, +input, +button { + font-size: 12px; +} + +input, +button { + color: var(--theme-toolbar-color); + background-color: var(--theme-tab-toolbar-background); +} + +html, +body, +#root { + height: 100%; + overflow: hidden; + color: var(--theme-body-color); +} + +input:-moz-focusring { + outline: none; +} + +.text-input { + border: 1px solid var(--theme-splitter-color); + margin: 0 1px; + padding: 2px; + font-size: 12px; + line-height: 16px; +} + +.text-input:focus { + outline: none; + border-color: var(--theme-selection-background); + transition: all 0.2s ease-in-out; +} + +.text-input.invalid { + border-color: var(--input-invalid-border-color); +} + +#app { + display: flex; + flex-direction: column; + width: 100%; + height: 100%; +} + +/** + * Common styles for shared components + */ + +.devtools-separator { + height: 100%; + margin: 0 1px; +} + +/** + * Toolbar + */ + +#toolbar { + background-color: var(--theme-tab-toolbar-background); + border-bottom: 1px solid var(--theme-splitter-color); + display: grid; + grid-template-columns: auto min-content; + width: 100%; + user-select: none; +} + +#toolbar-center-controls, +#toolbar-end-controls { + display: grid; + grid-auto-flow: column; + grid-auto-rows: var(--toolbar-row-height); + grid-row-gap: 1px; + padding: 0 1px; +} + +#toolbar-center-controls { + grid-gap: 2px; + grid-template-columns: + [device-selector] + minmax(auto, 120px) + [separator] + max-content + [size-selector] + max-content + [rotate-icon] + max-content + [separator] + max-content + [dpr] + minmax(auto, 60px) + [separator] + max-content + [throttling] + minmax(auto, max-content) + [separator] + max-content + [touch-simulation] + max-content; +} + +#toolbar.user-agent #toolbar-center-controls { + grid-template-columns: + [device-selector] + minmax(auto, 120px) + [separator] + max-content + [size-selector] + max-content + [rotate-icon] + max-content + [separator] + max-content + [dpr] + minmax(auto, 60px) + [separator] + max-content + [throttling] + minmax(auto, max-content) + [separator] + max-content + [ua] + minmax(auto, 300px) + [separator] + max-content + [touch-simulation] + max-content; +} + +#toolbar:not(.left-aligned) { + grid-template-columns: 1fr auto 1fr min-content; + justify-content: center; +} + +#toolbar:not(.left-aligned) #toolbar-center-controls { + grid-column-start: 2; +} + +#toolbar:not(.left-aligned) #toolbar-end-controls { + justify-content: end; +} + +#user-agent-label { + display: flex; + align-items: center; + margin-inline-start: 3px; + margin-inline-end: 3px; +} + +#user-agent-input { + margin-inline-start: 3px; + flex: 1; +} + +@media (max-width: 520px) { + /* When room becomes scarce, no need to constrain the selectors with a minmax like we + do in larger viewports, here they can occupy 1fr */ + #toolbar.user-agent #toolbar-center-controls { + grid-template-columns: + [device-selector] + .8fr + [separator] + max-content + [size-selector] + max-content + [rotate-icon] + max-content + [separator] + max-content + [dpr] + .6fr + [separator] + max-content + [throttling] + 1fr + [separator] + max-content + [touch-simulation] + max-content; + } + + /* Drop the user agent label to the next line if there isn't enough space */ + #user-agent-label { + grid-column: 1 / -1; + grid-row: 2; + margin-inline-start: 9px; + } + + /* Since the UA is hidden, no need for a separator after it */ + #user-agent-label + .devtools-separator { + display: none; + } + + /* When the UA label is here and it's on a second line, draw a separator between the + 2 lines*/ + #toolbar.user-agent { + background-image: linear-gradient(to bottom, + transparent var(--toolbar-row-height), + var(--theme-splitter-color) var(--toolbar-row-height), + var(--theme-splitter-color) calc(var(--toolbar-row-height) + 1px), + transparent 0); + } +} + +#rotate-button::before { + background-image: url("chrome://devtools/content/responsive/images/rotate-viewport.svg"); +} + +#rotate-button.viewport-orientation-landscape::before { + transform: rotate(90deg) scaleX(-1); +} + +#touch-simulation-button::before { + background-image: url("chrome://devtools/content/responsive/images/touch-events.svg"); +} + +#screenshot-button::before { + background-image: url("chrome://devtools/skin/images/command-screenshot.svg"); +} + +#settings-button::before { + background-image: url("chrome://devtools/skin/images/settings.svg"); +} + +#exit-button::before { + background-image: url("chrome://devtools/skin/images/close.svg"); +} + +/* Briefly animate screenshot button when clicked */ +#screenshot-button:disabled { + opacity: 1 !important; +} + +#screenshot-button:disabled::before { + fill: var(--theme-icon-checked-color); +} + +#device-selector { + justify-self: end; + max-width: 100%; + margin-inline-start: 4px; +} + +#device-selector .title { + display: grid; + grid-template-columns: var(--device-list-grid-template-columns); +} + +#device-selector .title .device-name, +#device-selector .title .device-os { + margin-inline-start: 6px; +} + +#device-selector::before { + fill: var(--theme-icon-dimmed-color); +} + +/* Override the style defined in tooltips.css */ +.tooltip-container[type="doorhanger"] .menuitem > .command.iconic.device-selector-item > .label::before { + fill: var(--theme-icon-dimmed-color); +} + +/** + * Viewport Dimension Input + */ + +.viewport-dimension { + display: flex; + align-items: center; + margin: 1px; +} + +.viewport-dimension-input { + text-align: center; + width: 3em; + appearance: textfield; +} + +.viewport-dimension-separator { + user-select: none; + padding: 0 0.2em; +} + +/** + * Device Modal + */ + +@keyframes fade-in-and-up { + 0% { + opacity: 0; + transform: translateY(5px); + } + 100% { + opacity: 1; + transform: translateY(0px); + } +} + +@keyframes fade-down-and-out { + 0% { + opacity: 1; + transform: translateY(0px); + } + 100% { + opacity: 0; + transform: translateY(5px); + visibility: hidden; + } +} + +.device-modal { + display: grid; + grid-template-rows: minmax(80px, auto) auto; + background-color: var(--theme-toolbar-background); + border: 1px solid var(--theme-splitter-color); + border-radius: 2px; + box-shadow: var(--rdm-box-shadow); + position: absolute; + margin: auto; + top: 0; + bottom: 0; + left: 0; + right: 0; + width: 90%; + height: 90%; + max-width: 750px; + max-height: 730px; + z-index: 1; + overflow: hidden; +} + +/* Handles the opening/closing of the modal */ +#device-modal-wrapper.opened .device-modal { + animation: fade-in-and-up 0.3s ease forwards; +} + +#device-modal-wrapper.closed .device-modal { + animation: fade-down-and-out 0.3s ease forwards; +} + +#device-modal-wrapper.opened .modal-overlay { + background-color: var(--theme-splitter-color); + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: 0; + opacity: 0.5; +} + +.device-modal-content { + display: grid; + grid-row-gap: 30px; + overflow: auto; + height: 100%; + padding: 10px 32px 50px 32px; +} + +/* On screens that are >750px*/ +@media (min-width: 750px) { + #device-form { + grid-template-areas: "name size dpr" + "user-agent touch buttons"; + } + + #device-form-name input, + #device-form-user-agent input { + width: 350px; + } + + .device-modal-content { + grid-template-columns: 1fr 1fr; + grid-template-areas: "phone phone" + "tablet laptop" + "tv custom"; + } + + .device-type-phones .device-list { + grid-template-columns: repeat(2, var(--device-list-grid-template-columns)); + } +} + +/* On screens that are between 450px and 749px */ +@media (min-width: 450px) and (max-width: 749px) { + #device-form { + grid-template-areas: "name size" + "user-agent dpr" + "touch buttons"; + grid-template-columns: 2fr 1fr; + } + + #device-form-name { + grid-area: name; + } + + #device-form-name input, + #device-form-user-agent input { + width: 100%; + } +} + +/* On screens that are <450px */ +@media (max-width: 449px) { + #device-form { + grid-template-areas: "name" + "size" + "dpr" + "user-agent" + "touch" + "buttons"; + } + + #device-form-name input, + #device-form-user-agent input { + width: 90%; + } + + #device-form-size { + justify-self: unset; + } +} + +@media (max-width: 749px) { + .device-modal-content { + grid-template-areas: "phone" + "phone" + "tablet" + "laptop" + "tv" + "custom"; + } + + .device-modal-header { + flex-direction: column; + } +} + +#device-close-button { + position: absolute; + top: 5px; + right: 2px; +} + +#device-close-button::before { + background-image: url("chrome://devtools/skin/images/close.svg"); +} + +.device-type { + display: flex; + flex-direction: column; +} + +.device-header { + font-size: 17px; + margin-bottom: 7px; + height: 20px; + text-transform: capitalize; +} + +.device-label { + color: var(--theme-body-color); + padding-bottom: 5px; + padding-top: 5px; + align-items: center; + display: grid; + grid-column: span 4; + grid-template-columns: subgrid; +} + +.device-label > button { + visibility: hidden; +} + +.device-label > span { + margin-right: 6px; +} + +.device-label:focus-within > button, +.device-label:hover > button { + visibility: visible; +} + +.device-label:focus-within, +.device-label:hover { + background-color: var(--toolbarbutton-hover-background); +} + +.device-modal-header { + display: flex; + justify-content: space-between; +} + +.device-modal-header > #device-add-button { + margin: 30px 75px 0 30px; +} + +.device-list { + display: grid; + font-size: 13px; + grid-template-columns: var(--device-list-grid-template-columns); +} + +.device-input-checkbox { + margin-right: 8px; +} + +.device-modal-title { + font-size: 22px; + margin: 30px 0 0px 30px; +} + +.device-browser { + width: 16px; + height: 16px; + background-size: cover; + -moz-context-properties: fill; + fill: var(--theme-icon-dimmed-color); +} + +.device-browser.chrome { + background-image: url("chrome://devtools/skin/images/browsers/chrome.svg"); +} + +.device-browser.edge { + background-image: url("chrome://devtools/skin/images/browsers/edge.svg"); +} + +.device-browser.firefox { + background-image: url("chrome://devtools/skin/images/browsers/firefox.svg"); +} + +.device-browser.ie { + background-image: url("chrome://devtools/skin/images/browsers/ie.svg"); +} + +.device-browser.opera { + background-image: url("chrome://devtools/skin/images/browsers/opera.svg"); +} + +.device-browser.safari { + background-image: url("chrome://devtools/skin/images/browsers/safari.svg"); +} + +.device-remove-button:empty::before { + background-image: url("chrome://devtools/skin/images/close.svg"); +} + +/** + * Device Form + */ + +#device-form { + display: grid; + width: 100%; + background-color: var(--theme-toolbar-background); + min-height: 150px; + padding: 15px 20px 10px; + border-bottom: 1px solid var(--theme-splitter-color); + overflow: auto; + z-index: 1; +} + +#device-add-button, +#device-form button { + background-color: rgba(12, 12, 13, 0.1); + border: 1px solid var(--theme-splitter-color); + border-radius: 2px; + cursor: pointer; + width: 167px; + height: 32px; +} + +#device-edit-button::before { + background: url("chrome://devtools/skin/images/pencil-icon.svg") no-repeat 0 0; +} + +#device-edit-button, +#device-edit-remove { + cursor: pointer; +} + +#device-edit-button:focus-within, +#device-edit-button:hover, +#device-edit-remove.device-remove-button:focus-within, +#device-edit-remove.device-remove-button:hover { + background-color: var(--custom-device-button-hover); +} + +#device-form label { + display: flex; + flex-direction: column; + margin: 5px; +} + +#device-form label > .viewport-dimension { + color: var(--theme-body-color); + display: flex; + align-items: center; +} + +#device-form input { + background: transparent; + border: 1px solid var(--theme-toolbarbutton-active-background); + border-radius: 2px; + text-align: center; + color: var(--theme-body-color); + transition: all 0.25s ease; +} + +#device-form #device-form-name input, +#device-form #device-form-user-agent input { + text-align: left; + padding-left: 12px; + padding-right: 12px; +} + +#device-form input:focus { + color: var(--viewport-active-color); + border-color: var(--blue-55); +} + +#device-form label > input:focus, +#device-form label > .viewport-dimension:focus { + outline: none; +} + +#device-form-pixel-ratio { + grid-area: dpr; +} + +#device-form-pixel-ratio input { + appearance: textfield; +} + +#device-form-user-agent { + grid-area: user-agent; +} + +#device-form-name input, +#device-form-pixel-ratio input, +#device-form-user-agent input, +#device-form-size input { + height: 35px; +} + +#device-form #device-form-touch { + flex-direction: row; + grid-area: touch; +} + +#device-form-touch .device-form-label { + align-self: center; + margin-left: 5px; +} + +#device-form #device-form-save { + background-color: #0060DF; + color: #fff; + border: 1px solid #0060DF; + width: 60px; +} + +#device-form-size { + grid-area: size; +} + +#device-form-size input, +#device-form #device-form-cancel { + width: 60px; +} + +#device-form-save, +#device-form-cancel { + align-self: center; +} + +.device-form-buttons { + display: flex; + grid-area: buttons; + justify-content: space-evenly; + width: 154px; +} + +.device-form-label { + display: inline-block; + margin: 0 5px 5px 0; + min-width: 35px; + font-size: 13px; +} + +/* Device Types */ + +.device-type-phones { + grid-area: phone; +} + +.device-type-custom { + grid-area: custom; + align-self: start; +} + +.device-type-custom .device-list { + grid-template-columns: var(--device-list-grid-template-columns) auto auto; +} + +.device-type-custom .device-label { + grid-column: span 6; +} + +.device-type-tablets { + grid-area: tablet; +} + +.device-type-laptops { + grid-area: laptop; +} + +.device-type-televisions { + grid-area: tv; +} |