フォームのフロントエンド レイアウトでは、テキスト ボックスのプロンプト テキストを両端に揃える必要があることがよくあります。次に例を示します。 もっと大まかなアプローチとしては、余白で分離する必要があるテキストにタグを追加し、各単語の余白を個別に制御する方法があります。この方法は、スペースやプレースホルダーを直接追加するよりも正確で、私は以前にもこの方法を試したことがあります。しかし、さらに書いていくうちに、これを抽象化して、より多くのシナリオで使用できるのではないかと考えるようになりました。コードの見栄えを良くしますか?メンテナンスコストが削減されますか? 1. 最初に思い浮かぶのは、問題がCSSで直接解決できるかどうかだ CS .test-justify { テキスト配置: 両端揃え; } html <div class="test-justify"> テストテキスト</div> まあ、 このプロパティは、段落の両端のテキストを揃えるためのものであることがわかりました。次に、 CS .test-justify { テキスト配置: 両端揃え; } 効果は得られますが、欠点は IE および Safari ブラウザと完全に互換性がないことです。 2. 次に考えてみましょう。上記の実装には互換性の問題があるため、2、3、4 などの長さのテキストごとに別々の CSS クラスを記述して問題を解決できますか? フォーム内のテキスト ボックスのプロンプトには多くの単語が含まれないためです。 CS div { 幅: 100ピクセル; } .w2 { 文字間隔: 2em; } .w3 { 文字間隔: 0.5em; } html <div class="w2">テスト</div> <div class="w3">テスト済み</div> <div>テストが近づいています</div> このソリューションは問題を解決でき、ほとんどのシナリオに対応できると思われますが、残念ながら両端が完全に一致しておらず、特殊な表示状況でのニーズを満たすことができません。今は脇に置いておいて、引き続き試してみましょう。 2. 上記は純粋な CSS 実装です。次に、CSS と DOM を組み合わせて統合ソリューションを作成できるかどうかを確認しましょう。 html <div class="test-justify"> テストテキスト <span></span> </div> CS .テスト正当化{ テキスト配置: 両端揃え; } スパン { 表示:インラインブロック; パディング左:100%; } 考えてみると少しワクワクします。これは IE と Safari と完全に互換性があります。このソリューションは、実際には最初の段落の配置ソリューションの拡張です。スペースを使用して単語の分離を強制し、span を使用して最後の行を偽装します (test-justify では最後の行は配置されません)。 ほとんどの場合、テキストはバックエンドから読み込まれるため、スケーラビリティを向上させるには、このソリューションを最適化する必要があります。 たとえば、.net core razor ビューは、<label asp-for="Email"></label> に記述されているモデルの表示名を読み込みます。 小さな js を追加するだけで、すべてのシナリオと互換性を持つようになります。 div { 幅: 300ピクセル; 境界線: 1px実線 #000; } .テスト正当化{ テキスト配置: 両端揃え; } スパン { 表示:インラインブロック; パディング左:100%; } html <div class="test-justify"> テストテキスト</div> js var $this = $(".test-justify") , justifyText = $this.text().trim() 、afterText = ""; (var i = 0; i < justifyText.length; i++) { afterText += justifyText[i] + " "; } afterText = afterText.trim() + "<span></span>"; $this.html(afterText).css({ "height": $this.height() / 2 + "px" }); さて、このソリューションは主流のブラウザをサポートできるはずですが、欠点は、js を介して調整されるため、更新時によく見ると、テキストの配置 (点滅) の処理が表示され、エクスペリエンスがあまり良くないため、互換性を持たせるようにしましょう。 関数myBrowser() { var userAgent = navigator.userAgent; //ブラウザのバージョンを確認します var isOpera = userAgent.indexOf("Opera") > -1; var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera; var isEdge = userAgent.toLowerCase().indexOf("edge") > -1 && !isIE; var isIE11 = (userAgent.toLowerCase().indexOf("trident") > -1 && userAgent.indexOf("rv") > -1); if (/[Ff]irefox(\/\d+\.\d+)/.test(userAgent)) { 「Firefox」を返します。 } それ以外の場合 (isIE) { 「IE」を返します。 } それ以外の場合 (isEdge) { 「IE」を返します。 } それ以外の場合 (isIE11) { 「IE」を返します。 } そうでない場合 (/[Cc]hrome\/\d+/.test(userAgent)) { 「Chrome」を返します。 } そうでない場合 (/[Vv]ersion\/\d+\.\d+\.\d+(\.\d)* *[Ss]afari/.test(userAgent)) { 「Safari」を返す } それ以外 { 「不明」を返す } } var ブラウザ = myBrowser(); if (ブラウザ == "IE" || ブラウザ == "Safari") { var $this = $(".test-justify") , justifyText = $this.text().trim() 、afterText = ""; (var i = 0; i < justifyText.length; i++) { afterText += justifyText[i] + " "; } afterText = afterText.trim() + "<span></span>"; $this.html(afterText).css({ "height": $this.height() / 2 + "px" }) } ハハハハ、完璧! 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 |
>>: HTML 固定タイトル列、タイトル ヘッダー テーブル固有の実装コード
目次QRコードログインの真髄QRコードを理解するシステム認証メカニズムQRコードをスキャンしてログイ...
序文:私はずっと、SQL 文がどのように、どのような順序で実行されるのかを知りたいと思っていました。...
Linux では、通常、ファイルの名前を変更するために mv コマンドを使用します。これは、単一のフ...
Shell で受信パラメータを受信する方法は 2 つあることがわかっています。 1 つはスクリプト...
プレビュー: コード:ページセクション: <テンプレート> <div class=...
この記事の例では、キャンバスをベースにした超クールな水の光の効果を実装するための具体的なコードを参考...
概要: 2 つの MySQL SQL ステートメント ロックの分析次のSQL文にどのようなロックが追...
ネガティブな距離は共感を意味します。序文(疑問の提起):プロダクトマネージャーは機能を把握します。機...
1. 基本的な手順1: yarn add vue-i18nをインストールするこのパスに新しい .js...
序文特に bash 環境では、スクリプトの実行方法によって結果が異なります。スクリプトを実行する方法...
疫病のせいで家にこもりきりで、頭がおかしくなりそうなので、パソコンを起動して頭を働かせてみました。今...
1. クロスドメインを実現するためにCORSレスポンスヘッダーを設定するクロスオリジンリソース共有...
目次1. 解体のヒント2. デジタルセパレーター3. try...catch...finally が...
ヒント: MySQL では、ユーザーの作成と削除が頻繁に必要になります。ユーザーを作成するときは、通...
目次1. シナリオの説明2. 解決策オプションが多すぎる el-select コンポーネントの解決策...