Flexbox 布局的最簡單表單

2021-02-20 JavaScript

彈性布局(Flexbox)逐漸流行,越來越多人使用,因為它寫 CSS 布局真是太方便了。

三年前,我寫過 Flexbox 的介紹(上,下),但是有些地方寫得不清楚。今天,我看到一篇教程,才意識到一個最簡單的表單,就可以解釋 Flexbox,而且內容還很實用。

下面,你只需要10分鐘,就可以學會簡單的表單布局。

一、<form> 元素

表單使用<form>元素。

<form></form>

上面是一個空表單。根據 HTML 標準,它是一個塊級元素,默認將佔據全部寬度,但是高度為0,因為沒有任何內容。

二、表單控制項

現在,加入兩個最常用的表單控制項。

<form>

 <input type="email" name="email">

 <button type="submit">Send</button>

</form>

上面代碼中,表單包含一個輸入框(<input>)和一個按鈕(<button>)。

根據標準,這兩個控制項都是行內塊級元素(inline-block),也就是說,它們默認並排在一行上。

上圖是瀏覽器對這個表單的默認渲染(顏色除外),可以看到,這兩個控制項之間有3像素~4像素的間隔,這是瀏覽器的內置樣式指定的。

三、指定 Flexbox 布局

接著,指定表單使用 Flexbox 布局。

form  {

 display: flex;

}

可以看到,兩個控制項之間的間隔消失了,因為彈性布局的項目(item)默認沒有間隔。

四、flex-grow 屬性

兩個地方值得注意。

(1)兩個控制項元素的寬度沒有發生變化,因為彈性布局默認不改變項目的寬度。

(2)彈性布局默認左對齊,所以兩個控制項會從行首開始排列。

如果我們希望,輸入框佔據當前行的所有剩餘寬度,只需要指定輸入框的flex-grow屬性為1。

input  {

 flex-grow: 1;

}

上圖中,按鈕的寬度沒變,但是輸入框變寬了,等於當前行的寬度減去按鈕的寬度。

flex-grow屬性默認等於0,即使用本來的寬度,不拉伸。等於1時,就表示該項目寬度拉伸,佔據當前行的所有剩餘寬度。

五、align-self 屬性和 align-items 屬性

我們做一點改變,在按鈕裡面插入一張圖片。

<form action="#">

 <input type="email" placeholder="Enter your email">

 <button type="button"><svg>  <!-- a smiley icon -->  </svg></button>

</form>

按鈕插入圖片後,它的高度變了,變得更高了。這時,就發生了一件很奇妙的事情。

上圖中,按鈕變高了,輸入框也自動變得一樣高了!

前面說過,彈性布局默認不改變項目的寬度,但是它默認改變項目的高度。如果項目沒有顯式指定高度,就將佔據容器的所有高度。 本例中,按鈕變高了,導致表單元素也變高了,使得輸入框的高度自動拉伸了。

align-self屬性可以改變這種行為。

input {

 flex-grow: 1;

 align-self: center;

}

align-self屬性可以取四個值。

flex-start:頂邊對齊,高度不拉伸

flex-end:底邊對齊,高度不拉伸

center:居中,高度不拉伸

stretch:默認值,高度自動拉伸

如果項目很多,一個個地設置align-self屬性就很麻煩。這時,可以在容器元素(本例為表單)設置align-items屬性,它的值被所有子項目的align-self屬性繼承。

form {

 display: flex;

 align-items: center;

}

上面代碼中,<form>元素設置了align-items以後,就不用在控制項上設置align-self,除非希望兩者的值不一樣。

(完)

END

作者:阮一峰
http://www.ruanyifeng.com/blog/2018/10/flexbox-form.html

