mirror of
https://github.com/StarCitizenTools/mediawiki-extensions-TabberNeue.git
synced 2024-12-18 02:51:17 +00:00
1f4436843f
* Add skeleton screen to avoid layout shift * Hide other sections before the module is loaded to avoid layout shift * Add noscript message * Header container is now saved in parser instead of being generated. If you have any issues with the script, try clearing out the parser cache or do an empty edit.
248 lines
4.4 KiB
Plaintext
248 lines
4.4 KiB
Plaintext
@width-bounce-dot: 12px;
|
|
|
|
.tabber {
|
|
position: relative;
|
|
display: flex;
|
|
|
|
/* establish primary containing box */
|
|
overflow: hidden;
|
|
flex-direction: column;
|
|
|
|
&__tabs {
|
|
display: flex;
|
|
overflow: auto hidden;
|
|
scrollbar-width: none;
|
|
|
|
&::-webkit-scrollbar {
|
|
width: 0;
|
|
height: 0;
|
|
}
|
|
}
|
|
|
|
&__section {
|
|
display: grid;
|
|
overflow: hidden;
|
|
block-size: 100%;
|
|
grid-auto-columns: 100%;
|
|
grid-auto-flow: column;
|
|
}
|
|
|
|
&__header {
|
|
position: relative;
|
|
display: flex;
|
|
/* defend against <section> needing 100% */
|
|
flex-shrink: 0;
|
|
box-shadow: inset 0 -1px 0 0 #a2a9b1;
|
|
/* fixes cross browser quarks */
|
|
min-block-size: fit-content;
|
|
|
|
&__prev {
|
|
left: 0;
|
|
}
|
|
|
|
&__next {
|
|
right: 0;
|
|
}
|
|
|
|
&__prev,
|
|
&__next {
|
|
position: absolute;
|
|
z-index: 1;
|
|
top: 0;
|
|
bottom: 0;
|
|
display: none;
|
|
width: 20px;
|
|
border-radius: 4px;
|
|
cursor: pointer;
|
|
|
|
&:after {
|
|
position: absolute;
|
|
top: 0;
|
|
bottom: 0;
|
|
width: inherit;
|
|
background-position: center;
|
|
background-repeat: no-repeat;
|
|
background-size: 14px;
|
|
content: '';
|
|
}
|
|
}
|
|
|
|
&--prev-visible .tabber__tabs {
|
|
-webkit-mask-image: linear-gradient( 90deg, transparent, #000 20% );
|
|
mask-image: linear-gradient( 90deg, transparent, #000 20% );
|
|
}
|
|
|
|
&--next-visible .tabber__tabs {
|
|
-webkit-mask-image: linear-gradient( 90deg, #000 80%, transparent );
|
|
mask-image: linear-gradient( 90deg, #000 80%, transparent );
|
|
}
|
|
|
|
&--prev-visible.tabber__header--next-visible .tabber__tabs {
|
|
-webkit-mask-image: linear-gradient( 90deg, transparent, #000 20%, #000 80%, transparent );
|
|
mask-image: linear-gradient( 90deg, transparent, #000 20%, #000 80%, transparent );
|
|
}
|
|
|
|
&--prev-visible .tabber__header__prev,
|
|
&--next-visible .tabber__header__next {
|
|
display: block;
|
|
}
|
|
}
|
|
|
|
&__header,
|
|
&__section {
|
|
/* prevent scroll chaining on x scroll */
|
|
overscroll-behavior-x: contain;
|
|
/* scrolling should snap children on x */
|
|
scroll-snap-type: x mandatory;
|
|
scrollbar-width: none;
|
|
|
|
&::-webkit-scrollbar {
|
|
width: 0;
|
|
height: 0;
|
|
}
|
|
}
|
|
|
|
&__tab {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
padding: 0.5em 0.75em;
|
|
color: #54595d;
|
|
font-weight: bold;
|
|
scroll-snap-align: start;
|
|
text-decoration: none;
|
|
white-space: nowrap;
|
|
|
|
&:visited {
|
|
color: #54595d;
|
|
}
|
|
|
|
&:hover,
|
|
&:active,
|
|
&:focus {
|
|
text-decoration: none;
|
|
}
|
|
|
|
&--active,
|
|
&--active:visited {
|
|
box-shadow: inset 0 -2px 0 0 #36c;
|
|
color: #36c;
|
|
}
|
|
}
|
|
|
|
&__panel {
|
|
height: max-content;
|
|
|
|
// Hide edit buttons for non-transclusion tabs since they don't work
|
|
/* stylelint-disable-next-line selector-class-pattern */
|
|
&:not( [ data-tabber-page-title ] ) .mw-editsection {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
&__transclusion {
|
|
/*
|
|
* Animation based on dots indicators from Wikimedia
|
|
* T266028
|
|
*/
|
|
&--loading {
|
|
margin: 0.5em 0; // based on Vector
|
|
text-align: center;
|
|
white-space: nowrap;
|
|
|
|
.tabber__loading-indicator,
|
|
&:before,
|
|
&:after {
|
|
display: inline-block;
|
|
width: @width-bounce-dot;
|
|
height: @width-bounce-dot;
|
|
animation: bounce-delay 1600ms infinite ease-in-out both;
|
|
animation-delay: -160ms;
|
|
background-color: #36c;
|
|
border-radius: 100%;
|
|
content: '';
|
|
}
|
|
|
|
&:before {
|
|
margin-right: @width-bounce-dot / 4;
|
|
animation-delay: -330ms;
|
|
}
|
|
|
|
&:after {
|
|
margin-left: @width-bounce-dot / 4;
|
|
animation-delay: 0ms;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Animations
|
|
@keyframes bounce-delay {
|
|
0%,
|
|
50%,
|
|
100% {
|
|
transform: scale( 0.625 );
|
|
}
|
|
|
|
20% {
|
|
opacity: 0.87;
|
|
transform: scale( 1 );
|
|
}
|
|
}
|
|
|
|
@media ( hover: none ) {
|
|
// Need extra specificity to override
|
|
.tabber {
|
|
.tabber__header {
|
|
&__prev,
|
|
&__next {
|
|
pointer-events: none; // Disable arrow button
|
|
|
|
&:after {
|
|
background-image: none; // Remove arrow icon
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@media ( hover: hover ) {
|
|
.tabber {
|
|
&__tab {
|
|
&:hover {
|
|
box-shadow: inset 0 -2px 0 0 #447ff5;
|
|
color: #447ff5;
|
|
}
|
|
|
|
&:active {
|
|
box-shadow: inset 0 -2px 0 0 #2a4b8d;
|
|
color: #2a4b8d;
|
|
}
|
|
}
|
|
|
|
&__header {
|
|
&__prev,
|
|
&__next {
|
|
&:hover {
|
|
background-color: rgba( 0, 24, 73, 0.03 );
|
|
}
|
|
|
|
&:active {
|
|
background-color: rgba( 0, 24, 73, 0.05 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Smooth scrolling through a large number of panels hurt performance on mobile
|
|
// Also it will trigger unnessecary lazyloading as lazyload content show up momentarily
|
|
@media ( prefers-reduced-motion: no-preference ) and ( min-width: 720px ) {
|
|
.tabber {
|
|
&__header,
|
|
&__section,
|
|
&__tabs {
|
|
scroll-behavior: smooth;
|
|
}
|
|
}
|
|
}
|