mediawiki-skins-Vector/resources/skins.vector.styles/components/TableOfContentsCollapsed.less
bwang 6bff0011c1 Fix ToC dropdown menu spacing when visual next flag is enabled, address icon related feedback
Causes 20 visual progressions regardless of visual next flag, the ToC moves 1px when in the sidebar

Follow up to If3aed0ac401b0abc80c3ad52806eb85b33d43f06

Bug: T321504
Change-Id: I4b3ec90d8e79791a1bf17ba02c9f9d722499bec8
2022-11-11 18:56:12 +00:00

203 lines
5.6 KiB
Plaintext

@import '../../common/variables.less';
@import '../../common/mixins.less';
@height-collapsed-toc-button: 36px;
@padding-top-content-px: unit( @padding-top-content * @font-size-browser, px );
@selector-collapsed-toc-open: ~'#vector-toc-collapsed-checkbox:checked';
// Use calc so that the same max width can apply even when the TOC is in different containers
@max-width-collapsed-toc: 0.85 * @max-width-content-container; // 51em
#vector-toc-collapsed-button {
display: none;
float: left;
margin-right: 4px;
// Override background color for when the TOC is overlaps content
// as a sticky element when the page is scrolled down.
background-color: @background-color-base;
&:hover,
&:active {
background-color: @colorGray15;
}
.vector-feature-visual-enhancement-next-disabled & {
padding: 7px 12px;
}
.vector-feature-visual-enhancement-next-enabled & {
// Override the default button styles so the ToC button is slightly shorter when collapsed into the page title
@media ( max-width: @max-width-tablet ) {
padding: 7px 12px;
}
}
}
#vector-toc-collapsed-button,
.sidebar-toc {
z-index: @z-index-menu;
}
.ve-active {
#vector-toc-collapsed-button {
display: none !important; /* stylelint-disable-line declaration-no-important */
}
}
// Styles for the "move to sidebar/hide" buttons, hidden by default.
.vector-toc-collapse-button,
.vector-toc-uncollapse-button {
display: none;
border: 0;
padding: 0;
background-color: transparent;
color: @color-primary;
cursor: pointer;
&:hover {
color: @color-primary--hover;
}
&:before {
content: '@{msg-brackets-start}';
color: @color-base--subtle;
}
&:after {
content: '@{msg-brackets-end}';
color: @color-base--subtle;
}
}
// Shared collapsed TOC styles, applies across all collapsed cases (header, floating, sticky header)
.mixin-toc-collapsed() {
// T316056 Remove TOC menu fixed width and apply min/max-width
// using min() so that the TOC menu doesn't fully cover the text even on small viewports
width: auto;
margin-left: 0;
margin-right: 0;
min-width: 200px;
max-width: ~'min( @{max-width-collapsed-toc}, 75vw )'; // 51em
}
// TOC styles when collapsed to header
.mixin-toc-collapsed-header() {
#vector-toc-collapsed-button {
display: block;
}
.vector-sticky-toc-container {
// Override TOC container's sticky positioning
position: relative;
}
.sidebar-toc {
.mixin-toc-collapsed();
display: none;
position: absolute;
top: @height-collapsed-toc-button; // TOC button height
left: -@icon-padding-md;
margin-top: @padding-top-content-px; // Account for padding-top from .mw-body
// FIXME: Collapsed TOC styles are not consistent with other vector dropdowns
border: @border-width-base @border-style-base @border-color-base;
}
@{selector-collapsed-toc-open} ~ .mw-table-of-contents-container .sidebar-toc {
// Hide the TOC when the button is not checked
display: block;
}
}
// TOC styles when collapsed to floating button
.mixin-toc-collapsed-floating() {
#vector-toc-collapsed-button {
position: fixed;
top: 0;
left: 0;
margin: 0;
}
.sidebar-toc {
.mixin-toc-collapsed();
position: fixed;
left: 6px;
}
}
@media ( max-width: @max-width-tablet ) {
//
// Collapsed to header on narrow screens
//
.mixin-toc-collapsed-header();
//
// Collapsed to floating button on narrow screens when below page title
//
.vector-below-page-title {
.mixin-toc-collapsed-floating();
}
}
@media ( min-width: @min-width-desktop ) {
@supports ( display: grid ) {
.client-js {
.vector-toc-collapsed:not( .vector-sticky-header-visible ) {
//
// Collapsed to header
//
.mixin-toc-collapsed-header();
.mw-table-of-contents-container {
grid-area: pageContent;
}
//
// Collapsed to floating icon when below page title
//
.vector-below-page-title& {
.mixin-toc-collapsed-floating();
}
}
// Align with vector-toc-collapsed-button which uses core flush classes
// using temporary hardcoded value.
// FIXME: Remove this entire selector as part of T318013
.vector-feature-visual-enhancement-next-enabled.vector-toc-collapsed:not( .vector-sticky-header-visible ) .sidebar-toc {
@media ( min-width: @width-breakpoint-desktop ) {
// Copied from mediawiki.ui.icons,
// (Ifccaadabd72a12814d3d4d01200931f7254c6cd5)
// but converted to px to match `mw-ui-button`
left: -5px;
}
}
// Show the "move to sidebar/hide" buttons
.vector-toc-collapsed .vector-toc-uncollapse-button,
.vector-toc-not-collapsed .vector-toc-collapse-button {
display: inline-block;
}
}
}
}
//
// Collapsed to sticky header
//
.vector-toc-collapsed .vector-sticky-header-toc-container .sidebar-toc {
.mixin-toc-collapsed();
// T316056 Use max-content because collapsed TOC is absolutely positioned, width is relative to the collapsed TOC button
// max-content doesn't account for padding even when we use box-sizing, so use content-box instead
// and manually account for horizontal padding in the max width
box-sizing: content-box;
width: max-content;
@sidebar-toc-left-padding-em: unit( @sidebar-toc-left-padding / @font-size-browser, em );
@sidebar-toc-right-padding-em: unit( @sidebar-toc-right-padding / @font-size-browser, em );
@max-width-sticky-header-collapsed-toc: @max-width-collapsed-toc - @sidebar-toc-left-padding-em - @sidebar-toc-right-padding-em;
@max-width-sticky-header-collapsed-toc-next: @max-width-collapsed-toc - @sidebar-toc-right-padding-em;
max-width: ~'min( @{max-width-sticky-header-collapsed-toc}, 75vw )'; // min( 48.5625em, 75vw )
.vector-feature-visual-enhancement-next-enabled & {
max-width: ~'min( @{max-width-sticky-header-collapsed-toc-next}, 75vw )';
}
}