テキストとアイコンが中央に配置されたボタン
P粉033429162
P粉033429162 2023-08-15 11:01:09
0
1
414

アイコンとテキストを含むボタンコンポーネントを開発しています。

アイコンはボタンの左側に配置され、テキストはボタンの中央に配置されます。

テキストがボタンに収まらない場合は、折り返さずに切り詰めてください。

テキストを切り詰める重要な条件は、テキストがボタンの端からアイコンまでの距離と同じ距離にあることです。

そのため、ボタンに均等なインライン パディングを追加することはできません。

テキストが切り詰められない場合は、ボタンの中央に配置されます。

ただし、アイコンに重なったり、ボタンに収まりきらなかったりすると文字が切れてしまいます。

つまり、通常の状態ではアイコンの位置は変更されませんが、テキストを配置するための十分なスペースがない場合、アイコンはテキストを切り捨てられた位置に押し込みます。

ボタンの視覚的な例

CSS を使用してこの効果を実現しようとしましたが、失敗しました。

最後に、テキストに十分なスペースがあるかどうかを計算する ResizeObserver を各ボタンに追加しました。

十分なスペースがない場合は、アイコンに別のスタイルが適用されます。

私の ResizeObserver ソリューション、ウィンドウのサイズを変更してみてください

コードペン

const CLASS_TEXT = `button__text`; const CLASS_NO_FREE_SPACE = `button_no-free-space`; const FREE_SPACE_SIZE = 70; const button = document.querySelectorAll(`.${CLASS_ROOT}`); const handleButtonResize = (エントリ) => { エントリ.forEach((エントリ) => { const {ターゲット} = エントリ; const text = target.querySelector(`.${CLASS_TEXT}`); const {幅:幅ボタン} =entry.contentRect; if (!(HTMLElement のテキスト インスタンス)) { 戻る; } const widthText = text.offsetWidth; const freeSpaceLeft = (widthButton - widthText) / 2; const noFreeSpace = freeSpaceLeft <= FREE_SPACE_SIZE; target.classList.toggle(CLASS_NO_FREE_SPACE, noFreeSpace); }); }; constsizeObserver = new ResizeObserver(handleButtonResize); [...ボタン].forEach((ボタン) => { サイズ変更Observer.observe(ボタン); });

私の質問は次のとおりです:

純粋な CSS を使用して同じ効果を実現することは可能ですか?

P粉033429162
P粉033429162

全員に返信 (1)
P粉615886660

アイコンの幅は常に同じ(2em)なので、右側のスペースバランスをとるための「バッファ」として::after疑似要素を使用できます。 。

.button__iconをフレキシブル レイアウト フローに設定します。これは、他の要素を「プッシュ」するときに重要です。margin-rightを指定して、ボタンの左パディングのバランスをとります。

flex-basis: calc(2em 20px)を使用して::after疑似要素を作成します。このうち、2em.button__iconの幅、20px.button__icon## のmargin-rightです。 #。これにより、.button__textが短い場合に、左右のスペースのバランスがとれます。

justify-content: space-between

を親要素に適用して、.button__icon.button__text::after# のバランスを整えます##.button__textが短い場合。flex-shrink: 999

という大きな縮小率を追加して、

.button__textが長い場合にレイアウト エンジンが最初に::after要素を縮小します。

リーリー リーリー

いいねを押す+0
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!