svg+css+js实现带主题样式切换的tab选项卡代码
代码语言:html
所属分类:选项卡
代码描述:svg+css+js实现带主题样式切换的tab选项卡代码
代码标签: svg css js 主题 样式 切换 tab 选项卡 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
@import url("https://fonts.googleapis.com/css2?family=Barlow:wght@400;500;600&display=swap");
:root {
--ink-color-0: white;
--ink-color-5: #f6f6f7;
--ink-color-10: #e9e9ee;
--ink-color-15: #d8d8e0;
--ink-color-20: #ccccd7;
--ink-color-35: #a8a8b9;
--ink-color-50: #81819a;
--ink-color-60: #6e6e8a;
--ink-color-80: #484859;
--ink-color-100: #1d1d2d;
--ink-color-80-alpha: #1d1d2dcc;
--ink-lighter-color: white;
--ink-lighter-inactive-color: white;
--ink-darker-color: #a8a8b9;
--ink-darker-inactive-color: #d8d8e0;
}
[data-theme=dark] {
--ink-color-0: #1d1d2d;
--ink-color-5: #262635;
--ink-color-10: #313140;
--ink-color-15: #404050;
--ink-color-20: #49495c;
--ink-color-35: #676780;
--ink-color-50: #8b8Ba2;
--ink-color-60: #9e9eb2;
--ink-color-80: #cfcfd8;
--ink-color-100: white;
--ink-color-80-alpha: #ffffffcc;
--ink-lighter-color: #676780;
--ink-lighter-inactive-color: #404050;
--ink-darker-color: #1d1d2d;
--ink-darker-inactive-color: #1d1d2d;
}
*, *::before, *::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: barlow;
background: var(--ink-color-5);
color: var(--ink-color-100);
}
svg {
fill: currentcolor;
stroke: currentcolor;
overflow: visible;
display: block;
}
svg.defs, svg[data-prep=true] {
position: absolute;
height: 0;
width: 0;
}
symbol {
overflow: visible;
}
.action-set {
stroke-width: 5px;
}
.action-set.segmented {
display: flex;
position: relative;
border: 2px solid transparent;
border-radius: 5px;
transition: all 0.1s ease-in-out;
}
.action-set.segmented::before {
content: "";
position: absolute;
left: 0;
height: 100%;
aspect-ratio: 1;
border-radius: 3px;
background: var(--ink-color-5);
opacity: 0;
transition: all 0.25s ease-in-out, opacity 0.1s ease-in-out;
}
.action-set.segmented:hover {
background: var(--ink-color-0);
}
.action-set.segmented:hover::before {
opacity: 1;
}
.action-set.segmented input {
position: absolute;
transform: scale(0);
}
.action-set.segmented input:checked + label {
color: var(--ink-color-100);
}
.action-set.segmented input:checked + label svg {
fill: var(--ink-color-0);
}
.action-set.segmented input:not(:checked):hover + label {
color: var(--ink-color-80);
}
.action-set.segmented input:not(:checked) + label {
cursor: pointer;
}
.action-set.segmented input:not(:checked) + label:active svg {
stroke-width: 7px;
}
.action-set.segmented label {
display: grid;
justify-items: center;
padding: 5px;
border-radius: 3px;
color: var(--ink-color-35);
transition: all 0.1s ease-in-out;
}
.action-set.segmented label svg {
height: 18px;
aspect-ratio: 1;
fill: transparent;
}
.action-set.segmented:has(input:nth-of-type(2):checked)::before {
transform: translatex(100%);
}
[data-tooltip]:not([data-tooltip=""]) {
position: relative;
}
[data-tooltip]:not([data-tooltip=""])::after {
content: attr(data-tooltip);
position: absolute;
margin-block: 6px;
border-radius: 3px;
margin-inline: -8px;
height: 24px;
padding: 4px 7px;
z-index: 1;
font-size: 13.5px;
font-weight: 400;
line-height: 14.5px;
white-space: nowrap;
opacity: 0;
background-color: var(--ink-color-80-alpha);
color: var(--ink-color-0);
-webkit-text-fill-color: currentcolor;
backdrop-filter: blur(1.5px);
-webkit-backdrop-filter: blur(1.5px);
pointer-events: none;
transition: all 0.1s ease-in-out;
transform: scale(0);
}
[data-tooltip]:not([data-tooltip=""])::after {
top: auto;
bottom: auto;
left: auto;
right: auto;
top: 100%;
justify-self: center;
align-self: start;
transform-origin: top center;
}
[data-tooltip]:not([data-tooltip=""]):hover::after {
opacity: 1;
transition-delay: 0.25s;
transform: scale(1);
}
body {
font-family: barlow;
background: var(--ink-color-5);
color: var(--ink-color-100);
display: flex;
justify-content: center;
min-height: 100vh;
padding: 18px;
}
main {
position: relative;
flex: 1 0 339px;
max-width: 732px;
display: grid;
grid-template-rows: minmax(auto, 1fr) auto 5vh minmax(auto, 1fr);
grid-template-columns: auto;
grid-template-areas: "header" "content" "." "footer";
transition: all 0.25s ease-in-out;
}
main[data-width=fixed] {
max-width: 375px;
}
nav.tabs#demo {
grid-area: content;
}
nav.tabs {
position: relative;
display: flex;
justify-content: center;
margin: -6px -11px 0;
height: 41px;
font-size: 16.5px;
font-weight: 500;
line-height: 22px;
}
nav.tabs::before {
content: "";
position: absolute;
height: 1px;
left: 11px;
right: 11px;
bottom: 0px;
border-radius: 0.5px;
color: var(--ink-color-20);
background: currentcolor;
box-shadow: 0 0 0 0.25px currentcolor;
transform: translatey(-0.5px);
}
nav.tabs a {
--item-fg-color: var(--ink-color-35);
--item-bg-lighter-color: var(--ink-lighter-inactive-color);
--item-bg-darker-color: var(--ink-darker-inactive-color);
position: relative;
box-sizing: content-box;
display: grid;
height: 24px;
margin: 0 0 -6px;
border-block: 6px transparent solid;
border-inline: 11px transparent solid;
grid-template-columns: auto auto;
column-gap: 8px;
color: var(--item-fg-color);
-webkit-user-select: none;
user-select: none;
cursor: pointer;
transition: max-width 0.25s ease-in-out, color 0.1s ease-in-out;
}
nav.tabs a::before {
content: "";
position: absolute;
top: 34px;
left: 0;
right: 0;
height: 1px;
border-radius: 0.5px;
color: transparent;
background: currentcolor;
box-shadow: 0 0 0 0.25px currentcolor;
transform: scalex(0) translatey(-0.5px);
transition: all 0.1s ease-in-out;
pointer-events: none;
}
nav.tabs a::after {
display: none;
}
nav.tabs a:last-child::after {
top: auto;
bottom: auto;
left: auto;
right: auto;
top: 100%;
justify-self: end;
align-self: start;
transform-origin: top right;
}
nav.tabs a:first-child::after {
top: auto;
bottom: auto;
left: auto;
right: auto;
top: 100%;
justify-self: start;
align-self: start;
transform-origin: top left;
}
nav.tabs a.transition {
pointer-events: none;
overflow-x: hidden;
height: 36px;
}
nav.tabs a.transition:not(.active) {
-webkit-text-fill-color: currentcolor;
}
nav.tabs a.transition::after {
display: none;
}
nav.tabs a.active {
--item-fg-color: var(--ink-color-100);
--item-bg-lighter-color: var(--ink-lighter-color);
--item-bg-darker-color: var(--ink-darker-color);
pointer-events: none;
}
nav.tabs a.active::before {
color: var(--item-fg-color);
transform: scalex(1) translatey(-0.5px);
}
nav.tabs a.active::after {
display: none;
}
nav.tabs a:hover {
--item-fg-color: var(--ink-color-100);
--item-bg-lighter-color: var(--ink-lighter-color);
--item-bg-darker-color: var(--ink-darker-color);
}
nav.tabs a:active svg {
stroke-width: 4px;
}
nav.tabs a svg {
pointer-events: none;
height: 24px;
aspect-ratio: 1;
stroke: var(--item-fg-color);
color: var(--item-bg-lighter-color);
fill: var(--item-bg-darker-color);
transition: all 0.1s ease-in-out;
}
nav.tabs.compact a:not(.active):not(.transition) {
-webkit-text-fill-color: transparent;
grid-template-columns: 24px;
justify-items: center;
font-size: 1px;
line-height: 1em;
}
nav.tabs.compact a:not(.active):not(.transition)::after {
display: block;
}
nav.tabs:not(.compact) a:active {
-webkit-text-stroke: 0.035em currentcolor;
}
.action-set.segmented#theme {
justify-self: center;
align-self: start;
grid-area: header;
}
.action-set.segmented#width {
justify-self: center;
align-self: end;
grid-area: footer;
}
.action-set.segmented#width label::after {
top: auto;
bottom: auto;
left: auto;
right: auto;
bottom: 100%;
justify-self: center;
align-self: end;
transform-origin: bottom center;
}
</style>
</head>
<body data-theme="light">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 72 72" data-prep="true"><defs><symbol id="expedition" viewBox="0 0 72 72"><g data-layer="silhouette outline" style="fill: none; stroke-linejoin: round; stroke-linecap: round"><path d="m62.25,12.5c5.62,0,9.25,4.51,9.25,11.49,0,10.86-7.81,26.42-11.17,32.61-.07.13-.08.29-.02.44.06.14.18.25.33.29,1.17.32,2.24.75,3.18,1.29,2.34,1.35,3.68,3.31,3.68,5.38s-1.34,4.03-3.68,5.38c-2.11,1.22-4.89,1.89-7.82,1.89s-5.71-.67-7.82-1.89c-2.34-1.35-3.68-3.31-3.68-5.38s1.34-4.03,3.68-5.38c.08-.04.........完整代码请登录后点击上方下载按钮下载查看
















网友评论0