Flexboxレイアウトの最もシンプルなフォーム実装

Flexboxレイアウトの最もシンプルなフォーム実装

フレキシブル レイアウト (Flexbox) はますます人気が高まっており、CSS レイアウトの記述が非常に便利なため、使用する人が増えています。

3 年前に Flexbox の紹介記事 (上、下) を書きましたが、少しわかりにくかったです。今日、チュートリアルを見て、簡単なフォームでFlexboxを説明でき、内容も非常に実用的だと分かりました。

以下では、簡単なフォームレイアウトを学習するのに必要な時間はわずか 10 分です。

1. <form> 要素

フォームでは<form>要素を使用します。

<フォーム></フォーム>

上記は空のフォームです。 HTML 標準によれば、これはブロックレベル要素であり、デフォルトでは全幅を占めますが、コンテンツがないため高さは 0 になります。

2. フォームコントロール

ここで、最もよく使用される 2 つのフォーム コントロールを追加します。

<フォーム>
  <input type="email" name="email">
  <button type="submit">送信</button>
</フォーム>

上記のコードでは、フォームに入力ボックス ( <input> ) とボタン ( <button> ) が含まれています。

標準によれば、両方のコントロールはインライン ブロック要素であり、つまり、デフォルトでは 1 行に並んで配置されます。

上の図は、ブラウザによるこのフォームのデフォルトのレンダリングを示しています (色を除く)。2 つのコントロールの間に 3 ~ 4 ピクセルの間隔があることがわかります。これは、ブラウザの組み込みスタイルによって指定されています。

3. Flexboxレイアウトの指定

次に、フォームで Flexbox レイアウトを使用するように指定します。

形状 {
  ディスプレイ: フレックス;
}

ご覧のとおり、エラスティック レイアウト アイテムにはデフォルトでスペースがないため、2 つのコントロール間のスペースは消えます。

4. flex-grow属性

注目すべき場所が 2 つあります。

(1)エラスティックレイアウトではデフォルトでは項目の幅が変更されないため、2つのコントロール要素の幅は変更されませんでした。

(2)エラスティックレイアウトはデフォルトで左揃えになっているため、2つのコントロールは行の先頭から配置されます。

入力ボックスが現在の行の残りの幅全体を占めるようにしたい場合は、入力ボックスのflex-growプロパティを1に指定するだけです。

入力{
  フレックス成長: 1;
}

上の画像では、ボタンの幅は変わっていませんが、入力ボックスの幅が現在の行の幅からボタンの幅を引いた幅まで広くなっています。

flex-growプロパティのデフォルトは0です。これは、伸縮せずに元の幅が使用されることを意味します。 1の場合、項目の幅が現在の行の残りの幅全体を占めるように拡大されることを意味します。

5. align-itemsプロパティ

少し変更して、ボタンに画像を挿入してみましょう。

<フォームアクション="#">
  <input type="email" placeholder="メールアドレスを入力してください">
  <button type="button"><svg> <!-- スマイリーアイコン --> </svg></button>
</フォーム>

ボタンを画像に挿入すると、ボタンの高さが変わり、より高くなりました。この時、とても素晴らしいことが起こりました。

上の写真では、ボタンが高くなり、入力ボックスも自動的に同じ高さになります。

前述したように、エラスティック レイアウトでは、デフォルトではアイテムの幅は変更されませんが、デフォルトではアイテムの高さが変更されます。アイテムの高さを明示的に指定しない場合は、コンテナーの高さ全体がアイテムによって占められます。 この例では、ボタンが高くなり、フォーム要素も高くなり、入力ボックスの高さが自動的に伸びます。

align-itemsプロパティはこの動作を変更できます。

入力{
  フレックス成長: 1;
  位置合わせ: 中央;
}

align-itemsプロパティは 4 つの値を取ることができます。

  • flex-start: 上端を揃え、高さは伸ばさない
  • flex-end: 下端を揃え、高さは伸ばさない
  • center: 中央に配置され、高さは伸縮されません
  • ストレッチ: デフォルト値、高さは自動的に伸縮されます

項目数が多い場合、 align-selfプロパティを一つずつ設定するのは面倒です。このとき、コンテナ要素 (この場合はフォーム) にalign-itemsプロパティを設定することができ、その値はすべての子項目のalign-selfプロパティに継承されます。

形状 {
ディスプレイ: フレックス;
アイテムの位置を中央揃えにします。
}

上記のコードでは、 <form>要素にalign-itemsを設定した後、2 つの値を異なる値にしたい場合を除き、コントロールにalign-selfを設定する必要はありません。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

<<:  SQL グループ化により重複を削除し、他のフィールドで並べ替える

>>:  Mac で Docker を使用して Oracle をデプロイする方法

推薦する

Vue はトークンの有効期限が切れると自動的にログインページにジャンプする機能を実装します

このプロジェクトは最近テストされ、テスターから、トークンの有効期限が切れたため、ルートが自動的にログ...

AIX マウント NFS の書き込み効率が低い場合の解決策

NFSが提供するサービスマウント: サーバー上で /usr/sbin/rpc.mountd サーボ ...

jQuery+h5 で 9 マス抽選特殊効果を実現 (フロントエンドとバックエンドのコード)

序文:フロントエンド: jq+h5 で 9 グリッドのダイナミック効果を実現バックエンド: thin...

Node.js+express+socket でオンラインのリアルタイム多人数チャットルームを実現

この記事では、オンラインリアルタイム多人数チャットルームを実現するためのNode.js+expres...

xshell を使用して VMware で Linux に接続する方法 (2 つの方法)

【序文】最近、ITOO の試験システムのストレステストを行いたいので、自分のコンピュータに Lin...

圧縮パッケージを使用して Linux 環境に JDK 13 をインストールする方法

JDK とは何ですか?まあ、この質問がわからないのであれば、なぜこれをインストールするのか本当にわか...

MySQL の完全バックアップとクイックリカバリ方法

過去 15 日間のデータをバックアップするシンプルな MySQL 完全バックアップ スクリプト。バッ...

SSH接続を介してXshellを使用したUbuntu 20.04で報告されたサービス問題の詳細な説明

1. 最近、Ubuntu の新しいバージョンをインストールしました。/etc/ssh/sshd_co...

MySQLのREDOログとUNDOログの詳細な説明

MySQL ログ システムで最も重要なログは、REDO ログとアーカイブ ログです。後者は MySQ...

Linux で履歴コマンドを表示および実行する方法

履歴コマンドを表示し、指定されたコマンドを実行します owen@owen:~/owen/softwa...

なぜ Tomcat が起動できないのでしょうか?

目次現象:ポートの使用:ファイルにスペルミスがあります:現象: Tomcat がインストールされ、W...

MySQL データベースの集計クエリと結合クエリ操作

目次1. クエリ結果を挿入する2. 集計クエリ2.1 はじめに2.2 集計関数2.3 group b...

Nginx Rewrite の使用シナリオと設定方法の分析

Nginx Rewriteの使用シナリオ1. URL アドレスジャンプ。たとえば、ユーザーが pm....

mysql5.7.20 のインストールと設定方法のグラフィック チュートリアル (mac)

MySQL 5.7.20のインストールと設定方法のグラフィックチュートリアルをあなたと共有します1...

フロントエンドのパフォーマンス最適化を学ぶ準備として、HTMLページのレンダリングプロセスを理解する

現在、フロントエンドのパフォーマンス最適化について学んでいます。適切な解決策を見つけ、パフォーマンス...