js实现一个手风琴式的美食菜单点餐效果代码

代码语言:html

所属分类:菜单导航

代码描述:js实现一个手风琴式的美食菜单点餐效果代码

代码标签: 手风琴 美食 单点 效果

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en">

<head>

   
<meta charset="UTF-8">




   
<style>
@charset "UTF-8";
@property --dt0 {
       
syntax: "<time>";
       
initial-value: 0s;
       
inherits: true;
   
}
@property --dt1 {
       
syntax: "<time>";
       
initial-value: 0s;
       
inherits: true;
   
}
       
* {
           
margin: 0;
           
padding: 0;
           
list-style: none;
           
color: inherit;
           
font: inherit;
       
}

        html
{
           
font: var(--html-s,1.25em)/1.5 ubuntu, trebuchet ms, sans-serif;
       
}
@media (max-width: 360px) {
            html
{
               
--html-s: 1em;
           
}
       
}
@media (max-width: 240px) {
            html
{
               
--html-s: .75em;
           
}
       
}

        body
, header, main {
           
display: grid;
       
}

        body
{
           
--not-exp: calc(1 - var(--exp));
           
--i: var(--narr,1);
           
--not-i: calc(1 - var(--i));
           
--head-h: calc(2*clamp(1em, 8vw, 2em) + 2*Min(0.5rem, 5vmin));
           
overflow-x: hidden;
           
overflow-y: var(--narr,scroll);
           
min-height: 100vh;
           
background: #262626;
           
scrollbar-width: thin;
           
scrollbar-color: drimgreyrgba(0, 0, 0, 0.1);
       
}
       
body::-webkit-scrollbar {
           
z-index: 3;
           
width: 8px;
           
background: rgba(0, 0, 0, 0.1);
       
}
       
body::-webkit-scrollbar-track {
           
background: rgba(0, 0, 0, 0.1);
       
}
       
body::-webkit-scrollbar-thumb {
           
background: dimgrey;
       
}
@media (min-width: 740px), (orientation: landscape) {
            body
{
               
--narr: 0;
           
}
       
}

        header
, main, article {
           
grid-area: 1/1;
       
}

        header
{
           
z-index: 2;
           
pointer-events: none;
       
}

        h1
, a {
           
pointer-events: auto;
       
}

        h1
{
           
box-sizing: border-box;
           
position: fixed;
           
z-index: 2;
           
padding: Min(0.5rem, 5vmin);
           
width: calc(var(--i)*100vh + var(--not-i)*100%);
           
transform-origin: 0 0;
           
transform: rotate(calc(var(--i)*-90deg)) translatex(calc(var(--i)*-100%));
           
color: gainsboro;
           
background: dimgray;
           
font-family: z003, segoe script,cursive;
           
font-size: clamp(1em, 8vw, 2em);
           
line-height: 2;
       
}

        nav
, main {
           
margin: calc(var(--not-i)*var(--head-h))0 0 calc(var(--i)*var(--head-h));
       
}

        nav
{
           
display: flex;
           
flex-direction: var(--narr,column);
           
max-width: 100%;
       
}

       
.i {
           
--abs: Max(var(--k) - var(--idx), var(--idx) - var(--k));
           
--not-sel: Min(1, var(--abs));
           
--sel: calc(1 - var(--not-sel));
       
}

        a
.i {
           
flex: 1;
           
place-content: center;
           
overflow: hidden;
           
min-width: calc(var(--not-i)*(var(--not-sel)*2em + var(--sel)*15em));
           
min-height: calc(var(--i)*(var(--not-sel)*2em + var(--sel)*15em));
           
transform: translate(calc(var(--i)*var(--exp)*-100%), calc(var(--not-i)*var(--exp)*-100%));
           
background: linear-gradient(-45deg, transparent calc(50% - 1.5em), rgba(0, 0, 0, var(--sel)) 0 calc(50% + 1.5em), transparent 0), var(--img) 50%/cover;
           
background-blend-mode: color;
           
text-decoration: none;
           
filter: Saturate(var(--sel));
           
--dt0: calc(var(--abs)*0.05s);
           
transition: min-width 0.3s ease-out calc(var(--not-sel)*0.3s), min-height 0.3s ease-out calc(var(--not-sel)*0.3s), transform 0.8s ease-in-out calc(var(--dt0) + var(--not-exp)*0.7s), filter 0.3s ease-out;
           
pointer-events: auto;
       
}

        span
{
           
position: absolute;
           
top: 50%;
           
left: 50%;
           
width: 25em;
           
transform: translate(-50%, -50%) rotate(-45deg);
           
opacity: var(--sel);
           
background: rgba(0, 0, 0, 0.1);
           
color: #fff;
           
font-weight: 700;
           
line-height: 3;
           
text-align: center;
           
text-shadow: 1px 1px #000;
           
text-transform: uppercase;
           
white-space: nowrap;
           
transition: opacity 0.3s ease-out;
           
pointer-events: none;
       
}

        main
{
           
--max: Max(var(--k), var(--n) - var(--k) -1);
           
overflow: hidden;
       
}

        article
{
           
z-index: var(--sel);
           
margin: 5vmin;
           
padding: 5vmin;
           
border-radius: 7px;
           
transform: perspective(75em) rotatey(calc(var(--not-exp)*90deg));
           
opacity: var(--sel);
           
background: var(--img)50%/cover silver;
           
background-blend-mode: screen;
           
--dt1: calc(var(--max)*0.05s);
           
transition: transform 0.7s calc(var(--exp)*(var(--dt1) + 0.8s)) cubic-bezier(var(--not-exp), 0, var(--not-exp), 1);
       
}

        p
{
           
margin: 0.5em 0;
           
min-height: 2em;
           
background: dimgrey;
       
}

       
.b {
           
display: inline-block;
           
padding: 0 0.375em;
           
border-radius: 5px;
           
background: crimson;
           
color: whitesmoke;
           
text-decoration: none;
       
}
       
.b::before {
           
display: inline-block;
           
margin-right: 0.25em;
           
content: "«";
       
}
   
</style>



</head>


<body style="--n: 12; --k: -1; --exp: 0">
   
<style>
        .i:nth-child(1) {
            --idx: 0;
            --img: url('//repo.bfw.wiki/bfwrepo/images/intro/ex_1_bg_eggnog_ice_cream.jpg')
        }

        .i:nth-child(2) {
    .........完整代码请登录后点击上方下载按钮下载查看

网友评论0