CSS 疑似クラス: 空っぽだと光る (サンプルコード)

CSS 疑似クラス: 空っぽだと光る (サンプルコード)

最近私の記事を読んだ人なら誰でも、私が現在WeChatミニプログラムプロジェクトを担当しており、その中で多くの興味深いことやいくつかの「奇妙なアイデア」に遭遇したことをご存知でしょう。この記事の背景は、ある朝、wxml ファイル内にhidden一連のwx:if/elseを見ていて、突然イライラしたことです。wx:if によってパフォーマンスの問題が発生するだけでなく、タグも冗長でした。

前回の記事[WeChatアプレットカスタムコンポーネントライブラリのyPickerコンポーネントの分析と省、市、地区間の3レベルリンクの実装]に続いて、省、市、地区間の3レベルリンクのカスタム実装という例を分析しました。詳細なコードが含まれているため、ここではこれ以上説明しません。呼び出し方法について説明します。

当時の私の考えはこうです。一方では「JavaScript で書きすぎない」という配慮から、他方では、それぞれ 3 つの変数を使用して、province、city、district を実装したため、JavaScript ではこの 3 つの変数のみに注意が向けられ、その間にあるスペースなどはすべて wxml ファイルに取り込まれてしまう、というものでした。このような:

<view class="部門の場所" bindtap="fixedshow">
  <view class="depart_title">場所</view>
  <view wx:if="{{provinces&&citys&&areas}}" class="placeholder decent_content">{{provinces}} {{citys}} {{areas}}</view>
  <view class="placeholder decent_content befselect" wx:else>現在の場所を選択してください</view>
  <view class="desc">変更がある場合は、修正して再度送信してください</view>
</ビュー>

(呼び出しにはその後の変更が含まれるため、ポップアップ ウィンドウの [確認] ボタンをクリックするのは、イベントのこのコードに表示される 3 つの変数に 3 つの変数を割り当てるときだけです。それ以外の場合、変更が行われると、[キャンセル] をクリックしても [確認] をクリックしても、変更は既に行われており、これは適切ではありません。)

レイアウトは次のとおりです。

.部門{
  幅: 100%;
  高さ: 96rpx;
  ディスプレイ: フレックス;
  アイテムの位置を中央揃えにします。
  フォントサイズ: 36rpx;
  フォントの太さ: 347;
  テキストオーバーフロー: 省略記号;
  オーバーフロー: 非表示;
  空白: ラップなし;
}
。位置{
  位置: 相対的;
  下境界線: 1rpx実線rgba(0,0,0,.009);
  ディスプレイ: フレックス;
  align-items:flex-start;
  パディングトップ: 20rpx;
}

.desc{
  位置: 絶対;
  右: 19rpx;
  下部: 4rpx;
  色: rgb(63,142,255);
  フォントサイズ: 23rpx;
}
.部門 .depart_title{
  幅: 20%;
}
.部門 .depart_content{
  左マージン: 10%;
  テキストオーバーフロー: 省略記号;
  オーバーフロー: 非表示;
  空白: ラップなし;
}
.部門.プレースホルダー{
  幅: 69%;
  テキストオーバーフロー: 省略記号;
  オーバーフロー: 非表示;
  空白: ラップなし;
} 

位置

ここで wx:if を置き換えることを決定したら、まず何に置き換えるかを考える必要があります。
wx:ifの機能は、存在するかどうかを判定することです。存在しない場合 (条件が満たされていない場合) は、 wx:elseまたはwx:elifのロジックに切り替わります。

さて、これを考えると、CSS 疑似クラス: :emptyを思いつくはずです。これは、私たちが望んでいることを実行します。要素 (コンテンツ) が空の場合...
私はすぐにコードに次の変更を加えました:

<view class="部門の場所" bindtap="fixedshow">
  <view class="depart_title">場所</view>
  <view class="placeholder decent_content">{{provinces}} {{citys}} {{areas}}</view>
  <view class="desc">変更がある場合は、修正して再度送信してください</view>
</ビュー>

次に、この疑似クラスをクラス - decent_content に追加します。

.placeholder:empty::before{
  内容: 「現在の場所を選択してください」;
  色: rgba(0,0,0,.6);
} 

ワックス

空白です!

情報を確認した後: :empty疑似クラスは、タグ コンテンツが空の場合、コンテンツ領域にスペースがあると一致しないことを意味します。

タグを記述するときは、タグ内にスペースや改行があるかどうかに必ず注意してください。 (改行はスペースとして解釈されることが多いです。)
単一でないタグに遭遇したときは、必ず終了タグに注意してください。

最終的な解決策は、js 内で 3 つの変数をスペースで接続し、ページにレンダリングすることです。

wx位置

