2015-03-02 24 views
0

我試圖打造出一個窗體模塊這樣不管的形式可以有各種輸入,以下條件總是滿足:始終中心的形式和排隊的投入,無論標籤長度的

  1. 表單在其包含的元素中居中。 (我認爲這只是inline-block加上text-align: center。)
  2. 輸入的寬度和寬度都是相同的,沿着它們的左邊緣排列。
  3. 標籤可以是任何長度(在合理範圍內),其右側邊緣全部對齊。
  4. 表單只與其最長的標籤/輸入組合一樣寬(換句話說,表單的寬度是動態的,並由最長的標籤決定)。 (下面的紅線在圖像中表示的形式的邊界邊緣按給定的標籤和輸入。)

基本上,我想是這樣執行以下操作:

Desired form layout

這種類型的的佈局實際上很容易處理表格,但是我已經讀過表格不適合用於表格,所以我的問題是,我怎樣才能不用表格來完成所有這些工作?

謝謝。

編輯:佈局必須在IE8中工作。

+0

我會說你應該對準一切的權利,你是否有一個jfiddle – bbvanee 2015-03-02 14:52:46

+0

['display:table'](https://css-tricks.com/almanac/properties/d/display/) - 將一個div變成表格:) – Pete 2015-03-02 14:56:47

+0

從來沒有一個大的fa把div變成表格。那時候,我認爲最好只使用一張桌子。無論如何,我喜歡把所有東西都對齊的想法。那是我最初的想法之一,我想我會繼續這樣做。謝謝。 – HartleySan 2015-03-02 15:51:37

回答

1

您可以使用flex完成所需的行爲。

HTML結構(這只是一個方法)

<div id="container"> 
    <div class="form-container"> 
     <form> 
      <div class="column"> 
       <label for="text1">This is a label</label> 
       <label for="text2">Label</label> 
       <label for="text3" style="flex-grow:2;">Another larger label :D</label> 
       <label for="text4">A short one!</label> 
      </div> 
      <div class="column"> 
       <input type="text" name="text1" /> 
       <input type="text" name="text2" /> 
       <textarea name="text4" style="flex-grow:2;"></textarea> 
       <input type="text" name="text3" /> 
      </div> 
     </form> 
    </div> 
</div> 

CSS:

#container { 
    text-align: center;  
} 

#container .form-container { 
    display: inline-block; 
} 

#container form { 
    background: #eee; 
    display: flex; 
    flex-direction: row; 
    flex-wrap: nowrap; 
    padding: 20px; 
} 

#container form .column { 
    display: flex; 
    flex-direction: column; 
    flex-wrap: nowrap; 
} 

#container form .column label { 
    padding: 2px; 
    text-align: right; 
} 

#container form .column input, 
#container form .column textarea { 
    align-self: flex-start; 
    width: 200px; 
} 

這裏是一個工作演示:http://jsfiddle.net/gopafm4g/2/

+0

好主意,但它必須在IE8中工作。 – HartleySan 2015-03-02 15:50:52

+1

下一次請務必添加,作爲初始要求;) – 2015-03-02 15:53:30

+0

是的,我應該有。對於那個很抱歉。對我來說,這只是一種假設,大多數人所做的任何事情都需要在大多數瀏覽器中工作。無論如何,我將在未來做到這一點。對於那個很抱歉。 – HartleySan 2015-03-02 15:54:46