jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/350260 )
Change subject: WikimediaUI, Apex theme: Improve frameless button in size and
behaviour
......................................................................
WikimediaUI, Apex theme: Improve frameless button in size and behaviour
Improving frameless buttons to be same `height` as framed ones in order
to simplify design and implementation predictability.
WikimediaUI theme: Also aligning icon/indicator vertical position to label
if available and improve focus states for frameless buttons.
Apex theme: Increase button size to equivalent of `32px` together with text
inputs and ensure similar logic like WikimediaUI theme.
Also cleaning up selectors, comments and minor whitespace issues.
Bug: T163094
Change-Id: Id526add14e9fb06c2a93a055d9eeb3d59236c66c
---
M demos/pages/widgets.js
M src/themes/apex/common.less
M src/themes/apex/elements.less
M src/themes/apex/tools.less
M src/themes/apex/widgets.less
M src/themes/apex/windows.less
M src/themes/wikimediaui/common.less
M src/themes/wikimediaui/elements.less
M src/themes/wikimediaui/layouts.less
M src/themes/wikimediaui/windows.less
10 files changed, 155 insertions(+), 50 deletions(-)
Approvals:
Bartosz Dziewoński: Looks good to me, but someone else must approve
jenkins-bot: Verified
Jforrester: Looks good to me, approved
diff --git a/demos/pages/widgets.js b/demos/pages/widgets.js
index b27084a..bce5872 100644
--- a/demos/pages/widgets.js
+++ b/demos/pages/widgets.js
@@ -2580,6 +2580,11 @@
framed: false,
icon: 'tag',
label: 'Random icon button'
+
} ),
+
new OO.ui.ButtonWidget( {
+
framed: false,
+
icon: 'help',
+
title: 'Icon only'
} )
]
} ) ]
diff --git a/src/themes/apex/common.less b/src/themes/apex/common.less
index ae50fef..4060ca5 100644
--- a/src/themes/apex/common.less
+++ b/src/themes/apex/common.less
@@ -36,9 +36,22 @@
@size-icon-numberinput: unit( 20 / 16 / 0.8, em );
@size-indicator: unit( 12 / 16 / 0.8, em );
+@start-frameless: -@padding-horizontal-frameless;
+
@border-radius-default: 0.25em;
+@border-radius-button: 0.3em;
@border-radius-taboption: 0.5em;
+@padding-default: @padding-vertical-default @padding-horizontal-default;
+@padding-frameless: @padding-vertical-frameless @padding-horizontal-frameless;
+@padding-vertical-default: unit( 3 / 16 / 0.8, em );
+@padding-horizontal-default: unit( 10 / 16 / 0.8, em );
+@padding-horizontal-frameless: unit( 4 / 16 / 0.8, em );
+@padding-vertical-frameless: unit( 4 / 16 / 0.8, em );
+@padding-top-textinput: unit( 7 / 16 / 0.8, em );
+@padding-start-frameless-icon-only: unit( 32 / 16 / 0.8, em );
+@padding-bottom-textinput: unit( 8 / 16 / 0.8, em );
+
@line-height-default: 1.4;
// Theme animation variables
diff --git a/src/themes/apex/elements.less b/src/themes/apex/elements.less
index 02a76e5..65f8e31 100644
--- a/src/themes/apex/elements.less
+++ b/src/themes/apex/elements.less
@@ -5,34 +5,49 @@
.theme-oo-ui-buttonElement () {
> .oo-ui-buttonElement-button {
color: @color-default;
+ border-radius: @border-radius-button;
+
+ &:focus {
+ outline: 0;
+ }
}
&.oo-ui-iconElement > .oo-ui-buttonElement-button >
.oo-ui-iconElement-icon {
margin-left: 0;
}
- &.oo-ui-indicatorElement > .oo-ui-buttonElement-button >
.oo-ui-indicatorElement-indicator {
- margin: @size-indicator / 2;
+ // Support `<input>` from ButtonInputWidget
+ > input.oo-ui-buttonElement-button,
+ &.oo-ui-labelElement .oo-ui-labelElement-label {
+ line-height: @size-icon;
}
- &.oo-ui-iconElement > .oo-ui-buttonElement-button >
.oo-ui-indicatorElement-indicator {
- margin-left: @size-indicator / 2;
+ &.oo-ui-iconElement {
+ .oo-ui-iconElement-icon {
+ margin-left: 0;
+ }
+
+ .oo-ui-indicatorElement-indicator {
+ margin-left: @size-indicator / 2;
+ }
+ }
+
+ &.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ margin: @size-indicator / 2;
}
&-frameless {
> .oo-ui-buttonElement-button {
- > .oo-ui-iconElement-icon {
- // Don't animate opacities for now, causes
wiggling in Chrome (bug 63020)
- // .oo-ui-transition( opacity @medium-ease );
- }
+ // Don't animate `.oo-ui-iconElement-icon` `opacity`
for now,
+ // causes wiggling in Chrome (bug 63020)
+ // `.oo-ui-transition( opacity @medium-ease );`
&:hover,
&:focus {
- outline: 0;
-
> .oo-ui-iconElement-icon {
opacity: 1;
}
+
> .oo-ui-labelElement-label {
color: #000;
}
@@ -43,15 +58,35 @@
}
}
- &.oo-ui-labelElement {
+ &.oo-ui-labelElement,
+ &.oo-ui-iconElement {
+ &:first-child {
+ margin-left: @start-frameless; // Address
`padding-left/-right` below
+ }
+
> .oo-ui-buttonElement-button {
+ padding: @padding-frameless;
+
> .oo-ui-labelElement-label {
+ color: @color-default;
margin-left: 0.25em;
+ }
+ }
+
+ &.oo-ui-indicatorElement { // Workaround for label/icon
& indicator combinations
+ > .oo-ui-buttonElement-button {
+ padding: @padding-frameless;
}
}
}
- // Support <input> from ButtonInputWidget
+ &.oo-ui-indicatorElement {
+ > .oo-ui-buttonElement-button {
+ padding: 0;
+ }
+ }
+
+ // Support `<input>` from ButtonInputWidget
> input.oo-ui-buttonElement-button {
padding-left: 0.25em;
color: @color-default;
@@ -80,6 +115,7 @@
> .oo-ui-iconElement-icon {
opacity: 0.2;
}
+
> .oo-ui-labelElement-label {
color: #ccc;
}
@@ -88,8 +124,7 @@
&-framed {
> .oo-ui-buttonElement-button {
- padding: 0.2em 0.8em;
- border-radius: 0.3em;
+ padding: @padding-default;
text-shadow: 0 1px 1px rgba( 255, 255, 255, 0.5 );
border: 1px #c9c9c9 solid;
.oo-ui-transition( border-color @quick-ease );
@@ -98,8 +133,6 @@
&:hover,
&:focus {
border-color: #aaa;
- outline: 0;
-
}
}
@@ -149,7 +182,7 @@
&-progressive {
> .oo-ui-buttonElement-button {
border: 1px solid @progressive-border;
-
.oo-ui-vertical-gradient(@progressive-gradient-start,
@progressive-gradient-end);
+ .oo-ui-vertical-gradient(
@progressive-gradient-start, @progressive-gradient-end );
&:hover,
&:focus {
diff --git a/src/themes/apex/tools.less b/src/themes/apex/tools.less
index 08700ef..aa34bc8 100644
--- a/src/themes/apex/tools.less
+++ b/src/themes/apex/tools.less
@@ -430,7 +430,7 @@
margin-left: 0;
> .oo-ui-popupToolGroup-handle {
- height: 2.3em;
+ height: 2.4em;
border-radius: 0;
margin-left: -2px;
}
diff --git a/src/themes/apex/widgets.less b/src/themes/apex/widgets.less
index 4bf3ca5..93b598b 100644
--- a/src/themes/apex/widgets.less
+++ b/src/themes/apex/widgets.less
@@ -1127,7 +1127,7 @@
input,
textarea {
- padding: 0.5em;
+ padding: @padding-top-textinput 0.5em @padding-bottom-textinput
0.5em;
line-height: 1.275em;
font-size: inherit;
font-family: inherit;
diff --git a/src/themes/apex/windows.less b/src/themes/apex/windows.less
index 07ae0fd..9b0040d 100644
--- a/src/themes/apex/windows.less
+++ b/src/themes/apex/windows.less
@@ -65,13 +65,8 @@
}
.oo-ui-actionWidget {
- height: 3.4em;
+ min-height: 3.4em;
.oo-ui-inline-spacing(0);
-
- &.oo-ui-labelElement .oo-ui-labelElement-label {
- text-align: center;
- line-height: 3.4em;
- }
&:hover {
background-color: rgba( 0, 0, 0, 0.05 );
@@ -81,6 +76,15 @@
background-color: rgba( 0, 0, 0, 0.1 );
}
+ .oo-ui-buttonElement-button {
+ padding: 0; // reset frameless ButtonElement
+ }
+
+ &.oo-ui-labelElement .oo-ui-labelElement-label {
+ text-align: center;
+ line-height: 3.4em;
+ }
+
&.oo-ui-flaggedElement {
&-progressive {
&:hover {
diff --git a/src/themes/wikimediaui/common.less
b/src/themes/wikimediaui/common.less
index 6e700e7..d69bdc9 100644
--- a/src/themes/wikimediaui/common.less
+++ b/src/themes/wikimediaui/common.less
@@ -88,6 +88,8 @@
@start-framed-icon-only-numberinput: 6 / @oo-ui-font-size-browser /
@oo-ui-font-size-default; // equals `0.46875em`≈`6px`
@start-framed-indicator-only: 13 / @oo-ui-font-size-browser /
@oo-ui-font-size-default; // equals `1.09375em`≈`14px`; `@size-indicator + 2 *
@border-width-default`
@start-framed-square-indicator-only: 9 / @oo-ui-font-size-browser /
@oo-ui-font-size-default; // equals `0.703125em`≈`9px`
+@start-frameless: -@start-frameless-icon;
+@start-frameless-icon: 3 / @oo-ui-font-size-browser / @oo-ui-font-size-default;
@start-tagmultiselect-input: 5 / @oo-ui-font-size-browser /
@oo-ui-font-size-default; // equals `0.390625em`≈`5px`;
`@padding-horizontal-tagitem` + `@border-width-default`
@end-tagitem: 4 / @oo-ui-font-size-browser / @oo-ui-font-size-default; //
equals `0.3125em`≈`4px`
@@ -132,7 +134,7 @@
@border-color-dialog-bar: #c8ccd1;
@border-radius-default: 2px;
-@border-radius-frameless: 1px; // Together with `@box-shadow-frameless` it
results in well rounded border
+@border-radius-frameless-indicator: 1px; // Together with
`@box-shadow-frameless-indicator-focus` it results in well rounded border
@border-style-default: solid;
@@ -140,13 +142,14 @@
@border-width-medium: 2px;
@padding-default: @padding-top-default @padding-horizontal-default
@padding-bottom-default;
-@padding-frameless: @padding-vertical-label 0;
+@padding-frameless: @padding-top-default @padding-horizontal-frameless
@padding-bottom-default @padding-horizontal-frameless;
@padding-input-text: @padding-top-default @padding-horizontal-input-text
@padding-bottom-default;
@padding-menu: @padding-top-menu @padding-horizontal-default
@padding-bottom-menu;
@padding-menu-large: ( @padding-top-menu * 1.5 ) @padding-horizontal-default (
@padding-bottom-menu * 1.5 );
@padding-search: 16 / @oo-ui-font-size-browser / @oo-ui-font-size-default; //
equals `0.625em`≈`16px`
@padding-taboption: @padding-top-default @padding-horizontal-taboption
@padding-bottom-default;
@padding-horizontal-default: 12 / @oo-ui-font-size-browser /
@oo-ui-font-size-default; // equals `0.9375em`≈`12px`
+@padding-horizontal-frameless: 4 / @oo-ui-font-size-browser /
@oo-ui-font-size-default; // equals `0.3125em`≈`4px`
@padding-horizontal-input-text: 8 / @oo-ui-font-size-browser /
@oo-ui-font-size-default;
@padding-horizontal-frameless: 4 / @oo-ui-font-size-browser /
@oo-ui-font-size-default;
@padding-horizontal-taboption: 13 / @oo-ui-font-size-browser /
@oo-ui-font-size-default; // equals `0.9375em`≈`13px`;
@padding-horizontal-default = @border-width-default
@@ -163,6 +166,7 @@
@padding-start-fieldset-header-iconized: 26 / @oo-ui-font-size-browser / (
@oo-ui-font-size-default * @font-size-fieldset-header );
@padding-start-indicator-only: @padding-start-icon-only;
@padding-start-indicator-plus: 32 / @oo-ui-font-size-browser /
@oo-ui-font-size-default;
+@padding-start-frameless-icon-only: 30 / @oo-ui-font-size-browser /
@oo-ui-font-size-default;
@padding-start-input-text-icon-label: 32 / @oo-ui-font-size-browser /
@oo-ui-font-size-default;
@box-shadow-dialog: 0 2px 2px 0 rgba( 0, 0, 0, 0.25 );
@@ -172,7 +176,7 @@
@box-shadow-widget: inset 0 0 0 1px transparent;
@box-shadow-widget-focus: inset 0 0 0 1px @color-progressive;
@box-shadow-progressive-focus: inset 0 0 0 1px @color-progressive, inset 0 0 0
2px @color-default-light;
-@box-shadow-frameless-focus: 0 0 0 2px @color-progressive;
+@box-shadow-frameless-indicator-focus: 0 0 0 2px @color-progressive;
@box-shadow-action-focus: @box-shadow-widget-focus, 0 0 0 1px
@color-progressive;
@box-shadow-input-binary-active: inset 0 0 0 1px @color-progressive-active;
@box-shadow-erroneous-focus: inset 0 0 0 1px @color-erroneous;
diff --git a/src/themes/wikimediaui/elements.less
b/src/themes/wikimediaui/elements.less
index 404ec2b..d45056f 100644
--- a/src/themes/wikimediaui/elements.less
+++ b/src/themes/wikimediaui/elements.less
@@ -5,6 +5,7 @@
.theme-oo-ui-buttonElement () {
> .oo-ui-buttonElement-button {
position: relative;
+ border-radius: @border-radius-default;
font-weight: bold;
text-decoration: none;
@@ -40,12 +41,6 @@
> .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
line-height: @line-height-widget-singleline;
- }
-
- &.oo-ui-iconElement {
- > .oo-ui-buttonElement-button {
- padding-left: @padding-start-icon-only;
- }
}
&.oo-ui-indicatorElement {
@@ -116,25 +111,44 @@
}
&-frameless {
- > .oo-ui-buttonElement-button {
- border-radius: @border-radius-frameless;
- }
-
+ // Icon (-only) frameless
&.oo-ui-iconElement {
- // Icon (-only) framed
+ &:first-child {
+ margin-left: @start-frameless; // Address
`left` on `.oo-ui-iconElement-icon` below with negative value
+ }
+
> .oo-ui-buttonElement-button {
min-width: @size-icon;
min-height: @size-icon;
+ border-color: @border-color-frameless-fallback;
// Support IE 6: `transparent` is not rendered correctly
+ border-color: @border-color-frameless;
+ border-style: @border-style-default;
+ border-width: @border-width-default;
+ padding-top: @padding-top-icon-indicator; //
Support IE 7: Acts as `min-width`
+ padding-left:
@padding-start-frameless-icon-only;
> .oo-ui-iconElement-icon {
- left: 0;
+ left: @start-frameless-icon;
}
}
}
&.oo-ui-labelElement {
+ &:first-child {
+ margin-left: -@padding-horizontal-frameless; //
Address `padding-left/-right` below
+ }
+
+ &.oo-ui-iconElement {
+ &:first-child {
+ margin-left: @start-frameless;
+ }
+
+ > .oo-ui-buttonElement-button {
+ padding-left:
@padding-start-frameless-icon-only;
+ }
+ }
+
> .oo-ui-buttonElement-button {
- margin-left: -@border-width-default; // Address
`border` below
border-color: @border-color-frameless-fallback;
// Support IE 6: `transparent` is not rendered correctly
border-color: @border-color-frameless;
border-style: @border-style-default;
@@ -145,8 +159,8 @@
&.oo-ui-indicatorElement {
> .oo-ui-buttonElement-button {
- min-width: @size-indicator;
- min-height: @size-indicator;
+ min-width: @min-size-indicator;
+ min-height: @min-size-indicator;
}
}
@@ -157,14 +171,41 @@
&:hover {
color: @color-default-hover;
}
- &:focus {
- box-shadow: @box-shadow-frameless-focus;
+ }
+
+ &.oo-ui-iconElement,
+ &.oo-ui-labelElement {
+ > .oo-ui-buttonElement-button:focus {
+ border-color:
@border-color-default-focus;
+ box-shadow: @box-shadow-widget-focus;
+
+ &:active {
+ border-color:
@border-color-frameless-fallback;
+ border-color:
@border-color-frameless;
+ box-shadow: none;
+ }
+ }
+ }
+
+ &.oo-ui-indicatorElement:not( .oo-ui-iconElement ):not(
.oo-ui-labelElement ) { // IE 9+ only on non-critical design properties
+ > .oo-ui-buttonElement-button {
+ border-radius:
@border-radius-frameless-indicator;
+
+ &:focus {
+ box-shadow:
@box-shadow-frameless-indicator-focus;
+
+ &:active {
+ box-shadow: none;
+ }
+ }
}
}
&.oo-ui-buttonElement-pressed >
input.oo-ui-buttonElement-button,
- &.oo-ui-buttonElement-pressed >
.oo-ui-buttonElement-button:active {
+ & > .oo-ui-buttonElement-button:active {
color: @color-default-active;
+ border-color: @border-color-frameless-fallback;
// Support IE 6: `transparent` is not rendered correctly
+ border-color: @border-color-frameless;
box-shadow: none;
}
diff --git a/src/themes/wikimediaui/layouts.less
b/src/themes/wikimediaui/layouts.less
index 83b4f2f..d007030 100644
--- a/src/themes/wikimediaui/layouts.less
+++ b/src/themes/wikimediaui/layouts.less
@@ -155,6 +155,10 @@
&.oo-ui-fieldLayout-align-top {
max-width: @max-width-default;
}
+
+ .oo-ui-actionFieldLayout-button .oo-ui-buttonElement-frameless {
+ margin-left: @padding-horizontal-frameless; // Address
frameless negative margin focus hack
+ }
}
.theme-oo-ui-fieldsetLayout () {
diff --git a/src/themes/wikimediaui/windows.less
b/src/themes/wikimediaui/windows.less
index 86bd8ee..a2f98aa 100644
--- a/src/themes/wikimediaui/windows.less
+++ b/src/themes/wikimediaui/windows.less
@@ -62,9 +62,12 @@
min-height: @size-dialog-bar-top;
.oo-ui-inline-spacing( 0 );
- // Reset frameless ButtonWidget
- .oo-ui-buttonElement-button {
+ // Reset Frameless ButtonWidgets
+ &:first-child {
margin-left: 0;
+ }
+
+ .oo-ui-buttonElement-button {
border: 0;
border-radius: 0;
padding: 0;
@@ -76,8 +79,6 @@
}
&.oo-ui-widget-enabled {
- //.oo-ui-transition( background-color
@transition-ease-quick );
-
.oo-ui-buttonElement-button {
&:hover {
background-color:
@background-color-framed; // Invert button color logic without defining var
(yet)
--
To view, visit https://gerrit.wikimedia.org/r/350260
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Id526add14e9fb06c2a93a055d9eeb3d59236c66c
Gerrit-PatchSet: 8
Gerrit-Project: oojs/ui
Gerrit-Branch: master
Gerrit-Owner: VolkerE <[email protected]>
Gerrit-Reviewer: Bartosz Dziewoński <[email protected]>
Gerrit-Reviewer: Esanders <[email protected]>
Gerrit-Reviewer: Jforrester <[email protected]>
Gerrit-Reviewer: Prtksxna <[email protected]>
Gerrit-Reviewer: VolkerE <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits