图片分页组件

注意


此页为于 SCP 维基内部使用的“组件”页。用于在其他页面中引用。

未经组件作者或工作人员允许,请勿修改此页的内容。


flipper.png

(示例页面摘自 Harmacy 制作的 龙在我的后院中

该组件用于以漫画风格的分页形式显示一连串图片。

若需使用,请添加以下代码:

[[include :scp-wiki:component:image-pager |css=-- |alt=alt
|p1=-- |img1=(这里填链接) |alt-text1=图片 1 的替代文本。
|capt1=可选的图片 1 说明文本。

|p2=-- |img2=(这里填链接) |alt-text2=图片 2 的替代文本。
|capt2=可选的图片 2 说明文本。

|p3=-- |img3=(这里填链接) |alt-text3=图片 3 的替代文本。
|capt3=可选的图片 1 说明文本。
]]

如果一个页面要用到多个分页组件,请在后面的组件 [[include]] 里去掉 |css=--。参数 |alt=alt 将启用将替代文本插入到图片中的功能。

该组件同样支持从右至左翻阅的模式:

[[include :scp-wiki:component:image-pager |direction=rtl

目前,图片分页组件一次至多只能显示 20 页。


div.page-flipper {
    font-family: Inter, 'Nanum Gothic', system-ui, BlinkMacFontSystem, Arial, sans-serif;
    direction: ltr;
    margin-block: 1.5rem;
    --_p-height: calc(100svh - 3.25rem);
    --_p-shadow: 0 0 .25rem rgb(0 0 0/.175);
 
    --_b-size: 2.125rem;
    --_b-forward: "→";
    --_b-backward: "←";
    --_b-color: rgb(12 12 12);
    --_b-background: rgb(252 252 252);
    --_b-color-hover:  var(--_b-color);
    --_b-background-hover: rgb(230 230 230);
    --_b-color-selected:  var(--_b-color);
    --_b-background-selected: var(--_b-background-hover);
    --_b-border: rgb(230 230 230);
}
 div.page-flipper.dir-rtl {
    direction: rtl;
    --_b-forward: "←";
    --_b-backward: "→";
}
 
#page-content div.page-flipper .yui-navset {
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: .875rem;
    position: relative;
    margin: auto;
    width: fit-content;
    z-index: unset;
    isolation: isolate;
}
 
div.page-flipper .yui-navset .yui-content {
    padding: 0;
    margin: 0;
    border: none;
    background: transparent;
    box-shadow: none;
 
    display: grid;
    grid-template-areas: "page";
    grid-template-columns: minmax(0,1fr);
    grid-template-rows: minmax(0,1fr);
    place-items: center;
    order: -1;
    z-index: -1;
}
 
div.page-flipper .yui-content > div {
    grid-area: page;
    display: flex!important;
    align-items: center;
    justify-content: center;
    flex-direction: column;
    max-width: 100%;
    position: relative;
}
div.page-flipper .yui-content > div[style*="none"] { visibility: hidden; }
 
div.page-flipper .yui-content > div > img {
    max-height: var(--_p-height);
    box-shadow: var(--_p-shadow);
}
 
.page-flipper .page-capt {
    position: absolute;
    inset-block-end: 0;
    width: 100%;
    color: var(--_b-color);
    background-color: var(--_b-background);
    font-size: .775em;
    text-align: center;
    padding: .125em 1em;
    box-sizing: border-box;
}
.page-flipper [class*="$capt"].page-capt { display: none; }
.page-flipper .page-capt p {
    margin-block: .625em;
}
 
/*---------------------------------------*/
/*----- Carousel Navigation Layout -----*/
/*---------------------------------------*/
 
div.page-flipper .yui-navset ul.yui-nav {
    background: unset;
    border: unset;
    clip-path: unset;
    position: static;
    display: flex;
    flex-wrap: wrap;
    gap: .75rem;
    justify-content: center;
    font-size: .875em;
}
div.page-flipper .yui-navset.yui-navset-top ul.yui-nav li { display: contents; }
div.page-flipper .yui-navset.yui-navset-top ul.yui-nav li::before,
div.page-flipper .yui-navset.yui-navset-top ul.yui-nav li::after { all: unset; }
 
div.page-flipper .yui-navset ul.yui-nav li a {
    --_color: var(--_b-color);
    --_background-color: var(--_b-background);
    all: unset;
    position: static;
    text-align: center;
    padding: .325em;
    box-sizing: border-box;
    flex-basis: 2.5em;
    color: var(--_color)!important;
    background: var(--_background-color)!important;
    border: solid 0.1rem var(--_b-border);
}
div.page-flipper  .yui-navset ul.yui-nav li a em {
    color: inherit;
    padding: 0;
    border: unset;
}
 
div.page-flipper .yui-navset ul.yui-nav li a:is(:hover,:focus) {
    --_color: var(--_b-color-hover);
    --_background-color: var(--_b-background-hover);
}
div.page-flipper .yui-navset ul.yui-nav li.selected a {
    --_color: var(--_b-color-selected);
    --_background-color: var(--_b-background-selected);
}
 
div.page-flipper .yui-navset ul.yui-nav li a::before,
div.page-flipper .yui-navset ul.yui-nav li a::after {
    all: unset;
    display: grid;
    align-items: center;
    justify-content: center;
    width: var(--_b-size);
    height: var(--_b-size);
    box-sizing: border-box;
    font-size: calc(var(--_b-size)*.75);
    line-height: 0;
    color: inherit;
    background: inherit!important;
    border: solid 0.1rem var(--_b-border);
    position: absolute;
    inset-block-start: min(calc((var(--_p-height) - var(--_b-size))/2), calc(50% - var(--_b-size) - .75rem));
    visibility: hidden;
}
 
div.page-flipper .yui-navset ul.yui-nav li a::before {
    content: var(--_b-backward);
    inset-inline-start: calc(var(--_b-size)*-.425);
}
div.page-flipper .yui-navset ul.yui-nav li a::after {
    content: var(--_b-forward);
    inset-inline-end: calc(var(--_b-size)*-.425);
}
 
/*---------------------------------------*/
/*----- Carousel Navigation Logic -----*/
/*---------------------------------------*/
 
/* if browser doesn't support :has - this should eventually be removed */
@supports not selector(li:has(+ .selected)) {
 
div.page-flipper .yui-navset ul.yui-nav li a::before,
div.page-flipper .yui-navset ul.yui-nav li.selected + li a::after { visibility: visible; }
 
div.page-flipper .yui-navset ul.yui-nav li.selected ~ li a::before,
div.page-flipper .yui-navset ul.yui-nav li.selected a::before { visibility: hidden; }
 
}
 
/* if browser supports :has */
@supports selector(li:has(+ .selected)) {
 
div.page-flipper .yui-navset ul.yui-nav li:has(+ .selected) a::before,
div.page-flipper .yui-navset ul.yui-nav li.selected + li a::after {
    visibility: visible;
}
 
}

[[tabview]]

[[/tabview]]

除非特别注明,本页内容采用以下授权方式: Creative Commons Attribution-ShareAlike 3.0 License