(実際、これはカスタム セレクターであり、自動配置は Amap にリクエストを送信して、州、市、地区のフィールドを取得するだけです。コードは書きません...)


この時点で、1 つのことがわかります。上記では、空の疑似クラスだけでなく、before 疑似要素も使用していました。

実際、これは非常に一般的です。結局のところ、空要素だけがコンテンツを追加できるのです(CSS 全体を通して、before や after などの疑似要素だけが、テキストであれ画像であれ、ページにコンテンツを追加できるようです)。

もっと注意を払うべき領域が 2 つあると思います。

  • 疑似要素では位置が使用されていません。一般的に、要素(コンテンツを含む)の場合、「前」/「後」のスタイルを設定するには、配置、つまり表示される場所の指定が必要です。そうしないと、疑似要素内のテキストは表示されない可能性が高くなります。この記事の空白部分から、元のコンテンツによって覆われていると推測できます。
  • 最初の点から、 :beforeおよび:after疑似要素を使用してタグにコンテンツとグラフィックを挿入しても、空の疑似クラスの一致には影響しないという結論に達することができます。

この機能は非常に便利です。


上記から、この疑似クラスの最大の用途は「フィールド不足プロンプト」であることがわかります。これは非常に実用的です。さらに、このタスクを CSS に任せることで、「(レイアウト) の負担」を大幅に軽減し、エクスペリエンスを向上させ、メンテナンスを容易にすることもできます。

たとえば、プロジェクトを最適化するときに、要求されたすべてのフィールドに統一されたクラス名を追加しました。

.ym-empty:empty::before{
	内容:「データがありません。もう一度お試しください」
	表示: ブロック;
	テキスト配置: 中央;
	色: rgba(0,0,0,.6);
	/** その他の配置とフォント変更操作*/
}

これで、私の目を引いた CSS 疑似クラス: empty に関する記事は終わりです。CSS 疑似クラス empty の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  SpringBoot プロジェクトの Docker クイック デプロイメントの紹介

>>:  ブラウザタブの左端に表示されるウェブサイトのアイコンを設定します

推薦する

ローカル画像サーバーのNginx構成の実装

目次1. Nginx の紹介2. 画像サーバーの構築1. Nginx の紹介Nginx はリバース ...

JS のあらゆる場所で絶対等価演算子の使用をやめる

目次概要1. NULL値のテスト2. ユーザー入力を読み取る導入事実の根源はどこにあるのでしょうか?...

Centos 7 mysql-8.0.19-1.el7.x86_64.rpm-bundle.tar の簡単な分析

Baiduクラウドディスク:リンク: https://pan.baidu.com/s/1hv5rUW...

Linux で完全な Samba サーバーを構築する方法 (CentOS バージョン)

序文smb は、クライアントとサーバー間の Web 接続および情報通信に使用できるプロトコルの名前で...

JavaScript で長い画像のスクロール効果を実装する

この記事では、JavaScriptの長い画像スクロールの具体的なコードを参考までに共有します。具体的...

Vue+Openlayerはmodifyを使用して要素の完全なコードを変更します

Vue+Openlayerはmodifyを使って要素を変更します。具体的な内容は以下のとおりです。 ...

非常に実用的なTomcat起動スクリプトの実装方法

序文セキュリティ上の理由から、会社が Linux サーバーへのすべてのログインにセキュリティ制限を課...

CentOS7 デプロイメント Flask (Apache、mod_wsgi、Python36、venv)

1. Apacheをインストールする # yum インストール -y httpd httpd-de...

ins タグと del タグの属性と使用法

insとdel は、HTML 4.0 で導入され、文書の作成時に作成者が共同作業できるようにし、また...

JavaScript 配列の詳細な概要

目次1. 配列誘導1. 文字列を配列に分割する2. コレクションとマップを新しい配列に変換する3. ...

MySQLのロックについて理解しておくべきこと

1. はじめにMySQL ロックは、その範囲に応じて、グローバル ロック、テーブル ロック、行ロック...

Linux zabbix エージェントの展開と設定方法の詳細な説明

1. web01にzabbix-agentをインストールするZabbix ウェアハウスをデプロイする...

JavaScript はフロントエンド Web ページでカウントダウンを実装します

ネイティブJavaScriptを使用してカウントダウンを簡単に実装します。参考までに、具体的な内容は...

Navicat Premium が MySQL 8.0 に接続してエラー「1251」を報告する問題を解決する方法の分析

長い間何もしていなかった人は、努力をすると一生懸命働いていると思うようになります。 1. 問題Nav...

Kali に docker と portainer をインストールする方法

dockerの登場により、多くのサービスが徐々にハードウェアアーキテクチャへの依存から脱却しました。...