HTML formunda <label> ve <input> aynı satırda nasıl görünür?


94

Bir web sitesi için kayıt formu oluşturuyorum. Her etiketin ve ona karşılık gelen giriş öğesinin aynı satırda görünmesini istiyorum.

İşte kodum:

#form {
 background-color: #FFF;
 height: 600px;
 width: 600px;
 margin-right: auto;
 margin-left: auto;
 margin-top: 0px;
 border-top-left-radius: 10px;
 border-top-right-radius: 10px;
 padding: 0px;
}

label {
 font-family: Georgia, "Times New Roman", Times, serif;
 font-size: 18px;
 color: #333;
 height: 20px;
 width: 200px;
 margin-top: 10px;
 margin-left: 10px;
 text-align: right;
 clear: both;
}

input {
 height: 20px;
 width: 300px;
 border: 1px solid #000;
 margin-top: 10px;
 float: left;
}
<div id="form">

 <form action="" method="post" name="registration" class="register">
  
  <fieldset>

   <label for="Student"> Name: </label>
   <input name="Student" />
   <label for="Matric_no"> Matric number: </label>
   <input name="Matric_no" />
   <label for="Email"> Email: </label>
   <input name="Email" />
   <label for="Username"> Username: </label>
   <input name="Username" />
   <label for="Password"> Password: </label>
   <input name="Password" type="password" />
   
   <input name="regbutton" type="button" class="button" value="Register" />
  </fieldset>

 </form>
</div>  


Bu cevabın, denemek ve hata yapmak istemediğinizi söylediğiniz için reddedilmemesini seviyorum;)
Anna Klein

Yanıtlar:


72

Öğeleri yüzdürmek istediğinizi varsayarsak, labelöğeleri de yüzdürmeniz gerekir .

Bunun gibi bir şey işe yarar:

label {
    /* Other styling... */
    text-align: right;
    clear: both;
    float:left;
    margin-right:15px;
}

Alternatif olarak, daha yaygın bir yaklaşım input/ labelöğelerini gruplara ayırmak olabilir :

<div class="form-group">
    <label for="Student">Name:</label>
    <input name="Student" id="Student" />
</div>

Not fornitelik karşılık gelmelidir id, bir labelable elemanın değil onun name. Bu, kullanıcıların labelilgili form öğesine odaklanmak için öğesini tıklatmasına olanak tanır .


1
Teşekkürler! tam da başarmak istediğim şey buydu. Her iki yöntem de benim için iyi çalışıyor. 1 sorum var, css'de, neden div formunun metnini ortaya hizalıyorum ve sonra etiketleri sağa hizalıyorum? div formunu ortalamazsam kodumu bozar mı?
luchxo

Güzel cevap, özellikle de clear: both;benim durumuma yardımcı olan sözler .
Sirar Salih

33

"display:flex"Tarzın bu unsurları aynı çizgide yapmanın iyi bir yolu olduğunu gördüm . Div öğesinin ne tür olduğu önemli değil. Özellikle girdi sınıfı form kontrolü ise, bootstrap, inline-block gibi diğer çözümler iyi çalışmayacaktır.

Misal:

<div style="display:flex; flex-direction: row; justify-content: center; align-items: center">
    <label for="Student">Name:</label>
    <input name="Student" />
</div>

Ekran hakkında daha fazla ayrıntı: esnek:

esnek yönü: satır, sütun

gerekçelendirme içeriği: flex-end, center, space-between, space-around

hizalama öğeleri: gerdirme, esnek başlangıç, esnek uç, merkez


esnekliğin varlığından haberi yoktu
Espoir Murhabazi

18

aaa ## HTML Bunları bir div içine sarmanızı öneririm, çünkü büyük olasılıkla onları belirli bağlamlarda gezdireceksiniz.

<div class="input-w">
    <label for="your-input">Your label</label>
    <input type="text" id="your-input" />
</div>

CSS

