blog

ピュアなcss3を簡単に使って、ちょっと面白いフォールト・アートを作る(React/Vue強化コンポーネント版あり)

はじめに\nボディ\n次に、純粋なCss3を使って「断層アニメーション」を実現する方法を説明します。この効果はReact/vueコンポーネントにカプセル化されているので、学習して使用することができます...

May 28, 2020 · 5 min. read
シェア

はじめに

テキスト

次に、純粋なCss3を使って「断層アニメーション」を実現する方法を紹介します。この効果はReact/vueコンポーネントにカプセル化されており、学習して使用することができます。 その効果を見てみましょう。

もちろん、次の記事では他のスタイルの「障害アニメーション」を紹介します。

実装の原理

この効果の実装は、Css3の新機能であるmix-blend-modeとbackground-blend-modeに依存しています。

mix-blend-mode

このプロパティは、要素の内容が、要素の直接の親の内容や要素の背景とどのようにブレンドされるべきかを記述します。 値は以下のように記述します。

  • mix-blend-mode: normal; mix-blend-mode: multiply; mix-blend-mode: multiply
  • mix-blend-mode: multiply; mix-blend-mode: multiply; mix-blend-mode: screen; mix-blend-mode: screen; mix-blend-mode: screen
  • mix-blend-mode: screen; mix-blend-mode: overlay
  • mix-blend-mode: overlay; mix-blend-mode: overlay
  • mix-blend-mode: screen; mix-blend-mode: overlay; mix-blend-mode: darken; mix-blend-mode: lighten; mix-blend-mode: lighten
  • mix-blend-mode: color-dodge; mix-blend-mode: color-dodge; mix-blend-mode: color-dodge
  • mix-blend-mode: color-dodge; mix-blend-mode: color-burn; mix-blend-mode: hard-link; mix-blend-mode: hard-link
  • mix-blend-mode: hard-light; mix-blend-mode: hard-light
  • mix-blend-mode: soft-light; mix-blend-mode: soft-light; mix-blend-mode: soft-light
  • mix-blend-mode: difference;
  • mix-blend-mode: difference; mix-blend-mode: exclusion; mix-blend-mode: hue; mix-blend-mode: hue
  • mix-blend-mode: ソフトライト; mix-blend-mode: 差分; mix-blend-mode: 除外; mix-blend-mode: 色相; mix-blend-mode: 彩度; mix-blend-mode: 色彩
  • mix-blend-mode: unset; mix-blend-mode: unset; mix-blend-mode: unset; mix-blend-mode: unset
これはPSのレイヤーオーバーレイモードのようなものです。もう一つのcssプロパティbackground-blend-modeはmix-blend-modeと似ていますが、これは主に背景の混合モードのためのもので、ここでは主に断層効果を得るためにmix-blend-modeを使用します。

アニメーションの構造解析

上の図から、"断層アニメーション "は4つの要素を含んでいることを分析することができます: 背景、フロントテキスト、バックテキスト、断層線。 その内訳は以下の通りです。
上記の分析を通じて、基本的なdom構造を書くことができます。経験豊富な友人は、擬似要素を使って前面/背面テキスト/断層線を実現することを考えるかもしれませんが、この方法はdom構造を大幅に節約できますが、パッケージの柔軟性が低下するという欠点があります。
<div className="blink-item">
 <div className="text text-front">興味深いフロントエンド</div>
 <div className="text text-back">興味深いフロントエンド</div>
</div>

ここでは、擬似要素を使って断層を実現しています。 だから、アニメーションの冒頭の記事では実装が非常に簡単になり、単にキャンバスの背景を設定し、テキストオーバーレイの内容と混合し、最終的にテキストと断層線のアニメーションを設計することができます。 それでは、実装手順を見てみましょう。

ソリューションの実装

まず第一に、テキスト、断層線とキャンバスの背景を混在させる効果を達成するために、次のようなCSSコード。

.blink {
 // ...
 background-color: #000;
 .blink-item {
 &::after {
 content: '';
 position: absolute;
 z-index: 3;
 left: 0;
 top: 30px;
 width: 100%;
 height: 4px;
 background-color: #000;
 }
 .text-front {
 color: #74fcfd;
 }
 .text-back {
 position: absolute;
 transform: translate(-5px, -100%);
 color: #ea3448;
 mix-blend-mode: lighten;
 }
 }
}

