diff --git a/app/styles/base.css b/app/styles/base.css index df0daf0d..408da277 100644 --- a/app/styles/base.css +++ b/app/styles/base.css @@ -389,31 +389,25 @@ html { vertical-align: middle; border:1px solid rgba(255, 255, 255, 0.2); border-radius: 6px; - background: transparent; + background-image: unset; /* we don't want the gradiant from input.css */ } #noVNC_control_bar .noVNC_button.noVNC_selected { border-color: rgba(0, 0, 0, 0.8); - background: rgba(0, 0, 0, 0.5); + background-color: rgba(0, 0, 0, 0.5); } -#noVNC_control_bar .noVNC_button:disabled { - opacity: 0.4; - /* See firefox bug regarding cursor on disabled : - https://bugzilla.mozilla.org/show_bug.cgi?id=1798304 */ - cursor: default; +/* Android browsers don't properly update hover state if touch events are + * intercepted, like they are when clicking on the remote screen. */ +:root:not(.noVNC_touch) #noVNC_control_bar .noVNC_button.noVNC_selected:not(:disabled):hover { + border-color: rgba(0, 0, 0, 0.4); + background-color: rgba(0, 0, 0, 0.2); +} +:root:not(.noVNC_touch) #noVNC_control_bar .noVNC_button:not(:disabled):hover { + background-color: rgba(255, 255, 255, 0.2); } #noVNC_control_bar .noVNC_button:not(:disabled):active { padding-top: 5px; padding-bottom: 3px; } -/* Android browsers don't properly update hover state if touch events are - * intercepted */ -:root:not(.noVNC_touch) #noVNC_control_bar .noVNC_button.noVNC_selected:not(:disabled):hover { - border-color: rgba(0, 0, 0, 0.4); - background: rgba(0, 0, 0, 0.2); -} -:root:not(.noVNC_touch) #noVNC_control_bar .noVNC_button:not(:disabled):hover { - background: rgba(255, 255, 255, 0.2); -} #noVNC_control_bar .noVNC_button.noVNC_hidden { display: none !important; } diff --git a/app/styles/input.css b/app/styles/input.css index 51990bcf..1bc4a789 100644 --- a/app/styles/input.css +++ b/app/styles/input.css @@ -5,25 +5,13 @@ * This file is licensed under the 2-Clause BSD license (see LICENSE.txt). */ -input, select, textarea { +/* + * Common for all inputs + */ +input, input::file-selector-button, button, select, textarea { /* Respect standard font settings */ font: inherit; -} -input:not([type]), -input[type=date], -input[type=datetime-local], -input[type=email], -input[type=month], -input[type=number], -input[type=password], -input[type=search], -input[type=tel], -input[type=text], -input[type=time], -input[type=url], -input[type=week], -textarea { /* Disable default rendering */ appearance: none; background: none; @@ -32,71 +20,76 @@ textarea { border: 1px solid rgb(192, 192, 192); border-radius: 5px; color: black; - background: linear-gradient(to top, rgb(255, 255, 255) 80%, rgb(240, 240, 240)); + background-image: linear-gradient(to top, rgb(255, 255, 255) 80%, rgb(240, 240, 240)); } +/* + * Buttons + */ input[type=button], input[type=color], input[type=image], input[type=reset], input[type=submit], +input::file-selector-button, button, select { - /* Disable default rendering */ - appearance: none; - background: none; - - padding: 5px; - border: 1px solid rgb(192, 192, 192); border-bottom-width: 2px; - border-radius: 5px; - color: black; - background: linear-gradient(to top, rgb(255, 255, 255), rgb(240, 240, 240)); /* This avoids it jumping around when :active */ vertical-align: middle; -} -input[type=button], -input[type=color], -input[type=reset], -input[type=submit], -button { padding-left: 20px; padding-right: 20px; } +/* + * Select dropdowns + */ select { - --select-arrow: calc(100% - 7px) no-repeat url('data:image/svg+xml;utf8, \ + --select-arrow: url('data:image/svg+xml;utf8, \ \ \ '); - background: var(--select-arrow), - linear-gradient(to top, rgb(255, 255, 255), rgb(240, 240, 240)); + background-image: var(--select-arrow), + linear-gradient(to top, rgb(255, 255, 255), rgb(240, 240, 240)); + background-position: calc(100% - 7px), left top; + background-repeat: no-repeat; padding-right: calc(2*7px + 8px); padding-left: 7px; } -:root:not(.noVNC_touch) select:hover:not(:disabled) { - background: var(--select-arrow), - linear-gradient(to top, rgb(255, 255, 255), rgb(250, 250, 250)); +select:active { + /* Rotated arrow */ + --select-arrow: url('data:image/svg+xml;utf8, \ + \ + \ + '); } - option { color: black; background: white; } +/* + * Checkboxes + */ input[type=checkbox] { position: relative; - appearance: none; + background-color: white; + background-image: unset; border: 1px solid dimgrey; border-radius: 3px; - width: 0.8em; - height: 0.8em; + width: 13px; + height: 13px; + margin-right: 6px; vertical-align: bottom; + transition: 0.2s background-color linear; } input[type=checkbox]:checked { background-color: rgb(110, 132, 163); @@ -114,10 +107,30 @@ input[type=checkbox]:checked::after { transform: rotate(40deg); } +/* + * Radiobuttons + */ +input[type=radio] { + border-radius: 50%; + border: 1px solid dimgrey; + width: 12px; + height: 12px; + padding: 0; + margin-right: 6px; + transition: 0.2s border linear; +} +input[type=radio]:checked { + border: 6px solid rgb(110, 132, 163); +} + +/* + * Range sliders + */ input[type=range] { - appearance: none; + border: unset; border-radius: 3px; height: 20px; + padding: 0; background: transparent; } /* -webkit-slider.. & -moz-range.. cant be in selector lists: @@ -151,78 +164,97 @@ input[type=range]::-moz-range-thumb { margin-top: -7px; } -input:not([type]):focus-visible, -input[type=button]:focus-visible, -input[type=color]:focus-visible, -input[type=image]:focus-visible, -input[type=date]:focus-visible, -input[type=datetime-local]:focus-visible, -input[type=email]:focus-visible, -input[type=month]:focus-visible, -input[type=number]:focus-visible, -input[type=password]:focus-visible, -input[type=reset]:focus-visible, -input[type=search]:focus-visible, -input[type=submit]:focus-visible, -input[type=tel]:focus-visible, -input[type=text]:focus-visible, -input[type=time]:focus-visible, -input[type=url]:focus-visible, -input[type=week]:focus-visible, -input[type=checkbox]:focus-visible, -input[type=range]:focus-visible, -button:focus-visible, -select:focus-visible, -textarea:focus-visible { - outline: 2px solid rgb(74, 144, 217); - outline-offset: 1px; +/* + * File choosers + */ +input[type=file] { + background-image: none; + border: none; +} +input::file-selector-button { + margin-right: 6px; } -input:not([type]):disabled, -input[type=button]:disabled, -input[type=color]:disabled, -input[type=image]:disabled, -input[type=date]:disabled, -input[type=datetime-local]:disabled, -input[type=email]:disabled, -input[type=month]:disabled, -input[type=number]:disabled, -input[type=password]:disabled, -input[type=reset]:disabled, -input[type=search]:disabled, -input[type=submit]:disabled, -input[type=tel]:disabled, -input[type=text]:disabled, -input[type=time]:disabled, -input[type=url]:disabled, -input[type=week]:disabled, -button:disabled, -select:disabled, -textarea:disabled { - color: rgb(128, 128, 128); - background: rgb(240, 240, 240); +/* + * Hover + */ +:root:not(.noVNC_touch) input[type=button]:hover, +:root:not(.noVNC_touch) input[type=color]:hover, +:root:not(.noVNC_touch) input[type=image]:hover, +:root:not(.noVNC_touch) input[type=reset]:hover, +:root:not(.noVNC_touch) input[type=submit]:hover, +:root:not(.noVNC_touch) input::file-selector-button:hover, +:root:not(.noVNC_touch) button:hover { + background-image: linear-gradient(to top, rgb(255, 255, 255), rgb(250, 250, 250)); } -input[type=checkbox]:disabled, -input[type=range]:disabled { - opacity: 0.4; +:root:not(.noVNC_touch) select:hover { + background-image: var(--select-arrow), + linear-gradient(to top, rgb(255, 255, 255), rgb(250, 250, 250)); + background-position: calc(100% - 7px), left top; + background-repeat: no-repeat; } +/* + * Active (clicked) + */ input[type=button]:active, input[type=color]:active, input[type=image]:active, input[type=reset]:active, input[type=submit]:active, +input::file-selector-button:active, button:active, select:active { border-bottom-width: 1px; margin-top: 1px; } -:root:not(.noVNC_touch) input[type=button]:hover:not(:disabled), -:root:not(.noVNC_touch) input[type=color]:hover:not(:disabled), -:root:not(.noVNC_touch) input[type=image]:hover:not(:disabled), -:root:not(.noVNC_touch) input[type=reset]:hover:not(:disabled), -:root:not(.noVNC_touch) input[type=submit]:hover:not(:disabled), -:root:not(.noVNC_touch) button:hover:not(:disabled) { - background: linear-gradient(to top, rgb(255, 255, 255), rgb(250, 250, 250)); +/* + * Focus (tab) + */ +input:focus-visible, +input:focus-visible::file-selector-button, +button:focus-visible, +select:focus-visible, +textarea:focus-visible { + outline: 2px solid rgb(74, 144, 217); + outline-offset: 1px; +} +input[type=file]:focus-visible { + outline: none; /* We outline the button instead of the entire element */ +} + +/* + * Disabled + */ +input:disabled, +input:disabled::file-selector-button, +button:disabled, +select:disabled, +textarea:disabled { + opacity: 0.4; +} +:root:not(.noVNC_touch) input[type=button]:disabled, +:root:not(.noVNC_touch) input[type=color]:disabled, +:root:not(.noVNC_touch) input[type=image]:disabled, +:root:not(.noVNC_touch) input[type=reset]:disabled, +:root:not(.noVNC_touch) input[type=submit]:disabled, +:root:not(.noVNC_touch) input:disabled::file-selector-button, +:root:not(.noVNC_touch) button:disabled, +:root:not(.noVNC_touch) select:disabled { + background-image: linear-gradient(to top, rgb(255, 255, 255), rgb(240, 240, 240)); + border-bottom-width: 2px; + margin-top: 0; +} +input[type=file]:disabled { + background-image: none; +} +:root:not(.noVNC_touch) select:disabled { + background-image: var(--select-arrow), + linear-gradient(to top, rgb(255, 255, 255), rgb(240, 240, 240)); +} +input[type=image]:disabled { + /* See Firefox bug: + https://bugzilla.mozilla.org/show_bug.cgi?id=1798304 */ + cursor: default; }