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 クイック デプロイメントの紹介

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

推薦する

Docker プライマリ ネットワーク ポート マッピング構成

ポートマッピングDocker コンテナを起動する前にポート マッピングを行わないと、コンテナ外部のネ...

クロスブラウザローカルストレージⅠ

原文: http://www.planabc.net/2008/08/05/userdata_beh...

MYSQL の 10 の典型的な最適化ケースとシナリオ

目次1. SQL最適化の一般的な手順1. SQL実行計画の分析を説明する2. プロフィール分析を表示...

MySQLでユーザーを作成し、権限を管理する方法

1. ユーザーとパスワードの作成方法1. MySQLデータベースに入る mysql> mysq...

MySQL のスロークエリの方法と例

1. はじめにスロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメン...

MySQL データベース 8 - データベース内の関数の適用の詳細な説明

データベースの組み込み関数の使用この記事では、主に日付関数、文字列関数、数学関数など、データベースの...

Vue は Ctrip のカルーセル効果を模倣します (スライディング カルーセル、以下は高度に適応)

まずケースを見てみましょう。vue+swiper を使用して実装します。スライドの高さが異なる場合、...

ウェブページで Enter キーを押すと自動的にフォームを送信し、他のページにジャンプするソリューション

ウェブページでEnterキーを押すと、フォームは自動的に送信され、他のページに移動します。クエリフォ...

HTML いくつかの特別な分割線効果

1. 基本ライン 2. 特殊効果(効果は独立しておらず、互いに組み合わせることができます) 1. 両...

CentOS 8 カスタム ディレクトリ インストール nginx (チュートリアルの詳細)

1. ツールとライブラリをインストールする# PCRE は、Perl 互換の正規表現ライブラリを含...

nginx でネストされた if メソッドを実装する方法

Nginx はネストされた if ステートメントをサポートしておらず、if ステートメントでの論理判...

nginx プロキシ サーバーで双方向証明書検証を構成する方法

証明書チェーンを生成するスクリプトを使用して、ルート証明書、中間証明書、および 3 つのクライアント...

Alibaba Cloud Ubuntu 16.04 が IPSec サービスを構築

IPSec の概要IPSec (インターネット プロトコル セキュリティ): ネットワーク層と適用さ...

JavaScript でモバイル モーダル ボックスの効果を実現

この記事では、モバイルモーダルボックス効果を実現するためのJavaScriptの具体的なコードを参考...

MySQLで判定文を書く方法のまとめ

MySQL で判断文を書く方法:方法1. CASE関数case関数の構文: CASE条件 値1の場合...