2012-05-30 5 views
2

Рассмотрим следующий код:сделать линию дивы с границами и краями заполнить ширину динамически

CSS:

.output { 
    margin-right:10px; 
    border:1px solid #000; 
} 
.box{ 
    border-right:1px solid #000; 
} 
.first{ 
    border-left:1px solid #000; 
} 

HTML:

<div class="line"> 
    <div class="output">5</div> 
    <div class="boxes"> 
     <div class="box first"><span>&nbsp;</span></div> 
     <div class="box"><span>&nbsp;</span></div> 
     <div class="box"><span>&nbsp;</span></div> 
     <div class="box"><span>&nbsp;</span></div> 
     <div class="box last"><span>&nbsp;</span></div> 
    </div> 
</div> 

Я хочу divs в горизонтальную линию и заполнить 'line' div '(пространство родителя), но динамически, например, Я не хочу указывать фиксированную ширину для каждого из ящиков, я просто хочу, чтобы они заполнили горизонтальное пространство.

Можно ли это сделать?

+2

«Я хочу, чтобы divs располагались горизонтально ...» - вы имеете в виду элементы '.box' или прямые потомки элемента' .line' ('.output' и' .boxes')? пожалуйста, перефразируйте свой вопрос для ясности. –

+0

Выход и коробки должны сидеть бок о бок. Коробки будут содержать 2 или более «ящика», и я хочу, чтобы они были горизонтально выстроены вместе с выходом в строке - надеюсь, что это имеет смысл – sam

+0

, поэтому выше должно выглядеть что-то вроде | 5 | | | | | | | – sam

ответ

1

Простой и widely supported способ сделать это display: table.

См:http://jsfiddle.net/thirtydot/tPCwD/

Обратите внимание, что вы можете изменить количество .box элементов и он все еще работает.

.line { 
    border: 3px solid red; 
    display: table; 
    width: 100%; 
} 
.output { 
    padding-right: 10px; 
    display: table-cell; 
    width: 1px; /* take the minimum amount of space */ 
    white-space: nowrap; 
} 
.output > span { 
    border:1px solid #000; 
} 
.boxes { 
    display: table; 
    width: 100%; 
    table-layout: fixed; /* to force equal width columns */ 
} 
.box { 
    border-right:1px solid #000; 
    display: table-cell; 
    background: #ccc; 
} 
.first { 
    border-left:1px solid #000; 
} 

Если необходима поддержка IE7 и ниже, вы можете использовать JavaScript только для тех браузеров (условный комментарий). Есть .htc JavaScript polyfill available, но я не уверен, насколько хорошо он будет работать с этим макетом. Кроме того, вы можете просто использовать реальный <table>.

+0

NOOO! Не таблицы для макета! ;-) – Gareth

+0

отличный ответ, это именно то, что я хотел поблагодарить вас! У меня есть одна последняя небольшая проблема: мне нужно обернуть каждый div в тег привязки, чтобы сделать его кликабельным, однако, когда я это делаю, он разбивает ширину этого div, есть ли способ сделать эти divs доступными для кликов? – sam

+0

Добро пожаловать. Самое быстрое исправление для этого - изменить элементы 'div' на элементы' a': http://jsfiddle.net/thirtydot/tPCwD/1/. – thirtydot

0

Если вы хотите, чтобы output и boxes заполнили горизонтальное пространство, я бы использовал float:left по телефону output. Таким образом, это займет столько места, сколько потребуется, и поле boxes заполнит остальную часть пространства.

Если, с другой стороны, вы хотите иметь пять boxdiv с, чтобы заполнить их родителей, просто дайте каждой width:20% и установить box-sizing:border-box учитывать для границ. В этом случае вам нужно дать браузеру некоторое представление о том, насколько большой каждый ящик должен быть по отношению друг к другу, иначе как он узнает, какое окно будет расширяться, чтобы заполнить пространство?

Другая альтернатива для 5 box es, если вы хотите быть на «режущей кромке», - это посмотреть на flexbox specification.

+0

Привет, гарет, я не могу сделать ширину 20%, потому что количество ящиков, которые у меня могут быть, может варьироваться от 2 до 100, извините, я должен был упомянуть об этом в вопросе. Когда я плаваю их влево, я всегда получаю дополнительное пространство справа, которое они не заполняют – sam

+0

В этом случае flexbox звучит как только то, что вам нужно.К сожалению, сейчас это экспериментально, поэтому он не будет работать в IE или Opera, и согласно [этой странице] (http://caniuse.com/flexbox) Firefox и Safari имеют частичную поддержку на данный момент. – Gareth

+0

Я также хочу, чтобы он получил широкую поддержку, а не CSS3 или HTML5, спасибо! – sam

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

  • Нет связанных вопросов^_^