1. ホーム
  2. Web制作
  3. HTML/Xhtml

html+css 実装 サイバーパンク風ボタン

2022-01-21 11:16:56

最初に効果を見る

序文

このアイデアは、私がアップ所有者スティーブンのBサイトを見て、それは非常に良いと思うし、自分で1つを取得することです。(純粋なCSS)、以下は、詳細なプロセスです。最後に完全なコードがあります。

実装を行います。

1. まず、divタグをボタンとして定義し、クラス名を.anniuとします。

data a; 
      set b;
run; 

2. .anniu、アスペクト、フォントサイズなどの基本的なcssスタイル。

data aaa;
     do x=1,3,5;
     output;
end;
run;

font-family: 'Do Hyeon', sans-serif; はフォントを示しており、このURLにアクセスすれば、数種類のフォントがあります。
background: linear-gradient(30deg,transparent 10%,rgb(255, 136, 0) 10% 95%, rgb(0, 255, 149) 95%)です。
背景色を巧みに使って、切り取られた角の形を作る。この文は、30度の角度から始まるグラデーションカラーを示し、0〜10%はTRANSPARENTの透明色、10〜95%はORANGE、95〜100%はGREENを示しています。
box-shadow: 5px 0 0 rgb(0, 204, 255); 右側にある青い影を示す。
cursor: pointer; マウスが矢印から小さな手の形に変わることを示す。

3. .anniuと全く同じ外観のダブル擬似クラスを定義し、絶対位置指定によって.anniuをオーバーライドし、ステップ2のマージセレクタに以下のスタイルを追加し、すでに.anniuと同じ基本スタイルを定義しているようにします。

data bbb;
    set aaa;
    if _n_=1 then y=1;
    put _all_;
run;

log.
-----------------------------------------------
x=1 y=1 _ERROR_=0 _N_=1
x=3 y=. _ERROR_=0 _N_=2
x=5 y=. _ERROR_=0 _N_=3
-----------------------------------------------

text-shadow: -5px -2px 0 rgb(0, 183, 255)。
5px 2px 0 rgb(0, 255, 115) ; フォントの影を示し、左上に rgb(0, 183, 255) 色、右下に rgb(0, 255, 115) 色を付与します。
visibility: hidden; は、この擬似クラスを隠すことを意味します。

4. clip-path: inset() プロパティと transform: translate(); オフセットで領域を切り抜き、効果を一度表示させます。
/{br とは、まさに次のような意味です。
clip-path: inset() は、クロップで要素の表示可能な領域(矩形)を作り、その領域内の部分を表示し、領域外の部分を非表示にすることを意味します。
transform: translate()は移動することです。

例えば、二重の擬似クラスを切り抜く場合: clip-path: inset(20% -5px 60% 0); transform: translate(-5px, 0); は、次のようになります。


(20% -5px 60% 0); は、擬似クラスを上から下へ20%、右から左へ-5px(影を見せたいのでマイナス)、下から上へ60%、左から右へ0%に切り抜いて、真ん中の高さが20%残り、幅が5px多い長方形の部分だけが残り、残りの切り抜き角は隠れることになり、それを少し左へ移動するように translate() を設定して上記の効果を得ることができます。

次に、擬似クラスの効果をさらに3回クロップします。
clip-path: inset(50% -5px 30% 0); を取得します。


clip-path: inset(80% -5px 5% 0);を取得しました。


clip-path: inset(0 -5px 80% 0); get.

5. ステップ4のクロップ効果で、我々はアニメーションのアニメーションを設定することができ、マウスは擬似クラスの異なるクロップ効果とオフセット効果を表示し、クロップ位置とオフセット位置は自分の気持ちに従って設定することができます。

data ccc;
     set aaa;
     retain y;
  if _n_=1 then y=1;
  put _all_;
run;

log
------------------------------------------
x=1 y=1 _ERROR_=0 _N_=1
x=3 y=1 _ERROR_=0 _N_=2
x=5 y=1 _ERROR_=0 _N_=3
-----------------------------------------

 @keyframes san{
           0%{
            clip-path: inset(20% -5px 60% 0);
            transform: translate(-6px,5px);
            visibility: visible;
           }
           10%{
            clip-path: inset(50% -5px 30% 0);
            transform: translate(6px,-5px);
           }
           20%{
            clip-path: inset(20% -5px 60% 0);
            transform: translate(5px,0px);

            }
            30%{
                clip-path: inset(80% -5px 5% 0);
            transform: translate(-8px,5px);
            }
            40%{
                clip-path: inset(0 -5px 80% 0);
            transform: translate(-4px,-3px);

            }
            50%{
                clip-path: inset(50% -5px 30% 0);
            transform: translate(-6px,-5px);
            }
            60%{
                clip-path: inset(80% -5px 5% 0);
            transform: translate(-7px,5px);

            }
            70%{
                clip-path: inset(0 -5px 80% 0);
            transform: translate(3px,6px);
            }
            80%{
                clip-path: inset(50% -5px 30% 0);
            transform: translate(5px,5px);

            }
            90%{
                clip-path: inset(20% -5px 60% 0);
            transform: translate(6px,-5px);

            }
            100%{
                clip-path: inset(0 -5px 80% 0);
            transform: translate(1px,5px);

            }
       }


visibility: visible; 擬似クラスを可視化します。
animation-timing-function: steps(1, end); 1は0%から10%、10%から20%、...の間の1フレームだけを意味し、2と書くと2フレームになりますが、スタッタリングを良くするために1フレームだけが使われます。startの場合は、最初のフレームが最初のアニメーションの終了であることを意味します。

フルコードです。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link href="https://fonts.font.im/css?family=Do+Hyeon" rel="stylesheet">
    <style>
       *{
           margin: 0;
           padding: 0;
           box-sizing: border-box;
       }
       body{
           height: 100vh;
           display: flex;
           align-items: center;
           justify-content: center;
           background-color: rgb(243, 239, 8);
       }
       .anniu,.anniu::after{
           font-family: 'Do Hyeon', sans-serif;
           width: 260px;
           height: 80px;
           text-align: center;
           font-size: 22px;
           line-height: 80px;
           color: rgb(255, 251, 251);
           background: linear-gradient(30deg,transparent 10%,rgb(255, 136, 0) 10% 95%, rgb(0, 255, 149) 95%);
           box-shadow: 5px 0 0 rgb(0, 204, 255);
           cursor: pointer;
           position: relative;
       }
       .anniu::after{
           content: 'Aurora Borealis night';
           position: absolute;
           top: 0;
           left: 0;
           text-shadow: -5px -2px 0 rgb(0, 183, 255),
           5px 2px 0 rgb(0, 255, 115) ;
           visibility: hidden;
          
       } 
       .anniu:hover::after{
           animation: san 1s ; 
           animation-timing-function: steps(1, end);
       }

       /* 
       
       clip-path: inset(20% -5px 60% 0);
       clip-path: inset(50% -5px 30% 0);
       clip-path: inset(80% -5px 5% 0);
       clip-path: inset(0 -5px 80% 0);
       
       
        *       @keyframes san{
           0%{
            clip-path: inset(20% -5px 60% 0);
            transform: translate(-6px,5px);
            visibility: visible;
           }
           10%{
            clip-path: inset(50% -5px 30% 0);
            transform: translate(6px,-5px);
           }
           20%{
            clip-path: inset(20% -5px 60% 0);
            transform: translate(5px,0px);

            }
            30%{
                clip-path: inset(80% -5px 5% 0);
            transform: translate(-8px,5px);
            }
            40%{
                clip-path: inset(0 -5px 80% 0);
            transfo