mediawiki-skins-Vector/resources/skins.vector.styles/layouts/screen.less

170 lines
4.3 KiB
Plaintext
Raw Normal View History

/**
* Vector modern layout styles for screen
*
* Layout rules divide the page into sections and how VectorComponents should be arranged in the skin.
* The rules here should only define the layout, not color or typography.
*/
html {
scroll-padding-top: @scroll-padding-top;
}
body {
background-color: @background-color-secondary--modern;
color: @color-base;
}
.mw-body,
.parsoid-body {
direction: ltr;
}
.mw-body .firstHeading {
word-wrap: break-word;
margin-bottom: 0;
}
Switch to navigation-first DOM order under `$wgVectorIsSearchInHeader` feature flag This moves the header, navigation, sidebar, and article toolbar to be before the content in the DOM. As a result, a lot of absolute positioning logic can be removed and styles can be simplified. Note that although the sidebar was moved from the header into the workspace container allowing it to de-absolutely positioned, its absolute positioning was kept intact as it has a fair amount of complexity that should be handled in a separate task. To activate, set `$wgVectorIsSearchInHeader = true;` Changes that could cause concern: * The "jump to search" link was removed as the search is now much earlier in the DOM and I questioned the value of keeping this. However, it can be added back in if this change is contentious. * A "jump to content" link was added to account for the new DOM order. * Because the sidebar was taken out of the header, users will not be able to tab from the sidebar button into the sidebar without additional tweaking (e.g. should we add JS to enable this?). It was deemed that this work can be saved as a follow-up task. * I applied `overflow-y: auto` to the `mw-page-container` because the header's top margin was collapsing and caused whitespace to appear between the viewport and the header. Alternatively, we could apply a top padding to the page container and remove the header's top margin. I went for the simplest solution but am open to alternatives. * I left the footer as-is in this patch to minimize risk. It might be cleaner later on to move the footer inside the workspace container which would leave only one workspace container. Bug: T261802 Change-Id: Ic553fab3bde25769b103d899b92b3b694c00c384
2020-09-08 23:20:58 +00:00
.mw-header {
// allow z-index to apply so search results overlay article
position: relative;
z-index: @z-index-header;
}
#mw-content-text {
margin-top: 16px;
}
/* Content */
.mw-indicators {
z-index: @z-index-indicators;
}
.vector-page-titlebar {
.mixin-clearfix();
box-shadow: none;
// Faux bottom border that stretches to the edges
// of the *content*, not the full width of the box.
&::after {
content: '';
display: block;
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 1px;
background-color: @border-color-base;
}
&-blank::after {
content: none;
}
}
.vector-body-before-content {
// Contain the floating .mw-indicators, but don't use clearfix because of browser inconsistencies
// when combining 'clear' and 'margin-top' (T325391)
overflow: hidden;
// Margin is only applied to indicators inside `.vector-body-before-content` since they can
// also appear next to the page title, where margin is not needed.
.mw-indicators {
margin-top: @margin-top-pre-content;
}
}
// Language button at bottom of content.
.mw-body .mw-portlet-lang {
float: right;
}
.vector-body {
position: relative;
z-index: @z-index-base;
}
#siteSub {
margin-top: @margin-top-pre-content; // T311564
}
// Styles only applied to non-empty #contentSub to avoid extra margins when both #contentSub and #contentSub2
// are rendered.
#contentSub:not( :empty ),
#contentSub2 {
font-size: unit( @font-size-small, rem );
color: @color-subtle;
width: auto;
// Visually separate #contentSub and #contentSub2 (T315639)
margin: @margin-top-pre-content 0 0;
}
// Container logic.
.mw-page-container {
.mixin-vector-page-container-sizing();
// Setting position and z-index is important as it allows overlays appended to the body tag
// to position themselves over the Vector interface. This forms another stacking context for
// elements placed inside this element
position: relative;
z-index: @z-index-base;
margin: 0 auto;
// Use non-zero padding to disable margin collapse.
// Be careful not to use overflow-y: scroll here (see T270146 and T271868)
padding-top: 0.05px;
padding-left: @padding-horizontal-page-container;
padding-right: @padding-horizontal-page-container;
background-color: @background-color-page-container;
}
@media ( min-width: @min-width-breakpoint-desktop ) {
.mw-page-container,
.vector-header-container .mw-header,
.vector-header-container .vector-sticky-header {
padding-left: @padding-horizontal-page-container-desktop;
padding-right: @padding-horizontal-page-container-desktop;
}
}
@media ( min-width: @min-width-breakpoint-desktop-wide ) {
.mw-page-container,
.vector-header-container .mw-header,
.vector-header-container .vector-sticky-header {
padding-left: @padding-horizontal-page-container-desktop-wide;
padding-right: @padding-horizontal-page-container-desktop-wide;
}
}
.vector-header-container {
width: 100%;
display: flex;
justify-content: center;
}
.vector-header-container .mw-header,
.vector-header-container .vector-sticky-header {
width: 100%;
// A min-height is set to account for projects where no icon is set.
min-height: @height-header;
background-color: @background-color-page-container;
.mixin-vector-page-container-sizing();
}
.vector-feature-limited-width-clientpref--excluded .mw-page-container,
.vector-feature-limited-width-clientpref--excluded .vector-sticky-header,
.vector-feature-limited-width-clientpref--excluded .mw-header,
.vector-feature-limited-width-clientpref-0 .mw-page-container,
.vector-feature-limited-width-clientpref-0 .vector-sticky-header,
.vector-feature-limited-width-clientpref-0 .mw-header {
max-width: none;
}
.skin--responsive .mw-page-container {
min-width: auto;
}
// Address issues with INP: T358380
// This can be removed if Vector 2022 ever becomes responsive.
// More information:
// https://developer.chrome.com/blog/300ms-tap-delay-gone-away?hl=en
html {
touch-action: manipulation;
}