CSSはコーナーカット+ボーダー+投影+コンテンツ背景色のグラデーション効果を実現します

CSSはコーナーカット+ボーダー+投影+コンテンツ背景色のグラデーション効果を実現します

CSS を使用するだけで、コーナーカット + ボーダー + 投影 + コンテンツの背景色のグラデーションのすべての効果を実現できます。UI には背景の切り抜きがないため、理論的には CSS で実現できると思います。

最終的な効果を見てみましょう:

まず、コンテンツの紫と青のグラデーションについては触れないことにします。単純な四隅カット + 黒枠 + アウトライン投影ですが、実際には、コーナーカットを実現するためにインターネットのいたるところにある background: linear-gradient を使用し、1px 小さい疑似要素のレイヤーを使用して枠を実現し、投影を実現するために filter: box-shadow を使用するだけです。効果とコードは次のとおりです。

<html>
  <本文>
    <div class="box"></div>
  </本文>
  <スタイル>
    体 {
      背景色: #55486b;
    }
    。箱 {
      マージン: 20px;
      幅: 200ピクセル;
      高さ: 200px;
      zインデックス: 0;
      背景: 線形グラデーション(
            135度、
            透明計算(10px + 1 * 0.414px)、
            #18121a 0
          )
          左上、
        線形グラデーション(
            -135度、
            透明計算(10px + 1 * 0.414px)、
            #18121a 0
          )
          右上、
        線形グラデーション(-45度、透明計算(10px + 1 * 0.414px)、#18121a 0)
          右下、
        線形グラデーション(45度、透明計算(10px + 1 * 0.414px)、#18121a 0)
          左下;
      背景サイズ: 55% 50%;
      背景繰り返し: 繰り返しなし;
      位置: 相対的;
      フィルター: ドロップシャドウ(1px 1px 2px rgba(255, 255, 255, 0.3));
    }
    .box::after {
      zインデックス: 1;
      幅: calc(100% - 2 * 1px);
      高さ: calc(100% - 2 * 1px);
      コンテンツ: "";
      表示: ブロック;
      背景: linear-gradient(135度、透明10ピクセル、#3c2f4f 0) 左上、
        linear-gradient(-135度、透明10ピクセル、#3c2f4f 0) 右上、
        線形グラデーション(-45度、透明10ピクセル、#3c2f4f 0) 右下、
        linear-gradient(45度、透明10px、#3c2f4f 0) 左下;
      背景サイズ: 55% 51%;
      背景繰り返し: 繰り返しなし;
      位置: 絶対;
      左: 1px;
      上: 1px;
    }
  </スタイル>
</html>

これは、小さな透明色のセクションと大きな背景色のセクションをつなぎ合わせて、4 つの角を斜めにカットするのと同じです。白線のバグを回避するには、背景サイズを 50% より大きくする必要があります。境界線を実現するには、大きな div 内に小さな疑似要素の別のレイヤーを配置します。しかし、背景色が 4 色で構成されているため、コンテンツ全体にわたってグラデーションを実現することは不可能と思われます。

コンテンツ領域にグラデーションを実現するには、アイデアを変えることができます。疑似要素内の背景はグラデーションになっており、四隅は他の属性でカットされています。このように、他の実装方法もあります。まずは見てみましょう。

方法1: マスク

その他の点は変更されていません。疑似要素は、以前は外側のレイヤーと同じアイデアを使用してコーナーカットを実現していました。このアイデアでは、垂直グラデーションを実現できません(コーナーカットは、すでに斜めの透明な色グラデーションによって行われているため)。そのため、背景色をグラデーションとして直接記述し、マスク属性を使用して 4 つのコーナーを透明にします。

 .box::after {
      zインデックス: 1;
      幅: calc(100% - 2 * 1px);
      高さ: calc(100% - 2 * 1px);
      コンテンツ: "";
      表示: ブロック;
      背景: 線形グラデーション(180度, #3c2f4f, #2e2269);
      -webkit-mask: linear-gradient(135度、透明10ピクセル、#3c2f4f 0) 上
          左、
        linear-gradient(-135度、透明10ピクセル、#3c2f4f 0) 右上、
        線形グラデーション(-45度、透明10ピクセル、#3c2f4f 0) 右下、
        linear-gradient(45度、透明10px、#3c2f4f 0) 左下;
      -webkit-マスクサイズ: 55% 51%;
      -webkit-mask-repeat: 繰り返しなし;
      位置: 絶対;
      左: 1px;
      上: 1px;
    }

上記のコード内の疑似要素のスタイルを少し変更するだけで、実現できます。

方法2: クリップパス

clip-path 属性は、要素の周囲の境界を直接トリミングできます。これを上記の疑似要素に直接適用すると、影も覆われていることがわかります。そこで、考え方を変えて、疑似要素レイヤーを必要とせず、div を 4 つの角に直接トリミングしてみましょう。フィルター属性は重ね合わせることができるため、親要素にフィルターを追加すると、最初の n+1 個のドロップシャドウが重ね合わされて黒い境界線が形成され、最後のドロップシャドウで薄い白の投影が実現されます。効果は以下のとおりです。

<html>
  <本文>
    <div class="outer">
      <div class="box"></div>
    </div>
  </本文>
  <スタイル>
    体 {
      背景色: #55486b;
    }
    .外側{
      フィルター: ドロップシャドウ(0px 0px 1px #18121a) ドロップシャドウ(0px 0px 1px #18121a)
        ドロップシャドウ(0px 0px 1px #18121a)
        ドロップシャドウ(2px 1px 3px rgba(255, 255, 255, 0.3));
    }
    。箱 {
      マージン: 20px;
      幅: 200ピクセル;
      高さ: 200px;
      境界線の半径: 12px;
      位置: 相対的;
 
      背景: 線形グラデーション(180度, #3c2f4f, #2e2269);
      -webkit-クリップパス: ポリゴン(
        20ピクセル0%、
        計算(100% - 20px) 0%,
        100% 20ピクセル、
        100% 計算(100% - 20px)、
        計算(100% - 20px) 100%、
        20ピクセル100%、
        0 計算(100% - 20px)、
        0 20ピクセル
      );
      クリップパス: ポリゴン(
        20ピクセル0%、
        計算(100% - 20px) 0%,
        100% 20ピクセル、
        100% 計算(100% - 20px)、
        計算(100% - 20px) 100%、
        20ピクセル100%、
        0 計算(100% - 20px)、
        0 20ピクセル
      );
      位置: 相対的;
    }
  </スタイル>
</html>

もっと簡単で互換性のある方法があるかどうかはわかりません~~~~

CSSを使用してコーナーカット+ボーダー+投影+コンテンツの背景色のグラデーション効果を実現する方法についての記事はこれで終わりです。関連するCSS背景色グラデーションコンテンツの詳細については、123WORDPRESS.COMの以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMを応援してください。

<<:  MySQL における Datetime と Timestamp の使用の概要

>>:  Centos7 システムに k8s クラスターを展開するための詳細な紹介

推薦する

スライドボタン効果を実現するネイティブJS

Jsで作ったスライドボタンの具体的なコードは参考までに。具体的な内容は以下のとおりですまずエフェク...

Navicat 経由で MySQL にリモート接続する方法

Navicat を使用して IP 経由で直接接続すると、次のようなさまざまなエラーが報告されます: ...

localStorageの有効期限を設定するいくつかの方法

目次問題の説明1. 基本的な解決策2. 中間的な解決策3. 高度なソリューション4. ハードコアソリ...

Windows Server 2016 に Docker をインストールするプロセスと発生した問題

前提条件Windows Server でコンテナーを実行するには、Windows Server (半...

入力タイプの制限(複数の方法)

1. 入力・貼り付けできるのは中国語のみ<input onkeyup="value=...

MySQLパラダイムの使用に関する詳細な説明

1. パラダイムこのパラダイムの英語名は Normal Form であり、1970 年代にリレーショ...

Vueはツリー構造の追加、削除、変更、チェックのサンプルコードを実装します

実は多くの会社がユーザー権限ツリーに似た機能を持っています。最近、追加、削除、修正のツリー構造を書き...

IE イメージ ツールバーを無効にする

IE6 で試してみたところ、ツールバーが表示されました。オプションに「イメージ ツールバーを有効にす...

MySQL の JSON 挿入の問題

MySQL 5.7.8 以降では、JSON テキストでデータを効率的に取得できるネイティブ JSON...

JS を使用してデータ型を決定する 4 つの方法

目次序文1. 型2. インスタンス3. コンストラクター詳細: 4. 文字列要約する序文Javasc...

Linux システム ディレクトリ sys、tmp、usr、var の詳細な説明。

Linux 初心者から Linux マスターへの成長の道: Linux システム ディレクトリ s...

dockerでpdflatex環境を設定する方法

技術的背景Latex は文書作成、特に記事作成には欠かせないツールであり、必須のテキスト組版ツールで...

MySQL ストアド プロシージャの概念、原則、一般的な使用法の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャの概念、原則、および一般的な使用法につ...

jsを使用してスライダーをドラッグする効果を実現します

この記事では、jsでスライダーをドラッグする方法の具体的なコードを参考までに共有します。具体的な内容...

MySQLユーザーと権限管理の詳細な説明

この記事では、例を使用して MySQL ユーザーと権限の管理について説明します。ご参考までに、詳細は...