相關焦點

  • Flexbox 布局的正確使用姿勢
    還有部分人只使用「萬能」的flex:number屬性為伸縮項目分配空間,但有些特殊情景卻無法滿足,此文為此梳理了flexbox的新舊屬性區別和分配空間的原理,為大家用flexbox布局的項目通通渠。Flexbox兼容性PC端的兼容性移動端的兼容性
  • Flexbox布局的正確使用姿勢
    還有部分人只使用「萬能」的flex:number屬性為伸縮項目分配空間,但有些特殊情景卻無法滿足,此文為此梳理了flexbox的新舊屬性區別和分配空間的原理,為大家用flexbox布局的項目通通渠。 Flexbox兼容性 PC端的兼容性
  • 我對Flexbox布局模式的理解
    Flex容器 display:flex 當我們使用flexbox布局時候,需要先給父容器的display值定位flex(塊級)或者inline-flex(行內級)。 伸縮容器不是塊容器,因此有些設計用來控制塊布局的屬性,在伸縮布局中不適用,特別是多欄(column),float,clear,vertical-align這些屬性。 flex-direction [flex-direction]屬性用來控制上圖中伸縮容器中主軸的方向,同時也決定了伸縮項目的方向。
  • CSS布局:保持頁腳在底部:Flexbox vs Grid
    流程的插頁式頁面,例如確認動作產品列表頁日曆活動詳細信息There are two ways to handle this with modern CSS: flexbox and grid.使用現代CSS有兩種方法來處理這個問題:flexbox和grid。
  • CSS Flexbox 青蛙遊戲
    導語在學習CSS中,Flexbox是一個比較實用的CSS 布局屬性,但很複雜,有些人可能沒法很快掌握,今天我要推薦一個跟這個相關的遊戲,在遊戲中學習Flexbox,這豈不是一個讓人覺得很快樂的事嗎?遊戲介紹來看一下作者對這個遊戲的具體介紹吧。
  • 揭秘B端表單的布局秘密
    當業務組件越來越龐大複雜時,就導致了表單布局產生了諸多不協調的問題,非常影響用戶體驗。有些地方還會對用戶在數據錄入過程當中造成一些困惑。那麼我針對這個問題,進行了分析和總結,在此分享給大家一些小小的經驗。
  • 保持頁腳在底部:Flexbox vs Grid
    流程的插頁式頁面,例如確認動作產品列表頁日曆活動詳細信息There are two ways to handle this with modern CSS: flexbox and grid.使用現代CSS有兩種方法來處理這個問題:flexbox和grid。
  • 【第2052期】保持頁腳在底部:Flexbox vs Grid
    流程的插頁式頁面,例如確認動作產品列表頁日曆活動詳細信息There are two ways to handle this with modern CSS: flexbox and grid.使用現代CSS有兩種方法來處理這個問題:flexbox和grid。
  • DIV+CSS表單布局的五個小技巧
    首頁 > 教程 > 關鍵詞 > CSS最新資訊 > 正文 DIV+CSS表單布局的五個小技巧
  • 詳解CSS Flexbox,附帶示例
    英文 | https://medium.com/javascript-in-plain-english/css-flexbox-explained-with-examples
  • 表單設計:掌握表單設計方法(表單體驗篇)
    初看這些表單,你可能覺得很簡單,就是一些標籤、基礎的小組件,但是在實際業務中,想要將這些小組件組合拼裝成合適的表單卻需要推敲非常多的細節,常常會讓設計師確定【頁面框架】 這裡得頁面框架指的是承載著整個表單頁的頁面框架,即:整頁式(新頁面)、彈窗式、側邊欄式。因為其頁面面積大小不一樣,所以使用情境有所不同。[2] 整頁式:最常用方式,適用於絕大部分的表單,可以支持構建複雜的表單。
  • CSS Flexbox入門指南和示例
    在詳細介紹之前,我只想回答為什麼我們應該使用彈性框布局而不是使用顯示屬性,浮點屬性,位置屬性來做布局網頁的傳統方式使用Flexbox的優點Flexbox會平均分配項目的高度和寬度,即使項目是動態添加的,您也無需關心CSS屬性
  • 表單設計:掌握表單設計方法
    本文作者結合案例對表單的構成及注意事項進行了詳細的說明,相信對表單設計不熟悉的同學看完後肯定會有不少的收穫~說到表單其實在生活中可以接觸到各種各樣的表單,主要目的就是讓用戶填寫來【收集用戶信息】如:初看這些表單,你可能覺得很簡單,就是一些標籤、基礎的小組件,但是在實際業務中,想要將這些小組件組合拼裝成合適的表單卻需要推敲非常多的細節,常常會讓設計師陷入無限的糾結中
  • 「粘連」footer布局的思考和總結
    參考文章連結在文章末尾,簡單的語言總結如下:經典的「粘連」footer布局就是。上面布局的實現方法在參考文章中已經有提到。下面主要探討我們項目中遇到的情況:我們需要實現的布局就是 按鈕「提交」所在的區域能夠自由伸縮。當屏幕較低時,最就是「提交」按鈕和表單所在的區域接觸或者有一定的間隙。
  • 本月Firefox 65 將加入 Flexbox Inspector 開發者工具
    CSS Flexbox(彈性盒子)是一種越來越流行的布局模型,它是一種用於在行或列中布局元素的一維布局方法,彈性元素可填充頁面額外空間,也可以適當收縮以適合較小的空間,有助於構建強大的動態頁面,但是它的學習曲線非常陡峭。開發者在一篇博客上具體介紹了該功能的研發背景與特性。
  • 網頁布局如何更加合理,個人網站中表單製作和框架結構詳解
    本篇將介紹的是製作表單和框架結構的分享,有興趣的朋友可以了解一下!製作表單網頁上的表單就是項目選擇等控制和可以輸入的表項組成的欄目,這些我們都可以成為表單。在Web上,我們可以通過表單提交反饋信息和交流。不管是在Web資料庫,還是應用程式裡,我們都可以用表單來進行交互這些界面。
  • 終極表單設計指南
    關於表單設計,本文筆者將講到:「如何優化移動端表單設計?」、「如何使用正確的輸入類型?」、「要為用戶預設好簡單易操作的選項,而不是期待著用戶變聰明」、「優秀表單的合理布局是怎樣的?」、「表單設計的巧妙之處」等內容。想像一下,如果你走進一家商店,往購物籃裡塞滿了東西卻找不到收銀臺的感覺。最後,你可能放下所有東西一分錢沒花極其失望地離開了。
  • 史上最全表單設計總結
    糟糕的表單設計會帶來令用戶抓狂的交互體驗,極大的影響用戶信息錄入的效率。這篇文章我就來大家梳理一下關於表單設計的一些知識點。表單的構成常見表單是由多個列表項構成的。而每一個列表項都有最基本的標籤(標題)和輸入框。顧名思義,標籤是用來告訴用戶這個列表項是什麼;輸入框是供用戶輸入用的。
  • 你的終極表單設計指南
    的確,這種在支付過程中遇到的槽糕事情,也會發生在表單設計中。 糟糕的表單替我省了好幾百美元。冗長、繁瑣的表單嚇跑了你的顧客,讓你的公司潛在中流失了幾千美元。表單看起來是最簡單的UI組件,卻把控著你產品中最重要的互動設計。它們引導你的用戶去註冊、支付。
  • 用戶體驗:表單設計中的注意事項
    進行用戶測試有助於找出生活中的小竅門,比如測量與表單交互的時間、檢測痛點、觀察用戶如何使用界面、他在哪裡卡住或找不到必要的元素等等。執行這些活動可以幫助初學者避免表單世界中最大的和無知的錯誤。技巧1:單列布局避免曲折界面空間布局。