css+svg+js实现带动画效果星级评分选择代码

代码语言:html

所属分类:星级评分

代码描述:css+svg+js实现带动画效果星级评分选择代码,点击星星有动画效果。

代码标签: css svg js 动画 星级 评分 选择

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

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">

    <link rel='stylesheet' href='https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500&amp;display=swap'>

    <style>
        * {
          border: 0;
          box-sizing: border-box;
          margin: 0;
          padding: 0;
        }
        
        :root {
          --bg: #e3e4e8;
          --fg: #17181c;
          --primary: #255ff4;
          --yellow: #f4a825;
          --yellow-t: rgba(244, 168, 37, 0);
          --bezier: cubic-bezier(0.42,0,0.58,1);
          --trans-dur: 0.3s;
          font-size: calc(24px + (30 - 24) * (100vw - 320px) / (1280 - 320));
        }
        
        body {
          background-color: var(--bg);
          color: var(--fg);
          font: 1em/1.5 "DM Sans", sans-serif;
          display: flex;
          height: 100vh;
          transition: background-color var(--trans-dur), color var(--trans-dur);
        }
        
        .rating {
          margin: auto;
        }
        .rating__display {
          font-size: 1em;
          font-weight: 500;
          min-height: 1.25em;
          position: absolute;
          top: 100%;
          width: 100%;
          text-align: center;
        }
        .rating__stars {
          display: flex;
          padding-bottom: 0.375em;
          position: relative;
        }
        .rating__star {
          display: block;
          overflow: visible;
          pointer-events: none;
          width: 2em;
          height: 2em;
        }
        .rating__star-ring, .rating__star-fill, .rating__star-line, .rating__star-stroke {
          animation-duration: 1s;
          animation-timing-function: ease-in-out;
          animation-fill-mode: forwards;
        }
        .rating__star-ring, .rating__star-fill, .rating__star-line {
          stroke: var(--yellow);
        }
        .rating__star-fill {
          fill: var(--yellow);
          transform: scale(0);
          transition: fill var(--trans-dur) var(--bezier), transform var(--trans-dur) var(--bezier);
        }
        .rating__star-stroke {
          stroke: #c7cad1;
          transition: stroke var(--trans-dur);
        }
        .rating__label {
          cursor: pointer;
          padding: 0.125em;
        }
        .rating__label--delay1 .rating__star-ring, .rating__label--delay1 .rating__star-fill, .rating__label--delay1 .rating__star-line, .rating__label--delay1 .rating__star-stroke {
          animation-delay: 0.05s;
        }
        .rating__label--delay2 .rating__star-ring, .rating__label--delay2 .rating__star-fill, .rating__label--delay2 .rating__star-line, .rating__label--delay2 .rating__star-stroke {
          animation-delay: 0.1s;
        }
        .rating__label--delay3 .rating__star-ring, .rating__label--delay3 .rating__star-fill, .rating__label--delay3 .rating__star-line, .rating__label--delay3 .rating__star-stroke {
          animation-delay: 0.15s;
        }
        .rating__label--delay4 .rating__star-ring, .rating__label--delay4 .rating__star-fill, .rating__label--delay4 .rating__star-line, .rating__label--delay4 .rating__star-stroke {
          animation-delay: 0.2s;
        }
        .rating__input {
          -webkit-appearance: none;
          appearance: none;
        }
        .rating__input:hover ~ [data-rating]:not([hidden]) {
          display: none;
        }
        .rating__input-1:hover ~ [data-rating="1"][hidden], .rating__input-2:hover ~ [data-rating="2"][hidden], .rating__input-3:hover ~ [data-rating="3"][hidden], .rating__input-4:hover ~ [data-rating="4"][hidden], .rating__input-5:hover ~ [data-rating="5"][hidden], .rating__input:checked:hover ~ [data-rating]:not([hidden]) {
          display: block;
        }
        .rating__input-1:hover ~ .rating__label:first-of-type .rating__star-stroke, .rating__input-2:hover ~ .rating__label:nth-of-type(-n + 2) .rating__star-stroke, .rating__input-3:hover ~ .rating__label:nth-of-type(-n + 3) .rating__star-stroke, .rating__input-4:hover ~ .rating__label:nth-of-type(-n + 4) .rating__star-stroke, .rating__input-5:hover ~ .rating__label:nth-of-type(-n + 5) .rating__star-stroke {
          stroke: var(--yellow);
          transform: scale(1);
        }
        .rating__input-1:checked ~ .rating__label:first-of-type .rating__star-ring, .rating__input-2:checked ~ .rating__label:nth-of-type(-n + 2) .rating__star-ring, .rating__input-3:checked ~ .rating__label:nth-of-type(-n + 3) .rating__star-ring, .rating__input-4:checked ~ .rating__label:nth-of-type(-n + 4) .rating__star-ring, .rating__input-5:checked ~ .rating__label:nth-of-type(-n + 5) .rating__star-ring {
          animation-name: starRing;
        }
        .rating__input-1:checked ~ .rating__label:first-of-type .rating__star-stroke, .rating__input-2:checked ~ .rating__label:nth-of-type(-n + 2) .rating__star-stroke, .rating__input-3:checked ~ .rating__label:nth-of-type(-n + 3) .rating__star-stroke, .rating__input-4:checked ~ .rating__label:nth-of-type(-n + 4) .rating__star-stroke, .rating__input-5:checked ~ .rating__label:nth-of-type(-n + 5) .rating__star-stroke {
          animation-name: starStroke;
        }
        .rating__input-1:checked ~ .rating__label:first-of-type .rating__star-line, .rating__input-2:checked ~ .rating__label:nth-of-type(-n + 2) .rating__star-line, .rating__input-3:checked ~ .rating__label:nth-of-type(-n + 3) .rating__star-line, .rating__input-4:checked ~ .rating__label:nth-of-type(-n + 4) .rating__star-line, .rating__input-5:checked ~ .rating__label:nth-of-type(-n + 5) .rating__star-line {
          animation-name: starLine;
        }
        .rating__input-1:checked ~ .rating__label:first-of-type .rating__star-fill, .rating__input-2:checked ~ .rating__label:nth-of-type(-n + 2) .rating__star-fill, .rating__input-3:checked ~ .rating__label:nth-of-type(-n + 3) .rating__star-fill, .rating__input-4:checked ~ .rating__label:nth-of-type(-n + 4) .rating__star-fill, .rating__input-5:checked ~ .rating__label:nth-of-type(-n + 5) .rating__star-fill {
          animation-name: starFill;
        }
        .rating__input-1:not(:checked):hover ~ .rating__label:first-of-type .rating__star-fill, .rating__input-2:not(:checked):hover ~ .rating__label:nth-of-type(2) .rating__star-fill, .rating__input-3:not(:checked):hover ~ .rating__label:nth-of-type(3) .rating__star-fill, .rating__input-4:not(:checked):hover ~ .rating__label:nth-of-type(4) .rating__star-fill, .rating__input-5:not(:checked):hover ~ .rating__label:nth-of-type(5) .rating__star-fill {
          fill: var(--yellow-t);
        }
        .rating__sr {
          clip: rect(1px, 1px, 1px, 1px);
          overflow: hidden;
          position: absolute;
          width: 1px;
          height: 1px;
        }
        
        @media (prefers-color-scheme: dark) {
          :root {
            --bg: #17181c;
            --fg: #e3e4e8;
          }
        
          .rating {
            margin: auto;
          }
          .rating__star-stroke {
            stroke: #454954;
          }
        }
        @keyframes starRing {
          from, 20% {
            animation-timing-function: ease-in;
            opacity: 1;
            r: 8px;
            stroke-width: 1.........完整代码请登录后点击上方下载按钮下载查看

网友评论0