mediawiki-skins-Vector/resources/skins.vector.styles/layouts/grid.less
bwang 8e4da83908 Replace .sidebar-toc class with .vector-toc and use PinnableElement in TOC
Using PinnableElement in the TOC allows us to reuse styles associated with all PinnableElements, and helps ensure consistency between page tools and the TOC. This is something that would probably need to be done for T324505 anyway
Rather than updating PinnableElement to accept a class prop, I chose to rename '.sidebar-toc' to '.vector-toc', making the TOC's naming conventions consistent with the rest of Vector.
"sidebar" doesn't make sense anymore anyway, as the TOC can be in multiple locations and it's best to avoid the "sidebar" term

Bug: T324877
Change-Id: I5b9228380f5c4674ef424d33127a5cb4010822da
2023-01-04 17:48:03 -06:00

148 lines
4.4 KiB
Plaintext

//
// Grid layout
//
// Match styles between TOC and fade element to ensure the fade covers the correct area
// This is expressed in pixels to support different font sizes since our layout is currently
// expressed in pixels. See T313817.
// FIXME: Remove this selector after Iab94f9f600f8e6d032ad70d6b8e502686977441c has been in prod for 5 days
// FIXME: Remove all .sidebar-toc selectors after I5b9228380f5c4674ef424d33127a5cb4010822da is in prod for 5 days
#vector-toc-pinned-container .sidebar-toc:after,
#vector-toc-pinned-container .sidebar-toc,
#vector-toc-pinned-container .vector-toc:after,
#vector-toc-pinned-container .vector-toc,
.vector-feature-page-tools-disabled .vector-main-menu,
.vector-main-menu-container .vector-main-menu {
// T305069 Layout adjustments of sidebar elements
// Align the left edge of main menu with the main menu button.
width: @width-sidebar-px;
// Align the left edge of main menu with the main menu button icon.
@media ( min-width: @min-width-desktop-wide ) {
width: @width-sidebar-px-wide;
}
}
@media ( min-width: @min-width-desktop ) {
.mw-page-container-inner {
display: grid;
width: 100%;
column-gap: 8px; // 8px + 12px (.mw-body padding-left) = 20px total spacing
grid-template: ~'min-content min-content min-content 1fr min-content / 232px minmax(0, 1fr)';
grid-template-areas: 'header header'
'siteNotice siteNotice'
'mainMenu pageContent'
'toc pageContent'
'footer footer';
}
.vector-sitenotice-container {
grid-area: siteNotice;
}
.mw-table-of-contents-container {
grid-area: toc;
}
.mw-header {
grid-area: header;
}
.vector-main-menu-container {
grid-area: mainMenu;
}
.mw-content-container {
grid-area: pageContent;
}
.mw-footer-container {
grid-area: footer;
}
}
@media ( min-width: @min-width-desktop-wide ) {
.mw-page-container-inner {
/* Use of minmax is important to restrict the maximum grid column width
more information: T314756 */
grid-template-columns: ~'284px minmax(0, 1fr)';
}
}
.mw-content-container,
.mw-table-of-contents-container {
.vector-feature-page-tools-disabled & {
max-width: @max-width-content-container;
}
.vector-feature-limited-width-disabled &,
.vector-feature-limited-width-content-disabled & {
// Allow the max-width of content on history/special pages to be wider than
// the max-width of content on article pages.
// Note, we don't disable the max-width on .vector-page-toolbar-container intentionally
// to support easier navigation between tabs.
// See T293441 for further information on that.
// Both rules are !important as they are final. Max-width on a page should be restored by removing the `skin-vector-disable-max-width`,
// preferably by modification to the feature flag VectorMaxWidthOptions. Code should never attempt to override this rule.
/* stylelint-disable-next-line declaration-no-important */
max-width: none !important;
/* stylelint-disable-next-line declaration-no-important */
width: 100% !important;
}
}
// Horizontally center content when column start is empty (i.e. no pinned ToC or pinned main menu)
.vector-feature-page-tools-disabled {
@{selector-sidebar-no-toc-sidebar-closed},
&.vector-toc-unpinned @{selector-main-menu-closed} {
& ~ .mw-content-container {
grid-column: mainMenu / pageContent;
margin-left: auto;
margin-right: auto;
width: 100%;
}
}
}
// Horizontally center content when column start is empty (i.e. no pinned ToC or pinned main menu)
.vector-feature-page-tools-enabled {
&.vector-feature-main-menu-pinned-disabled .vector-sidebar-container-no-toc ~ .mw-content-container,
&.vector-toc-unpinned.vector-feature-main-menu-pinned-disabled .mw-content-container {
grid-column: mainMenu / pageContent;
margin-left: auto;
margin-right: auto;
}
}
@media ( min-width: @min-width-desktop ) {
.vector-feature-page-tools-enabled .mw-body {
display: grid;
grid-auto-rows: auto;
grid-template-columns: ~'minmax(0, @{max-width-content-container}) min-content';
grid-template-areas: 'titlebar .'
'toolbar columnEnd'
'content columnEnd';
.vector-feature-limited-width-disabled&,
.vector-feature-limited-width-content-disabled& {
grid-template-columns: ~'1fr min-content';
}
.vector-page-titlebar {
grid-area: titlebar;
}
.vector-page-toolbar {
grid-area: toolbar;
}
#bodyContent {
grid-area: content;
}
.vector-column-end {
grid-area: columnEnd;
}
}
}