CSS3 でのシンプルな LED デジタル時計の実装方法

CSS3 でのシンプルな LED デジタル時計の実装方法

これは多くの人がやったことがあるはずです。ただうずうずして書きたかったので、時間をかけていじってダークモード処理を追加しました。

まず第一に、これには技術的なスキルはまったく必要なく、少しの忍耐力だけが必要であることは明らかです。

LED の数字は、左側に 2 行、右側に 2 行、中央に 3 行の合計 7 行で構成されています。そこで、判別しやすくするために、デモを書くときはこのように書きました。

<div class="デジタル デジタル_0">
  <span class="c1"></span>
  <span class="c2"></span>
  <span class="c3"></span>
  <span class="l1"></span>
  <span class="l2"></span>
  <span class="r1"></span>
  <span class="r2"></span>
</div>

digital_0 の機能についてですが、実は非常に単純です。0 から 9 までの 10 個の数字の変化を制御するために存在します。

.デジタル_1 .c1,
.デジタル_1 .c2,
.デジタル_1 .c3,
.digital_1 .l1,
.digital_1 .l2,
.デジタル_2 .l1,
.digital_2 .r2,
.digital_3 .l1,
.digital_3 .l2,
.デジタル_4 .c1,
.デジタル_4 .c3,
.digital_4 .l2,
.digital_5 .l2,
.digital_5 .r1,
.digital_6 .r1,
.digital_7 .c2,
.digital_7 .c3,
.digital_7 .l1,
.digital_7 .l2,
.digital_9 .l2,
.デジタル_0 .c2 {
  アニメーション: changeDigital 200ms 0ms 1 前方へのイーズイン;
}

ここではアニメーションが使用されており、その持続時間は 200 ミリ秒で、主に特定の部分が消えるときに遷移効果を作成するために使用されます。

@keyframes 変更デジタル {
  形状 {
    不透明度: 1;
  }
  に {
    不透明度: 0;
  }
}

残るは、7 本の線の位置を調整して制御しながら、各線に角度とわずかに丸みがあることも考慮するという、最も忍耐力を要する部分です。丸みを持たせたい場合は、border-radius を使用します。ベベルについては、CSS で境界線付きの三角形を描く方法を知っていれば、このベベルを作成する方法も知っているはずです。

三角形を描画する場合、幅と高さは両方とも 0 で、border-width を使用して最終的な三角形のサイズを制御します。線の位置に応じて幅と高さに特定の値を選択すると、ベベル効果が得られますか?

次に、中央の水平線、つまり .c2 要素に注目する必要があります。線の両側に三角形が突き出ています。これを実現するにはさまざまな方法があります。ここでは、:after と :before を重ねて使用することにしました。

最後のステップは、各要素の位置を調整し、サイズと位置を制御することです。ポジショニングを使用して操作するため、調整は非常に簡単です。

.デジタルスパン{
  位置: 絶対;
  境界線の半径: 50vh;
  ボックスのサイズ: 境界線ボックス;
}
.デジタル .c1,
.デジタル .c2,
.デジタル .c3 {
  高さ: 0;
  幅: 26px;
  border-left: 4px 透明の実線;
  border-right: 4px 透明の実線;
}
.デジタル.c1 {
  上: 0;
  左: 0;
  border-top: 4px 実線 currentColor;
}
.デジタル .c2 {
  上位: 50%;
  左: 0;
  上マージン: -2px;
}
.デジタル .c2:前、
.デジタル .c2:after {
  コンテンツ: "";
  高さ: 0;
  幅: 24px;
  border-left: 2px 透明の実線;
  border-right: 2px 透明の実線;
  ボックスのサイズ: 境界線ボックス;
}
.デジタル .c2:before {
  位置: 絶対;
  上: 0;
  左: -3px;
  border-bottom: 2px 実線 currentColor;
}
.デジタル .c2:after {
  位置: 絶対;
  上: 2px;
  左: -3px;
  border-top: 2px 実線 currentColor;
}
.デジタル .c3 {
  下部: 0;
  左: 0;
  border-bottom: 4px 実線 currentColor;
}
.デジタル .l1,
.デジタル .l2 {
  高さ: 21px;
  幅: 0;
  左: 0;
  border-top: 2px 透明の実線;
  border-bottom: 2px 透明の実線;
  左境界線: 4px 実線 currentColor;
}
.デジタル .l1 {
  上: 1px;
  上境界線の幅: 4px;
}
.デジタル .l2 {
  上: 24px;
  境界線の下の幅: 4px;
}
.デジタル .r1,
.デジタル .r2 {
  高さ: 21px;
  幅: 0;
  右: 0;
  border-top: 2px 透明の実線;
  border-bottom: 2px 透明の実線;
  右境界線: 4px 実線 currentColor;
}
.デジタル .r1 {
  上: 1px;
  上境界線の幅: 4px;
}
.デジタル .r2 {
  上: 24px;
  境界線の下の幅: 4px;
}

