Перемикачі та мітка відображатимуться в одному рядку


79

Чому мої ярлики та перемикачі не залишаються в одному рядку, що я можу зробити?

Ось моя форма:

<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, яке запобігає цьому.
Дарін Димитров

Яку схему XHTML ви використовуєте?
Емре Язічі

@ Дарін Димитров У мене є великі файли CSS, які можна розміщувати тут, не буде гарною ідеєю, що я повинен шукати всередині (мати кілька таблиць стилів) або як я можу створити цей файл окремо?
Gandalf StormCrow

@eyazici <! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Strict // EN" " w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd "> <html xmlns = " w3.org/1999 / xhtml ">
Gandalf StormCrow

1
Спробуйте встановити firebug та скористатися функцією "Перевірити", щоб перерахувати правила CSS, які застосовуються до ваших елементів.
Тобіас Коен,

Відповіді:


95

Якщо ви використовуєте структуру HTML, яку я виклав у цьому питанні, ви можете просто перемістити свою мітку та введення вліво та відрегулювати відступи / поля, поки речі не вишикуються.

Так, ви хочете, щоб ваш перемикач мав назву класу для старого IE. І щоб усі вони були в одному рядку, відповідно до розмітки, до якої я посилався вище, це було б так:

fieldset {
      overflow: hidden
    }
    
    .some-class {
      float: left;
      clear: none;
    }
    
    label {
      float: left;
      clear: none;
      display: block;
      padding: 0px 1em 0px 8px;
    }
    
    input[type=radio],
    input.radio {
      float: left;
      clear: none;
      margin: 2px 0 0 2px;
    }
<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>


2
(Я б запропонував насправді переключитися, з мітками після перемикачів, але це ваш дзвінок.)

1
<label for = "x"> Річ 1 </label> повинна бути <label for = "y"> Річ 1 </label>
подіг

1
@D_N, ти можеш виправити мітку для атрибута, я спробував, але моя редакція мала менше 6 символів, тому я не міг подати заявку.
iancrowther

На деякий час зник. Дякуємо, що це виправили.

@animuson має краще рішення, яке вкладає вхід всередину мітки. Прокрутіть вниз і підтримайте його замість цього! <label for="one"> <input type="radio" id="one" name="first_item" value="1" /> First Item </label>
Джозеф Чо

62

Що я завжди робив, це просто загорнути перемикач всередину ярлика ...

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

Щось подібне завжди працювало на мене.


8
Це не спрацює само по собі, ніщо не заважає розділити слова всередині ярлика на різні рядки. Вам потрібно буде зробити етикетку відображеною: block або white-space: nowrap. Крім того, я не впевнений, що семантично правильно мати введення всередині мітки.
Том,

11
Дійсно мати введення, обгорнуте елементом label. Дивіться w3.org/TR/html5/forms.html#the-label-element
Pisang Gesek

4
Перевага загортання введення міткою полягає в тому, що це робить текст доступним для активації перемикача, а не користувачеві потрібно натискати безпосередньо на радіо, що корисно для людей, які користуються мобільними пристроями і не мають точно визначити точність клацання, яку ви отримаєте від вказівника миші.
MistyDawn

11

у вас може бути вказана ширина для вхідних тегів десь у вашому css .

додати a class="radio"до вашого радіоприймача і a input.radio {width: auto;}до вашого css.


1
Кращим способом зробити це буде використання селектора типу введення у вашому css замість того, щоб додавати новий клас. Ви можете просто додати input:radio { /* styles here */ }або input[type="radio"] { /* styles here */ }до вашого css. Немає необхідності використовувати окремий клас для визначення правил стилю, коли ви застосовуєте їх також до всіх елементів, які є радіовходом.
MistyDawn


5

Хм За замовчуванням, <label>є display: inline;і <input>є (приблизно, принаймні) display: inline-block;, тому вони обоє повинні знаходитися на одному рядку. Див. Http://jsfiddle.net/BJU4f/

Можливо, таблиця стилів установки labelабо inputв display: block?


3

Я припускаю, що проблема полягає в тому, що вони переносяться на окремі рядки, коли вікно занадто вузьке. Як зазначали інші, за замовчуванням мітка та введення мають бути "display: inline;", тому, якщо у вас немає інших правил стилю, які змінюють це, вони повинні відображатись в одному рядку, якщо є місце.

Без зміни розмітки неможливо буде це виправити, використовуючи лише CSS.

Найпростіший спосіб виправити це - обернути перемикач та мітку елементом блоку, таким як a pабо a div, а потім запобігти його обтіканню за допомогою 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>

3

Я завжди уникаю використання, 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>


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 - або будь-яку іншу бібліотеку;))


1

** Використана таблиця для вирівнювання радіо та тексту в один рядок

<div >
  <table>
    <tbody>
      <tr>
        <td><strong>Do you want to add new server ?</strong></td>
        <td><input type="radio" name="addServer" id="serverYes" value="1"></td>
        <td>Yes</td>
        <td><input type="radio" name="addServer" id="serverNo" value="1"></td>
        <td>No</td>

      </tr>
    </tbody>
  </table>
</div>

**


1
Будь ласка, додайте коротке пояснення того, що ви зробили, щоб автор міг краще зрозуміти ваше рішення
giuseppedeponte

0

Я не зміг відтворити вашу проблему в Google Chrome 4.0, IE8 або Firefox 3.5 за допомогою цього коду. Етикетка та перемикач залишились на одному рядку.

Спробуйте помістити їх обох всередину <p>тегу, або встановіть перемикач таким, щоб він був вбудованим, як запропонував Елітний Джентльмен.



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>

1. Ні, це не так - це для позначення елементів форми , в меню чи ні. 2. Ви маєте намір вказати, який елемент форми описує мітка, ставлячи елементи форми idяк значення forатрибута на <label>елементі. Ваш приклад пропускає це.
Пол Д. Уейт,

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

Якщо проблема полягає в тому, що мітка та введення переносяться у два рядки, коли вікно занадто вузьке, видаліть пробіли між ними; наприклад:

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

Якщо вам потрібен простір між елементами, використовуйте нерозривні пробіли ( &amp; nbsp;) або CSS.


0
fieldset {
  overflow: hidden
}

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

label {
  float: left;
  clear: both;
  display:initial;
}

input[type=radio],input.radio {
  float: left;
  clear: both;     
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.