Daha sonra bu div içinde, her bir parçayı ortalamak inline-blockiçin kullanabileceğiniz vertical-alignveya taban çizgisini vb. Ayarlayabileceğiniz şekilde yapabilirsiniz (etiketleriniz ve girişleriniz gelecekte boyutlarını değiştirebilir ...

.input-w label, .input-w input {
    float: none; /* if you had floats before? otherwise inline-block will behave differently */
    display: inline-block;
    vertical-align: middle;    
}

jsFiddle

GÜNCELLEME: Mobil öncelikli medya sorguları ve esnek kutu ile 2016 ortası +

Bugünlerde işleri böyle yapıyorum.

HTML

<label class='input-w' for='this-input-name'>
  <span class='label'>Your label</span>
  <input class='input' type='text' id='this-input-name' placeholder='hello'>
</label>

<label class='input-w' for='this-other-input-name'>
  <span class='label'>Your label</span>
  <input class='input' type='text' id='this-other-input-name' placeholder='again'>
</label>

SCSS

html { // https://www.paulirish.com/2012/box-sizing-border-box-ftw/
  box-sizing: border-box;
  *, *:before, *:after {
    box-sizing: inherit;
  }
} // if you don't already reset your box-model, read about it

.input-w {
  display: block;
  width: 100%; // should be contained by a form or something
  margin-bottom: 1rem;
  @media (min-width: 500px) {
    display: flex;
    flex-direction: row;
    align-items: center;
  }
  .label, .input {
    display: block;
    width: 100%;
    border: 1px solid rgba(0,0,0,.1);
    @media (min-width: 500px) {
      width: auto;
      display: flex;
    }
  }
  .label {
    font-size: 13px;
    @media (min-width: 500px) {
      /* margin-right: 1rem; */
      min-width: 100px; // maybe to match many?
    }
  }
  .input {
    padding: .5rem;
    font-size: 16px;
    @media (min-width: 500px) {
      flex-grow: 1;
      max-width: 450px; // arbitrary
    }
  }
}

jsFiddle


her etiketi ve ona karşılık gelen öğeyi farklı bir div'e sarmam gerekiyor mu? ya da sadece bu tek
bölümdeki

"Etiket" için bir aralık ve bir girdi - <label>öğenin içinde şimdi bir gün.
sheriffderek

5

Eksik olan şey şamandıraydı: sol; işte HTML'de yeni yapılmış bir örnek

<div id="form">
<form action="" method="post" name="registration" class="register">
    <fieldset>
        <label for="Student" style="float: left">Name:</label>
        <input name="Student" />
        <label for="Matric_no" style="float: left">Matric number:</label>
        <input name="Matric_no" />
        <label for="Email" style="float: left">Email:</label>
        <input name="Email" />
        <label for="Username" style="float: left">Username:</label>
        <input name="Username" />
        <label for="Password" style="float: left">Password:</label>
        <input name="Password" type="password" />
        <input name="regbutton" type="button" class="button" value="Register" />
    </fieldset>
</form>

Bunu yapmanın daha verimli yolu, etiketlere bir sınıf eklemek ve float: left; CSS'deki sınıfa


4

Float kullanmanın yanı sıra, diğerlerinin de önerdiği gibi , aynı satırda etiket ve girdiye sahip olmak için "yatay form" sınıfını kullanabileceğiniz Bootstrap gibi bir çerçeveye de güvenebilirsiniz .

Bootstrap'e aşina değilseniz şunları eklemeniz gerekir:

  • link Bootstrap CSS (diyor Üst bağlantı <- Son derlenmiş ve minified CSS ->) , baş, hem de birkaç bölüm ekleyin:
  • div class = "form-group"
  • div class = "col -..."
  • ile birlikte class = "col-sm-2 kontrol etiketli" aşağıda yer özyükleme gösterdiği gibi, her etiket.
  • Düğmenizi Bootstrap uyumlu olması için yeniden biçimlendirdim.
  • ve alan kümesi kullandığınız için form kutunuza bir açıklama ekledi.

Çok basittir ve yukarıda listelediğiniz gibi biçimlendirme için kayan sayılarla veya bir ton CSS ile uğraşmanıza gerek kalmaz.

  <div id="form">
    <div class="row">
      <form action="" method="post" name="registration" class="register form-horizontal">
        <fieldset>
        <legend>Address Form</legend>

      <div class="form-group">
        <label for="Student" class="col-sm-2 control-label">Name:</label>
          <div class="col-sm-6">
            <input name="Student" class="form-control">
          </div>
      </div>

      <div class="form-group">
        <label for="Matric_no" class="col-sm-2 control-label">Matric number: </label>
          <div class="col-sm-6">
            <input name="Matric_no" class="form-control">
          </div>
      </div>

      <div class="form-group">
        <label for="Email" class="col-sm-2 control-label">Email: </label>
          <div class="col-sm-6">
            <input name="Email" class="form-control">
          </div>
      </div>

      <div class="form-group">
        <label for="Username" class="col-sm-2 control-label">Username: </label>
          <div class="col-sm-6">
            <input name="Username" class="form-control">
          </div>
      </div>

      <div class="form-group">
        <label for="Password" class="col-sm-2 control-label">Password: </label>
          <div class="col-sm-6">
            <input name="Password" type="password" class="form-control">
          </div>
      </div>

      <div>
        <button class="btn btn-info" name="regbutton" value="Register">Submit</button>
      </div>

      </fieldset>
    </form>
    </div>
  </div>
</div>


3

Bootstrap 4 için şu şekilde yapılabilir: class="form-group" style="display: flex"

<div class="form-group" style="display: flex">
    <label>Topjava comment:</label>
    <input class="form-control" type="checkbox"/>
</div>

3

Bootstrap 4 ile Angular 6 kullanıyorum ve şu şekilde çalışıyorum:

<div class="form-group row">
    <div class="col-md-2">
        <label for="currentPassword">Current Password:</label>
    </div>
    <div class="col-md-6">
        <input type="password" id="currentPassword">
    </div>
</div>

1
Basit ve etkili.
caram

2

Bunu birkaç farklı şekilde yaptım, ancak etiketleri ve karşılık gelen metin / giriş verilerini aynı satırda tutan ve her zaman ebeveynin genişliğine mükemmel bir şekilde saran bulduğum tek yol display: inline table.

CSS

.container {
  display: inline-table;
  padding-right: 14px;
  margin-top:5px;
  margin-bottom:5px;
}
.fieldName {
  display: table-cell;
  vertical-align: middle;
  padding-right: 4px;
}
.data {
  display: table-cell;
}

HTML

<div class='container'>
    <div class='fieldName'>
        <label>Student</label>
    </div>
    <div class='data'>
        <input name="Student" />
    </div>
</div>
<div class='container'>
    <div class='fieldName'>
        <label>Email</label>
    </div>
    <div class='data'>
      <input name="Email" />
    </div>
</div>

Yukarıdaki tüm cevaplardan, önerdiğiniz gibi display: inline-table kullanmak, etiketimi ve giriş kutumu bir div'e sarmak zorunda kalmadan benim için çalıştı.
coder101

2

Etiketi ve girişi bir bootstraps div içine sarın

<div class ="row">
  <div class="col-md-4">Name:</div>
  <div class="col-md-8"><input type="text"></div>
</div>

2

Bu şey iyi çalışıyor, herhangi bir css olmadan aynı satıra radyo düğmesi veya etiketli onay kutusu koy. <label><input type="radio" value="new" name="filter">NEW</label> <label><input type="radio" value="wow" name="filter">WOW</label>


1


-2

Diğer bir seçenek de formun içine bir tablo yerleştirmektir. (aşağıya bakın) Tabloların bazı insanlar tarafından hoş karşılanmadığını biliyorum, ancak duyarlı form düzenleri söz konusu olduğunda iyi çalıştıklarını düşünüyorum.

<FORM METHOD="POST" ACTION="http://www.cs.tut.fi/cgi-bin/run/~jkorpela/echo.cgi">
<TABLE BORDER="1">
  <TR>
    <TD>Your name</TD>
    <TD>
      <INPUT TYPE="TEXT" NAME="name" SIZE="20">
    </TD>
  </TR>
  <TR>
    <TD>Your E-mail address</TD>
    <TD><INPUT TYPE="TEXT" NAME="email" SIZE="25"></TD>
  </TR>
</TABLE>
<P><INPUT TYPE="SUBMIT" VALUE="Submit" NAME="B1"></P>
</FORM>

2
Düzen için tablolar kullanılmamalıdır.
Michal Perłakowski

2
1) Tüm büyük harfler canımı yakıyor. 2) @Gothdo'nun dediği gibi tablolar düzende kullanılmamalıdır, yalnızca tablo verilerinde kullanılmalıdır goo.gl/V9dRtp
Padawan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.