diff --git a/includes/templates/skin.mustache b/includes/templates/skin.mustache index 2104c47b..13538ef8 100644 --- a/includes/templates/skin.mustache +++ b/includes/templates/skin.mustache @@ -45,7 +45,9 @@ {{#data-portlets-sidebar}}{{>Sidebar}}{{/data-portlets-sidebar}} -
{{{html-site-notice}}}
+
+
{{{html-site-notice}}}
+
{{>TableOfContentsContainer}}
diff --git a/resources/common/variables.less b/resources/common/variables.less index f99822b3..494232ab 100644 --- a/resources/common/variables.less +++ b/resources/common/variables.less @@ -137,6 +137,9 @@ // Sidebar @width-sidebar-px: 220px; @width-sidebar-px-wide: 244px; +// T305069 Layout adjustments of sidebar elements: +// Vertically align the left edge of sidebar elements with the visible edge of the sidebar toggle hamburger menu. +@margin-start-sidebar-content: unit( 12px / @font-size-browser, em ); // 0.75em @ 16 // TOC @sidebar-toc-selector: ~'.mw-table-of-contents-container .sidebar-toc'; diff --git a/resources/skins.vector.styles/components/Footer.less b/resources/skins.vector.styles/components/Footer.less new file mode 100644 index 00000000..254e28f5 --- /dev/null +++ b/resources/skins.vector.styles/components/Footer.less @@ -0,0 +1,4 @@ +.mw-footer-container { + padding-top: 50px; + padding-bottom: 82px; +} diff --git a/resources/skins.vector.styles/components/Header.less b/resources/skins.vector.styles/components/Header.less index 43916d27..c64415d9 100644 --- a/resources/skins.vector.styles/components/Header.less +++ b/resources/skins.vector.styles/components/Header.less @@ -12,6 +12,7 @@ .mw-header { // A min-height is set to account for projects where no icon is set. min-height: @height-logo-icon; + padding: 8px 0; // Vertical centering of header elements (IE>=11), requires Flexbox. .flex-display(); flex-wrap: nowrap; diff --git a/resources/skins.vector.styles/components/Sidebar.less b/resources/skins.vector.styles/components/Sidebar.less index daa593d0..b0827ac7 100644 --- a/resources/skins.vector.styles/components/Sidebar.less +++ b/resources/skins.vector.styles/components/Sidebar.less @@ -3,13 +3,6 @@ @import '../layouts/screen.less'; @import './checkboxHack.less'; -// T305069 Layout adjustments of sidebar elements: -// Vertically align the left edge of sidebar elements with the visible edge of the sidebar toggle hamburger menu. -@margin-start-sidebar-content: unit( 12px / @font-size-browser, em ); // 0.75em @ 16 -// Default spacing separating the sidebar TOC from the main menu or viewport. -@margin-top-sidebar-toc: 1.5em; - -// Update styling to account for TOC. .mw-sidebar, .sidebar-toc, .sidebar-toc:after { @@ -28,9 +21,6 @@ .sidebar-toc, .sidebar-toc:after { margin-left: -@margin-start-sidebar-content; - // Use margin-top to align TOC rather than grid row gap - // Applies when the TOC sticky and when the main menu is both open and closed. - margin-top: @margin-top-sidebar-toc; @media ( min-width: @min-width-desktop-wide ) { margin-left: 0; @@ -44,11 +34,6 @@ background-image: none; background-color: @background-color-secondary--modern; - @media ( min-width: @min-width-desktop ) { - // Prevent grid row gap from affecting TOC spacing when main menu is open - margin-bottom: -@grid-row-gap; - } - @media ( max-width: @max-width-tablet ) { // Makes the sidebar full screen at lower resolutions. width: 100%; diff --git a/resources/skins.vector.styles/components/TableOfContents.less b/resources/skins.vector.styles/components/TableOfContents.less index c7d188d1..44a63bea 100644 --- a/resources/skins.vector.styles/components/TableOfContents.less +++ b/resources/skins.vector.styles/components/TableOfContents.less @@ -9,8 +9,26 @@ @sidebar-toc-left-padding: ~'calc( 15px + @{margin-start-sidebar-content} )'; @toc-subsection-toggle-icon-size: 1.834em; +.mw-table-of-contents-container { + // stylelint-disable-next-line plugin/no-unsupported-browser-features + position: sticky; + top: 0; + // Needed for Grid-based layout + align-self: start; + + // Needed to align TOC with bottom of title + // 1.5em from .mw-table-of-contents-container + 1.5em from .sidebar-toc = 3em + @media ( min-width: @min-width-desktop ) { + body:not(.vector-toc-collapsed) @{selector-main-menu-closed} ~ & { + margin-top: 1.5em; + } + } +} + .sidebar-toc { max-height: 75vh; + // Default spacing separating the sidebar TOC from the main menu or viewport. + margin-top: 1.5em; padding: @sidebar-toc-vertical-padding @sidebar-toc-right-padding @sidebar-toc-vertical-padding @sidebar-toc-left-padding; box-sizing: border-box; overflow: auto; diff --git a/resources/skins.vector.styles/layouts/grid.less b/resources/skins.vector.styles/layouts/grid.less index 5835ceff..201b80b3 100644 --- a/resources/skins.vector.styles/layouts/grid.less +++ b/resources/skins.vector.styles/layouts/grid.less @@ -2,9 +2,7 @@ // Grid layout // -@height-header: 66px; @width-gutter: 20px; -@padding-top-footer: 50px; // Makes a column span entire page .mixin-column-full-width() { @@ -42,39 +40,26 @@ } } -.mw-footer-container { - padding-top: @padding-top-footer; - padding-bottom: 82px; -} - -@media ( max-width: @max-width-tablet ) { - .mw-header { - // Match header styles applied by grid-template-rows and row-gap - // when grid is disabled on lower resolutions - height: @height-header; - margin-bottom: @grid-row-gap; - } -} - @media ( min-width: @min-width-desktop ) { .mw-page-container-inner { display: grid; width: 100%; - grid-template: ~'@{height-header} min-content min-content 1fr min-content / 232px @{width-gutter} minmax(0, 1fr)'; + grid-template: ~'min-content min-content min-content 1fr min-content / 232px @{width-gutter} minmax(0, 1fr)'; grid-template-areas: 'header header header' - 'sitebanner sitebanner sitebanner' + 'sitenotice sitenotice sitenotice' 'sidebar gutter content' 'toc gutter content' 'footer footer footer'; - row-gap: @grid-row-gap; } .mw-body { padding-left: 0; } - #siteNotice { - grid-area: sitebanner; + // FIXME: Remove selector after I39959f43f20880e83bef945a7535d58cfe0b6412 has been in prod for a week + .mw-page-container-inner > #siteNotice, + .vector-sitenotice-container { + grid-area: sitenotice; } .mw-table-of-contents-container { @@ -102,7 +87,6 @@ .mw-footer-container { grid-area: footer; - padding-top: @padding-top-footer - @grid-row-gap; } } diff --git a/resources/skins.vector.styles/layouts/screen.less b/resources/skins.vector.styles/layouts/screen.less index 682bc3f6..1ccec634 100644 --- a/resources/skins.vector.styles/layouts/screen.less +++ b/resources/skins.vector.styles/layouts/screen.less @@ -81,6 +81,11 @@ body { float: right; } +#siteNotice { + // Override core styles to ensure sufficient spacing between page content and main menu + margin: @grid-row-gap 0 !important; /* stylelint-disable-line declaration-no-important */ +} + .vector-body { position: relative; z-index: @z-index-base; @@ -113,14 +118,6 @@ body { } } -.mw-table-of-contents-container { - // stylelint-disable-next-line plugin/no-unsupported-browser-features - position: sticky; - top: 0; - // Needed for Grid-based layout - align-self: start; -} - .parsoid-body { padding: @padding-content; } diff --git a/resources/skins.vector.styles/skin.less b/resources/skins.vector.styles/skin.less index 6f3a63bf..c89f6154 100644 --- a/resources/skins.vector.styles/skin.less +++ b/resources/skins.vector.styles/skin.less @@ -18,6 +18,7 @@ @import './components/LanguageButton.less'; @import './components/UserLinks.less'; @import './components/Header.less'; + @import './components/Footer.less'; @import './components/MenuDropdown.less'; @import './components/MenuTabs.less'; @import './components/MenuPortal.less';