上記のコードから、我々はCSSスタイルのバックテキストでミックスブレンドモードを使用し、明るく設定されていることがわかりますが、もちろん、値の他のモードに設定することもできます。 次に、断層のテキストアニメーションと断層線のアニメーションを実現するために、この作品はまた、CSS3 @キーフレームのアニメーションを使用することができ、非常に簡単ですが、コードは次のとおりです。

@keyframes shakeFront {
 0% {
 transform: translate(1px, 1px);
 }
 20% {
 transform: translate(-1px, 0);
 }
 60% {
 transform: translate(-1px, 0);
 }
 100% {
 transform: translate(1px, -1px);
 }
}
@keyframes shake {
 0% {
 transform: translate(-5px, -100%);
 }
 20% {
 transform: translate(-3px, -100%);
 }
 60% {
 transform: translate(1px, calc(-100% - 1px));
 }
 100% {
 transform: translate(2px, calc(-100% + 1px));
 }
}
@keyframes lineShake {
 0% {
 top: 10%;
 }
 20% {
 top: 60%;
 }
 40% {
 top: 35%;
 }
 60% {
 top: 2%;
 }
 80% {
 top: 80%;
 }
 100% {
 top: 99%;
 }
}

コードは次のとおりです。shakeFrontとshakeはそれぞれ後ろと前のテキストのアニメーション、lineShakeは断層線のアニメーションです。 最後に、css3animationの助けを借りて、アニメーションをループさせるだけです。

react/vueコンポーネントへのラップ

より自由度の高い断層アニメーションを実現し、使用するエンジニアのコストを削減するために、作者はreactコンポーネントにカプセル化されます、 vueコンポーネントのカプセル化のアイデアは似ているので、興味のある友人は自分で試すことができます。 ここでは、障害アニメーションのコンポーネント設計モデルを分解します。

コンポーネントの設計思考は、多くの場合、ユーザーがより大きな自由を持つことができるようにするために、ゲームの設計と使いやすさの複雑さであり、多くの場合、補正するためにコンポーネントの内部の複雑さを増加させることによって。 実装後の結果を見てみましょう。

上記のカスタム構成を実現するためには、さらに既存のコードをカプセル化する必要があり、そのような達成するために擬似要素を使用して断層線ので、どのように擬似要素の背景色も変更に応答することを保証するために背景色を切り替えた後? ここでは、背景の継承を使用しています。

.blink {
 .blink-item {
 background-color: inherit;
 &::after {
 // ...
 background-color: inherit;
 animation: lineShake .5s infinite;
 }

この方法では、唯一の.blinkコンテナで動的に背景色を渡す必要があり、あなたが望む効果を達成することができます。 Reactコンポーネントのコードは以下の通りです。

import React from 'react'
import './index.less'
export default function Blink(props) {
 const { 
 text = '興味深いフロントエンド',
 fontSize = '48px',
 themeColor = '#000',
 textColor = ['#74fcfd', '#ea3448']
 } = props
 return (
 <div className='blink' style={{backgroundColor: themeColor}}>
 <div className="blink-item" data-text={text} style={{fontSize: fontSize}}>
 <div className="text text-front" style={{color: textColor[0]}}>{text}</div>
 <div className="text text-back" style={{color: textColor[1]}}>{text}</div>
 </div>
 </div> 
 )
}

どうです、とてもシンプルでしょう? 私はgithubにコンポーネントコードをアップロードしているので、インストールして使用したり、さらにそのベース上で改善したり、断層アニメーションの背景イメージに基づくなど、比較的安定してサポートするために、モダンブラウザで上記のcss3の機能は、H5の開発を行うことを試みることができます。

最後に

Read next

ABAPオブジェクトにタグを付ける

タグは情報管理ソフトウェアにおいてほとんど必須の機能であり、ユーザが必要なデータをより迅速に検索したり、大量のデータをより効率的に管理したりできるように設計されています。 現在では、タグ機能はABAPツールでもサポートされており、様々なクラウドノートを使用するように、ABAPオブジェクトの一般的に使用されるタイプにカスタムタグを追加することができます。このタグ割り当て機能...

May 28, 2020 · 10 min read