2013-08-14 3 views
1

Это то, что я делаю прямо сейчас. Я использую LESS CSS для моего дизайна. Мне нужно поставить 2 промежутка между указанным входом. все элементы должны быть 100% ширины. промежутки должны всегда ширины ширины ширины 20px могут быть изменены в соответствии с шириной экрана. Может кто-нибудь мне помочь?Span, Input, Span Ширина 100% Проблема с CSS

ширина пролета: 20px;

How I need

<div class="wrapper"> 
<span class="span-one">span</span> 
<input type="text" class="input"> 
<span class="span-two">span</span> 
</div> 
+1

Что CSS вы в настоящее время? –

+0

Похоже, что с этим связано изменение размера 'input'. Вы не можете указать 'input'' width: 100% ', потому что он должен оставить место для двух 20px-интервалов. И если вы дадите ему 'width: auto', оно не займет оставшегося пространства, оно просто займет ширину по умолчанию для браузера для' input'. –

+2

Вот [jsFiddle для всех, чтобы использовать в качестве отправной точки] (http://jsfiddle.net/roryokane/DZBBk/) –

ответ

1

Вы можете добиться этого с абсолютным позиционированием. Он выйдет из потока и поместит их поверх ввода. Вы также должны поместить ввод в div, чтобы сделать это, поскольку он естественно не получает 100% ширины при отображении: блок установлен на нем.

HTML

<div class="wrapper"> 
<span class="span-one">span</span> 
<div class="input"><input type="text" class="input"></div> 
<span class="span-two">span</span> 
</div> 

CSS

.wrapper { position: relative; } 

div.input { margin: 0 20px; } 

input { 
    width: 100%; 
    box-sizing: border-box; 
    -moz-box-sizing: border-box; 
    -webkit-box-sizing: border-box; } 

span.span-one { 
    position: absolute; 
    width:20px; height:20px; 
    left:0; top:0; 
    background-color: red; } 

span.span-two { 
    position: absolute; 
    width:20px; height:20px; 
    right:0; top:0; 
    background-color: red; } 

Вот скрипка: http://jsfiddle.net/ywUeu/1/

Конечно слово 'пролет' в пролетах длиннее, чем 20px, так что выходит из диапазона , Лучше всего добавить «размер окна» для ввода, как и я.

+0

Нет. Я пытался. Последний пролет снижается. и есть небольшие промежутки между диапазоном и вводом, когда мы делаем это. Попробуйте добавить цвета backgroud в свой код. Тогда вы можете увидеть эту проблему. –

+0

@MinuwanDeshapriya не уверен, что вы имеете в виду. Пожалуйста, см. Скрипку, я сделал это с цветами фона вместо. Кажется, все в порядке? – Coop

+0

Извините, просто добавлена ​​новая ссылка на скрипку. Реализованная старая ссылка все еще была там. – Coop

0

С вашей HTML:

.wrapper, .text { 
    width: 100%; 
} 
.wrapper > span { 
    display: inline-block; 
    width: 20px; 
} 
.wrapper.input { 
    width: calc(100% - 40px); 
} 

Лучший способ:

<div class="wrapper"> 
    <div class="input"><input type="text" class="text-input"></div> 
</div> 

CSS:

/* 
.wrapper, .input{ width is 100% by default } 
*/ 
.text-input{ 
    margin: 0 20px; 
    width: calc(100% - 40px); 
} 
+0

Предупреждение: 'calc' [не поддерживается в IE8 и ниже] (http://caniuse.com/#feat=calc). И 'calc' заметно замедляет пересчет стиля при изменении размера окна на моей машине. –

1

позиционирования не является идеальным но вы уже одобрил ответ ... это является FYI ....

Вместо использования позиционирующего: display: table-cell;

http://jsfiddle.net/Riskbreaker/CBC5A/1/

+1

'display: table-cell' на элементах' input' может быть изворотливым, например: http://stackoverflow.com/questions/15625878/displaytable-cell-not-working-on-an-input-element. Я на самом деле не пробовал это какое-то время, но, чтобы быть в безопасности, я включил элемент оболочки в jsFiddle в свой комментарий к вопросу. – thirtydot

+0

У меня есть проверка последнего Chrome-FF-IE -Safari, и ничего похожее не выключено – Riskbreaker

+0

Попробуйте удалить 'input {display: table-cell; } '. Ничего не меняется. Это * как-то * 'width: inherit', который дает' input' правильную ширину. – thirtydot

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