CSS3変数について 変数を宣言するときは、変数名の前に 2 つのハイフン ( 体{ --色:赤; } 上記のコードでは、カスタム変数が body セレクターで宣言されています: デフォルトの意味がない点を除けば、色などの正式な属性と違いはありません。したがって、CSS 変数は「CSS カスタム プロパティ」とも呼ばれます。これは、変数とカスタム CSS プロパティが実際には同じものであるためです。 もちろん、ネット上には似たような紹介がたくさんあるので、それはさておき、本題に入りましょう!
原因 - 「タブ」のリファクタリング 私がコミュニティ Web サイト向けに実施したプロジェクトに、プロモーション用の「タブ」コンポーネントがあったことを覚えています。 <div class="main-left-bottoms"> <div id="タブ"> <ul> <li class="on"><a name="anchor">クラブ活動</a></li> <li>コミュニティの方向性</li> <li>社長メッセージ</li> <li>人材戦略</li> </ul> <div> <p>YouCクラブは設立以来、クラブメンバーの課外活動を充実させ、仕事と休息を組み合わせるという目標を達成するために、数多くの活動を行ってきました。これは確かに効果的であることが事実によって証明されています。 <br> 例えば、 <オル> <li>母の日に、私たちは<a href="http://www.50004.com/play52/fabebbfffcfa/XMzYwMzUwNjM4MA==/">を開催しました。 「親孝行・母の日」イベント</a>(動画の読み込みが少し遅い場合があります)を開催し、大盛況でした。</li> <li>冬至の時期に、学校と寮の合同で<a href="http://sfxy.nyist.edu.cn/info/1068/3802.htm">「冬至団子作り」というイベントを開催しました。みんなとても楽しんでいました。</li> <li>また、余暇には、病院主催の「老人ホーム訪問」活動にも積極的に参加し、素晴らしい経験をしました。</li> </ol> </div> <div class="hide"> <p> YouC Studio は 2009 年に設立され、<span id="fffffyear"></span> 年の歴史を誇ります。 <br> この数年間の開発を経て、コミュニティはPHP、Java、JavaWebなど、さまざまな分野で才能を輩出してきました。 ビッグデータなど。 。 。 <font color="red">このクラブの現在の主流の学習方向は、JavaWeb、つまりバックエンドの実装であり、Webサイト開発に重点を置いています。 </font> <br> コミュニティは、対応する交換活動を通じてプロジェクトの開発を完了することがよくあります。 メンバーは知識を高めるために、時々競技会に参加し、良い成績を収めています。 <br><br> <font color="#ff7f50"> 具体的な個人プランについては、右のQRコードをスキャンして先輩に聞いてください! </font></p> </div> <スクリプト> document.getElementById('fffffyear').innerHTML = (new Date().getFullYear() - 2009) + ''; </スクリプト> <div class="hide"> <br><br> <p>人々は絶えず参加したり去ったりしていますが、YouC は今もここにいて、皆さんを待っています。そして、YouC の未来はさらに明るいものになると私は固く信じています。 </p> <p>——社長の願い</p> </div> <div class="hide"> <br> <p>ぜひ、YouC に参加してください。ここでは、素晴らしい知識体験ができます。想像力豊かな先輩たちが、知識の探求、スキルの習得、実践的なプロジェクトの実行、面接の準備などを指導します。 </font><br> ここでは、想像を超える幸せが見つかります! ! ! </p> </div> </div> </div> .main-left-bottoms{幅: 100%;最小高さ: 280px;上マージン: 10px;} .main-left-bottoms h1{color: orangered;font-style: italic;} .main-left-bottoms #タブ{幅: 99%;パディング:5px;最小高さ: 280px;} .main-left-bottoms #tabs ul{list-style:none;display:block;min-height:30px;line-height:30px;border-bottom:2px red solid;} .main-left-bottoms #tabs ul li{cursor:pointer;float:left;list-style:none;height:28px;line-height:28px;margin:0 3px;border:2px groove orangered;border-bottom:none;display:inline-block;width:65px;text-align:center;font-weight: bold;color: black;padding: 0 10px;} .main-left-bottoms #タブ ul li.on{border-bottom:2px solid skyblue;} .main-left-bottoms #タブ div{min-height: 199px;line-height:25px;border-top:none;padding:0.3125em;overflow:hidden;} #タブ div p{フォントサイズ: 0.838rem;} #タブ div ol li{フォントサイズ: 0.875rem;マージン上部: 5px;} #tabs div ol li a{color: lightcoral;text-decoration: none;} #タブ div ol li a:hover{color: orange;} .main-left-bottoms .hide{display:none;} 次に、JS を使用して、div クリック要素の外側の (同じレベルの) 要素にクラス名 hide を追加します。非常に簡単です。 その後、もっと学び、「ユーザー エクスペリエンス」にますます注意を払うようになると、ブラウザーが、ユーザーがページ、タブ、リストのいずれであっても、終了する前に閲覧した場所を「記憶」できたらどうなるだろうかと考えました。それは素晴らしいですね。 (これについては後ほど特別記事で取り上げる予定なので、ここで言及するのは少々やりすぎでしょう…) その後、CSS3 で「カスタム変数」属性が導入されました。たまたま公式サイトのページが Vue で再構築されたので、この部分を CSS3 変数を使ってやり直すことを考えました。 タブ切り替えを実現するCSS3変数 上記の一見スムーズに見えるタブ切り替え効果は、実は非常にシンプルです (vue+scss を使用して完成)。
<div class="タブナビゲーションバー"> <ナビ> <a v-for="(v, i) in list" :key="v" :class="{ active: index === i }" @click="select(i)">タイトル{{i + 1}}</a> </nav> <div> <ul ref="タブ" :style="`--tab-count: ${list.length}`"> <li v-for="(v, i) in list" :key="v" :style="`--bg-color: ${v}`">私はコンテンツ {{i + 1} です}</li> </ul> </div> </div> .タブナビゲーションバー{ ディスプレイ: フレックス; オーバーフロー: 非表示; 境界線の半径: 10px; 幅: 300ピクセル; 高さ: 200px; ナビゲーション{ ディスプレイ: フレックス; 高さ: 40px; 背景色: #f0f0f0; 行の高さ: 40px; テキスト配置: 中央; { フレックス: 1; カーソル: ポインタ; 遷移: すべて 300 ミリ秒; &。アクティブ { 背景色: #3c9; 色: #fff; } } } div { フレックス: 1; ul { --タブインデックス: 0; --tab-width: calc(var(--tab-count) * 100%); --tab-move: calc(var(--tab-index) / var(--tab-count) * -100%); ディスプレイ: フレックス; flex-wrap: nowrap; 幅: var(--tab-width); 高さ: 100%; 変換: translate3d(var(--tab-move), 0, 0); 遷移: すべて 300 ミリ秒; } li { ディスプレイ: フレックス; コンテンツの中央揃え: 中央; アイテムの位置を中央揃えにします。 フレックス: 1; 背景色: var(--bg-color); フォントの太さ: 太字; フォントサイズ: 20px; 色: #fff; } } } エクスポートデフォルト{ データ() { 戻る { インデックス: 0, リスト: ["#09f", "#f90", "#66f", "#f66"] }; }, メソッド: { 選択(i) { this.index = i; this.$refs.tabs.style.setProperty("--tab-index", i); } } }; さらに、タブの背景色を表すために 上記のケースでは、あなたを満足させるには明らかに不十分だと思いますので、 CSS3 カスタム変数を使用して「代替」読み込みバーを実現する <ul class="ストリップロード"> <li style="--line-index: 0"></li> <li style="--line-index: 1"></li> <li style="--line-index: 2"></li> <li style="--line-index: 3"></li> <li style="--line-index: 4"></li> <li style="--line-index: 5"></li> </ul> .ストリップロード{ ディスプレイ: フレックス; コンテンツの中央揃え: 中央; アイテムの位置を中央揃えにします。 幅: 200ピクセル; 高さ: 200px; li { --time: calc(var(--line-index) * 200ms); 境界線の半径: 3px; 幅: 6px; 高さ: 30px; 背景色: #f66; アニメーション: beat 1.5s easy-in-out var(--time) infinite; & + li { 左マージン: 5px; } } } @keyframes ビート { 0%、 100% { 変換: scaleY(1); } 50% { 変換: scaleY(.5); } } クールなマウストラッキング効果 偶然にも、私がこの記事を書く前に、コミュニティのバックエンドの上級者が、元の送信ボタンの代わりにクールなボタンを作ることを提案しました。 変更後の効果はおそらく次のようになります。
実際、アイデアは比較的シンプルです。まず、ボタンをレイアウトして色を付け、次に疑似要素を使用してマウスの位置をマークし、ボタン内の疑似要素の座標を表す <ボタンクラス="track-btn"> <span>若者よ、私をクリックすれば私はあなたに力を与えるでしょう</span> </ボタン> .トラックボタン{ マージン: 0; パディング: 0; /*カスタム境界線*/ 境界線: 0; /*クリック時のデフォルトの青い枠線効果を削除します*/ アウトライン: なし; -webkit-appearence: なし; オーバーフロー: 非表示; 位置: 相対的; 境界線の半径: 25px; 高さ: 49.9px; 背景色: #66f; カーソル: ポインタ; 行の高さ: 50px; テキスト配置: 中央; フォントの太さ: 太字; フォントサイズ: 18px; 色: #fff; パディング: 0 20px; スパン { 位置: 相対的; ポインタイベント: なし; } &::前に { --サイズ: 0; 位置: 絶対; 左: var(--x); 上: var(--y); 幅: var(--size); 高さ: var(--size); 背景画像: 放射状グラデーション(円の最も近い側、#09f、透明); コンテンツ: ""; 変換: translate3d(-50%, -50%, 0); 遷移: 幅 200 ミリ秒の緩和、高さ 200 ミリ秒の緩和。 } &:hover::before { --サイズ: 200px; } } const btn = document.getElementsByClassName("track-btn")[0]; btn.addEventListener("mousemove", e => { btn.style.setProperty("--x", `${e.offsetX}px`); btn.style.setProperty("--y", `${e.offsetY}px`); }); さらに素晴らしいアニメーションを追加することもできます。 現実と展望 前述のとおり、CSS3 変数はどこにでも配置できます。実際、「あまり知られていない」 // スタイル内の CSS3 変数値を参照/変更します。documentElement.style.setProperty("name", value) CSS でカスタム変数を変更する場合は、現在、それらを同じ「ターゲット」に配置することをお勧めします。例えば: #角度{ --角度: ""; } #角度:チェック済み{ --angular: "角度"; } 今日のほとんどの Web サイトでは、ページの応答性に基づいて、レイアウト内の項目間のデフォルトの間隔、およびページ上のさまざまなセクションすべてのデフォルトのパディング、フォント サイズ、さらにはタイポグラフィ レイアウトが定義されています。しかし、多くの場合、異なる「外部リンク CSS ファイル」を切り替えたり、対応するすべてのプロパティ値を狭い範囲で変更することしかできません。しかし、これによって 1 つのことが起こります。「次のメディア臨界値」に達する前に、常にいくつかの「偶発的な」距離が存在することになります。たとえば、 :根 { --サイズ: 1.5em; } @media (最小幅: 30em) { :根 { --サイズ: 2em; } } 。容器 { マージン: 0 自動; 最大幅: 60em; フォントサイズ: var(--size); } また、js でページ サイズの変更を監視して、 カスタム プロパティは、一部のシナリオでプリプロセッサ変数を正しく使用できない scss/less のギャップを埋めます。ただし、互換性の観点から見ても、現在の開発の観点から見ても、多くの場合、プリプロセッサ変数を使用する方が依然としてよりエレガントな選択です。多くのサイトでは、しばらくの間、動的テーマのカスタム プロパティと静的テンプレートのプリプロセッサ変数の両方を組み合わせて使用し続けると思われます。 これで、プロジェクトの再構築から始めて、プロジェクトで CSS3 カスタム変数を使用する方法についての記事は終了です。プロジェクトでの CSS3 カスタム変数の使用の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 |
<<: Linux 環境に MySQL 8.0 をインストールするプロセスの紹介
>>: エンコードが utf-8 に設定されている場合に Web ページが文字化けする問題の解決策
目次問題1: 破壊1. 破壊する方法2. いつ破壊するか2.1 解決策1: route.queryを...
MySQL では、ソートには order by を、ページングには limit をよく使用します。最...
問題の背景:再生中のビデオのスクリーンショットを撮る必要があります。ビデオはビデオタグを使用して再生...
ステップ1: Alibaba Cloudプライマリドメイン名にセカンダリドメイン名を追加する2 番目...
1. 現在の日付 DATE_SUB(curdate(),INTERVAL 0 DAY) を選択します...
履歴書コード: XML/HTML コードコンテンツをクリップボードにコピー<!DOCTYPE ...
HTML と CSS で実装された登録ページ テンプレート。早速、コードを見てみましょう。更新: ...
フォームのアクションは URL ジャンプとは異なります。フォームはバックグラウンドにデータを渡すこと...
序文この記事では、vue に付属している vue-router.js ルーティングを使用してページン...
CSS の将来は非常に楽しみです。一方では、まったく新しいページ レイアウト方法であり、他方では、ク...
目次インストール不要のMySQLバージョン1. インストール パッケージをダウンロードします。 2....
前回の記事では、MySQL ステートメントの実行時間をチェックする 2 つの方法を紹介しました。今日...
どちらの方法も、一定時間後に JavaScript コードを実行するために使用できますが、それぞれに...
目次複数の条件文複数属性オブジェクトスイッチステートメントを置き換えるデフォルトパラメータとデストラ...
今日、MySQL データベースをコンピューターに再度インストールしました。システムを再インストールす...