CSS делает ширину: стоп на 100% против плавающих объектов
Попробуйте следующее:
<div style="float:left"><p>LEFT</p></div>
<div style="float:right"><p>RIGHT</p></div>
<div><p>
<input type="text" style="width:100%" />
<input type="submit" />
<a href="">Link</a>
</p></div>
В результате LEFT и RIGHT находятся в первой строке, текст ввода занимает всю вторую строку, а "Отправить" и "Ссылка" находится на третьей строке.
Я хочу, чтобы все они были на одной строке, и если окно расширено, текст должен расширяться. Как это сделать без таблиц?
Ответы
Ответ 1
Это невозможно сделать без установки точной ширины.
Установите точную ширину для левого и правого столбцов, а также поля в центр div. Вот мое решение
JsFiddle
http://jsfiddle.net/xe4EJ/2/
Код
<div style="float:left; width:200px; background-color:red"><p>LEFT</p></div>
<div style="float:right; width:200px; background-color:red"><p>RIGHT</p></div>
<div style="margin:0 210px 0 210px"><p>
<input type="text" style="width:80%" />
<input type="submit" />
<a href="">Link</a>
</p></div>
Ответ 2
Смотрите: http://jsfiddle.net/thirtydot/mSwBe/
Это работает во всех современных браузерах.
Это достаточно близко к IE7 (не поддерживает box-sizing: border-box
, но в этом случае это можно легко проделать довольно легко).
box-sizing: border-box
заставляет текст input
точно вписываться в ширину его содержащего span
.
overflow: hidden
очень полезен.
HTML:
<div id="left"><p>LEFT</p></div>
<div id="right"><p>RIGHT</p></div>
<div id="middle">
<span id="buttonContainer">
<input type="submit" />
<a href="">Link</a>
</span>
<span id="textContainer">
<input type="text" />
</span>
</div>
CSS
#left, #right, #middle {
padding: 5px;
}
#left {
float: left;
background: #0ff;
}
#right {
float: right;
background: #0ff;
}
#middle {
background: #f0f;
overflow: hidden;
}
#middle input {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
#textContainer {
overflow: hidden;
display: block;
}
#textContainer input {
width: 100%;
}
#buttonContainer {
float: right;
}
Ответ 3
Вам нужно поместить все влево и использовать некоторые относительные значения для div.
<div style="float:left; margin-right: 20px; width: 20%;"><p>LEFT</p></div>
<div style="float:left; margin-right: 20px; width: 20%;"><p>RIGHT</p></div>
<div style="float:left; margin-right: 20px; width: 50%;"><p>
<input type="text" style="width:60%; " />
<input type="submit" style="display:inline; width: 55px;" />
<a href="">Link</a>
</p></div>
Вы можете увидеть здесь
Это БУДЕТ ломаться, когда страница попадает в определенную узость, поэтому вам может потребоваться установить минимальную ширину на вашем теле.
Ответ 4
лучше плавать каждый элемент слева, а затем вы должны дать каждому элементу ширину:
<div style="width:100%">
<div style="float:left;width:10%"><p>LEFT</p></div>
<div style="float:left;width:80%">
<p style="clear:both">
<input type="text" style="float:left;width:79%" />
<input type="submit" style="float:left;width:10%" />
<a href="" style="float:left;width:10%">Link</a>
</p>
</div>
<div style="float:left;width:10%"><p>RIGHT</p></div>
</div>
Ответ 5
Лучшим подходом (построением решения от Ctrl3) было бы изолировать ввод текста в своем собственном div и переместить ссылку и отправить кнопку, чтобы сидеть внутри статического правого элемента div:
<div style="float:left; width:200px; background-color:red"><p>LEFT</p></div>
<div style="float:right; width:300px; background-color:red">
<input type="submit" />
<a href="">Link</a>
RIGHT</div>
<div style="margin:0 310px 0 210px"><p>
<input type="text" style="float:left; width:100%; display:run-in;" />
</p></div>
Посмотрите на работу