それが完了したら、残っているのは外側のレイヤーを少し傾けるなどして最適化するだけです。

.デジタル{
  位置: 相対的;
  幅: 26px;
  高さ: 46px;
  左マージン: 10px;
  変換: skew(-6deg);
}

ああ、ここで境界線の色に currentColor を使用することを選択したことを言い忘れていました。そのため、ダーク モードに切り替えるときに、本文のテキストの色と背景色のみを変更する必要があります。 currentColor は使用するテキストの色を選択します。

スタイルが処理されたら、次のステップは時計を表示するための JS を追加することです。これについては特に言うことはありません。2 つの数字を異なる div に配置するだけです。ここで、1 の位を取るときは、余りを取得するために m%10 を使用します。10 の位を取るときは、parseInt(m/10) を使用して丸めます。取り出した後は、対応する div に配置するだけです。

デモアドレス: http://lab.tianyizone.com/demo/digital_number.html

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

<<:  HTML に埋め込まれた MP4 形式のビデオが再生できないのはなぜですか?

>>:  JavaScriptの強力な演算子をいくつか見てみましょう

推薦する

Linux NFSメカニズムの動作原理と例の分析

NFS とは何ですか?ネットワークファイルシステムネットワーク上でファイルを保存および整理するための...

Linux のバックグラウンドで実行するいくつかの方法 (まとめ)

1. ノーフープハングアップ信号を無視してプログラムを実行する追加メモnohup コマンドは、ハン...

学生情報管理システムを実装するためのJavaScript+HTML

目次1. はじめに2. レンダリング3. コード4. 学生情報管理システムのメインインターフェース1...

vue+node+socket ioは複数人のインタラクションを実現し、プロセス全体を解放します

1. 背景1. フロントエンドはvue + vuex + socket.io-clientを使用しま...

Vueはボタン切り替え画像を実装します

この記事では、ボタン切り替え画像を実現するためのVueの具体的なコードを例として紹介します。具体的な...

Vuexの補助関数の使い方

目次マップ状態マップゲッターマップミューテーションマップアクション複数のモジュールマップ状態 ...

JS 関数のアンチシェイクと関数スロットリングを理解する方法

目次概要1. 関数デバウンス2. 機能スロットリング(スロットル)概要関数アンチシェイクと関数スロッ...

さまざまなSQL結合を簡単に学ぶ

SQL JOIN 句は、テーブル間の共通フィールドに基づいて 2 つ以上のテーブルの行を結合するため...

Web プロジェクト開発における 2 つのトークン理由とサンプル コードの分析

目次質問:プロジェクトには 2 つのトークンがあり、1 つは有効期間が 2 時間 (ショート トーク...

JavaScript はパスワードボックスの入力検証を実装します

サーバーの負荷を軽減するために、ユーザーが入力するときにフロントエンドページで簡単な検証を実行する必...

Linux シェル環境での Zabbix API の使用

Linux シェル環境で直接呼び出すことができます。公式 Web サイトによると、Zabbix のデ...

クラウド決済を実装するWeChatミニプログラムについて

目次1. はじめに2. 思考分析3. クラウド決済のケーススタディ1. クラウド機能1-1. 認証不...

JavaScriptエンジンV8の実行プロセスの詳細な説明

目次1. V8ソース2. V8サービスターゲット3. V8の初期アーキテクチャIV. V8の初期アー...

CSS はスクロールバーを非表示にしてコンテンツをスクロールする効果を実現します (3 つの方法)

フロントエンド開発では、スクロールバーを非表示にしながらスクロールをサポートしなければならないという...

ポップアップはすべて不正なものではありません。ウェブサイトのポップアップをデザインするためのヒント

ポップアップニュースは国内のインターネットサービスでは一般的であり、リアルタイムプッシュ方式はウェブ...