2010-02-21 189 views
55

爲什麼我的標籤和單選按鈕不會保持在同一行,我該怎麼辦?單選按鈕和標籤顯示在同一行

這裏是我的形式:

<form name="submit" id="submit" action="#" method="post"> 
      <?php echo form_hidden('what', 'item-'.$identifier);?> 

      <label for="one">First Item</label> 
      <input type="radio" id="one" name="first_item" value="1" /> 

      <label for="two">Second Item</label> 
      <input type="radio" id="two" name="first_item" value="2" />    <input class="submit_form" name="submit" type="submit" value="Choose" tabindex="4" /> 
      </form> 
+2

你能顯示整個網頁和相應的CSS?如果你只把你在HTML頁面正文中提供的代碼片段放在同一行,那麼必須有一些css規則來防止這種情況。 – 2010-02-21 14:15:36

+0

您正在使用哪種XHTML模式? – 2010-02-21 14:15:44

+0

@Darin Dimitrov我有一個大css文件在這裏張貼不會是一個好主意,我應該尋找什麼(有多個樣式表)或我怎樣才能風格這一個seperatly? – 2010-02-21 14:17:27

回答

80

如果您使用HTML結構我佈局in this question您可以簡單地將您的標籤和輸入浮動到左邊並調整填充/邊距,直到排列好的東西。

是的,你會想讓你的單選按鈕有一箇舊的IE類名稱。並有個個在同一行,根據我掛到上面的標記,它會像這樣:

<fieldset> 
    <div class="some-class"> 
    <input type="radio" class="radio" name="x" value="y" id="y" /> 
    <label for="y">Thing 1</label> 
    <input type="radio" class="radio" name="x" value="z" id="z" /> 
    <label for="z">Thing 2</label> 
    </div> 
</fieldset> 

意味着你啓動的CSS將是這樣的:

fieldset { 
    overflow: hidden 
} 

.some-class { 
    float: left; 
    clear: none; 
} 

label { 
    float: left; 
    clear: none; 
    display: block; 
    padding: 2px 1em 0 0; 
} 

input[type=radio], 
input.radio { 
    float: left; 
    clear: none; 
    margin: 2px 0 0 2px; 
} 
+2

(我建議實際切換,在單選按鈕後面有標籤,但那是你的電話。) – 2010-02-28 10:57:18

+1

應該是 podeig 2012-03-15 13:56:27

+1

@ D_N,你可以請修復屬性的標籤,我試過了,但我的編輯少於6個字符,所以我無法提交。 – iancrowther 2012-04-02 12:46:10

0

我不能使用代碼來重現谷歌瀏覽器4.0,IE8,或Firefox 3.5的問題。標籤和單選按鈕保持在同一行。

試着將它們都放在<p>標籤內,或者將單選按鈕設置爲像Elite Elite紳士建議的那樣內聯。

5

嗯。默認情況下,<label>display: inline;<input>(大致至少)是display: inline-block;,所以它們應該在同一行上。請參閱http://jsfiddle.net/BJU4f/

也許樣式表設置爲labelinputdisplay: block

1

我用這個代碼和工作得很好:

input[type="checkbox"], 
input[type="radio"], 
input.radio, 
input.checkbox { 
    vertical-align:text-top; 
    width:13px; 
    height:13px; 
    padding:0; 
    margin:0; 
    position:relative; 
    overflow:hidden; 
    top:2px; 
} 

您可能需要重新調整頂部的值(取決於你line-height)。如果你不想要IE6的兼容性,你只需要把這段代碼放到你的頁面中即可。否則,您必須爲您的輸入添加額外的類(您可以使用jQuery或任何其他庫) - )

5

將它們都放到display:inline

7

您可能有寬度爲您的輸入指定標籤在您的某個地方css

添加一個class="radio"到您的收音機框和一個input.radio {width: auto;}到您的CSS。

0

如果問題在於當窗口太窄時標籤和輸入包裝爲兩行,請刪除它們之間的空白;例如: -

<label for="one">First Item</label> 
<input type="radio" id="one" name="first_item" value="1" /> 

如果你需要的元素之間的空間中,使用非打破空間(&amp;nbsp;)或CSS。

47

我總是做的只是將單選按鈕包裹在標籤內......

<label for="one"> 
<input type="radio" id="one" name="first_item" value="1" /> 
First Item 
</label> 

這樣的事情,一直爲我工作。

+2

這不會自行工作,沒有什麼能夠阻止標籤內的單詞在不同的行上分割。您需要將標籤顯示爲:block或white-space:nowrap。另外,我不確定在標籤中輸入輸入的語義是否正確。 – Tom 2010-03-04 03:13:51

+7

輸入由標籤元素包裝是有效的。見http://www.w3.org/TR/html5/forms.html#the-label-element – 2014-05-07 12:03:58

+7

實際上這應該是被接受的答案... – hereandnow78 2015-03-18 14:55:55

2

我假設問題在於,當窗口太窄時,它們將包裝到單獨的行上。正如其他人指出的那樣,默認情況下,標籤和輸入應該是「display:inline;」,所以除非您有其他樣式規則正在改變這種規則,否則它們應該在有空間的情況下在同一行上呈現。

如果不更改標記,將無法使用唯一的CSS來修復此問題。

修復它的最簡單方法是將單選按鈕和標籤包裝在塊元素中,如pdiv,然後阻止使用white-space:nowrap進行包裝。例如:

<div style="white-space:nowrap;"> 
    <label for="one">First Item</label> 
    <input type="radio" id="one" name="first_item" value="1" /> 
</div> 
0

注:傳統上使用標籤標記的是菜單。例如:

<menu> 
<label>Option 1</label> 
<input type="radio" id="opt1"> 

<label>Option 2</label> 
<input type="radio" id="opt2"> 

<label>Option 3</label> 
<input type="radio" id="opt3"> 
</menu> 
+0

1.不,它不是 - [這是用於標記表單元素]( https://www.w3.org/TR/html/sec-forms.html#the-label-element),無論是否在菜單中。 2.您打算指定標籤所描述的表單元素,方法是在[

0

我有類似的問題,保持在同一行上的所有單選按鈕。在嘗試了所有我能做的事情之後,除了以下內容外,沒有什麼能夠爲我工作我的意思是簡單地使用表格解決了允許單選按鈕出現在同一行中的問題。

<table> 
<tr> 
    <td> 
     <label> 
      @Html.RadioButton("p_sortForPatch", "byName", new { @checked = "checked", @class = "radio" }) By Name 
     </label> 
    </td> 
    <td> 
     <label> 
      @Html.RadioButton("p_sortForPatch", "byDate", new { @class = "radio" }) By Date 
     </label> 
    </td> 
</tr> 
</table> 
0

我一直避免使用float:left,而是我用display: inline

.wrapper-class input[type="radio"] { 
 
    width: 15px; 
 
} 
 

 
.wrapper-class label { 
 
    display: inline; 
 
    margin-left: 5px; 
 
    }
<div class="wrapper-class"> 
 
    <input type="radio" id="radio1"> 
 
    <label for="radio1">Test Radio</label> 
 
</div>