mediawiki-skins-Vector/resources/skins.vector.styles/components/PinnableElement.less
Bartosz Dziewoński cb58da455e Fix workaround for position: sticky disabling subpixel rendering
Follow-up to badd229bab. Moving
`position: sticky` to the same element as `contain: paint` defeated
the workaround. Move it to the parent elements again to make it work.

Bug: T373066
Change-Id: Ic942bfd599661a29cf7b2dbb6c6cc2ec521b8c82
2024-08-22 02:31:19 +02:00

63 lines
1.9 KiB
Plaintext

/**
* PinnableElement
* Pinned containers are typically dropdown menus that have been
* placed in a sidebar column, e.g. page tools menu, main menu.
*/
.vector-pinnable-element {
font-size: @font-size-dropdown;
}
.vector-pinned-container {
.mixin-vector-content-box();
padding: 0 @padding-horizontal-dropdown-menu;
margin-bottom: 2rem;
display: none;
// If there is no display grid support we remove pinnable elements
@supports ( display: grid ) {
display: block;
}
}
.vector-column-start,
.vector-column-end {
// Support: Chrome
// Work around sticky-positioned layers disabling subpixel text rendering (T327460, T373066).
// This must be applied to the possible parent elements of .vector-sticky-pinned-container.
contain: paint;
}
.vector-sticky-pinned-container {
.mixin-vector-scrollable-with-fade();
// Applies styles for making a pinned element sticky
position: sticky;
top: @grid-row-gap;
// Border-box changes the height calculation.
box-sizing: border-box;
// Height is viewport height - row gap above and below the container.
max-height: ~'calc( 100vh - (@{grid-row-gap} * 2) )';
}
@media ( max-width: @max-width-breakpoint-tablet ) {
/**
* At lower resolutions, we want to hide the pinned containers when JS is enabled since these
* elements collapse (become unpinned) at this resolution via PinnableElement.js.
* Although this is handled in JS, this rule prevents the pinned menu from
* appearing on pageload, at low resolutions, before the JS kicks in.
*/
.client-js .vector-pinned-container {
display: none;
}
/**
* T357022 Sticky pinned containers have an ::after psuedo-element used to indicate the
* container is scrollable. On lower resolutions sticky pinned containers will always
* be empty. We need to set the container to display: none to prevent the psuedo-element
* height from affecting the layout
*/
.client-js .vector-sticky-pinned-container {
display: none;
}
}