2016-08-29 4 views
0

Я пытаюсь установить свою форму так, чтобы она имела поле ввода слева с кнопкой отправки справа. Однако мне нужно, чтобы поле ввода занимало все оставшееся пространство минус пробел 1rem.Поле ввода рядом с кнопкой отправки (неизвестная ширина + пробел)

Я попытался с этим кодом:

<aside class="widget-area"> 
    <section class="widget-search"> 
     <form class="search-form"> 
      <label class="search-label"> 
       <span class="search-reader-text">Search for:</span> 
       <input type="search" class="search-field" placeholder="Search..." /> 
      </label> 
      <input type="submit" class="search-submit" /> 
     </form> 
    </section> 
</aside> 

.search-form { 
    display: table; 
    table-layout: fixed; 
    width: 100%; 
} 

.search-label { 
    display: table-cell; 
} 

.search-input { 
    display: table-cell; 
} 

Однако, все это делает переместить кнопку внутри поля ввода ...

Я также попробовал этот маршрут:

.search-form { 
    display: table; 
} 

.search-label { 
    display: table-cell; 
    padding: 0 1rem 0 0; 
} 

.search-input { 
    display: table-cell; 
} 

Теперь кнопка находится рядом с полем ввода, но она выходит из контейнера ...

+2

Там нет поиска входов в вашем HTML-кода и ввод данных не имеет типа. Не могли бы вы улучшить свой пример? – FelipeAls

+0

Рассмотрите возможность использования пространства 1ch вместо 1rem для разделения ввода и кнопки. Рем - вертикальные относительные единицы, а ch - относительные единицы, поэтому они имеют больше смысла в этом контексте. – Ragdoll

+0

@ragdoll Как только 1 (r) em определяется как высота некоторой ссылки, вы можете использовать ее для горизонтальных и/или вертикальных объектов. Это относительная единица, определенная после вертикальной ссылки, а не «вертикальная относительная единица». – FelipeAls

ответ

2

Вы можете использовать Flexbox на контейнере, чтобы ваш вход мог принимать любое оставшееся пространство.

Codepen с двумя примерами, где кнопки имеют разную ширину и все же, вход адаптируется к каждой ситуации автоматически.

Соответствующий CSS является:

.form-line { 
    display: flex; 
} 
.search-input { 
    flex: 1 0 auto; 
} 

где 3 компоненты гибких средств: «может расти, не сжимаются, flex-basis набор для авто» (несколько связанных с начальной шириной здесь)

Совместимость: IE9 +
шпаргалку: CSS-tricks

Примечание: Я добавил for/id на этикетке/входа, так что аль читатели с экрана могут связывать их и читать этикетку своим пользователям

+0

Ваш пример делает именно то, что я хочу сделать, однако я не могу заставить его работать с размером шрифта – Dacramash

+0

Итак, после игры с кодом на некоторое время кажется, что добавив min-width: 0 и width : 100% к моему полю поиска, он работает даже с размером шрифта. Я также должен был установить свойство shrink равным 1 :) – Dacramash

0

Почему бы вам не сделать это?

.search-form { 
 
    display: table; 
 
    table-layout: fixed; 
 
    width: 100%; 
 
} 
 

 
.search-label { 
 
    float: left; 
 
    width:200px; 
 
    background: lightblue; 
 
} 
 

 
.search-submit { 
 
    width: calc(100% - 200px); 
 
    box-sizing: border-box; 
 
}
<aside class="widget-area"> 
 
    <section class="widget-search"> 
 
     <form class="search-form"> 
 
      <label class="search-label">Hello</label> 
 
      <input class="search-submit" /> 
 
     </form> 
 
    </section> 
 
</aside>

+0

Что делать, если метка короче, чем «Имя» или длиннее в немецком/финском/французском переводе, чем на оригинальной английской этикетке?Ширина 200px - это предположение, которое вам не нужно (и я бы предпочел бы, если бы я мог его избежать) – FelipeAls

+0

да, если вы хотите, чтобы он был динамическим, вам нужно рассчитать его с помощью jquery или прочитать в flexbox –

Смежные вопросы