2013-08-28 2 views
4

Вот примерИмея плавающие дочерние элементы определяют ширину родительского

http://jsfiddle.net/BringMeAnother/LwXhE/

// html 
<div class="container clearfix"> 
    <div class="child"></div> 
    <div class="child"></div> 
    <div class="child"></div> 
</div> 

// css 
.container { 
    background: red; 
    padding: 10px; 
} 
.child { 
    width: 100px; 
    height: 100px; 
    float: left; 
} 
.child:nth-child(even) { 
    background: green; 
} 
.child:nth-child(odd) { 
    background: blue; 
} 

.clearfix:after { 
    content: "."; 
    display: block; 
    clear: both; 
    visibility: hidden; 
    line-height: 0; 
    height: 0; 
} 

Контейнер с красным фоном, кажется, всегда растягиваться до 100%. Я бы хотел сделать, чтобы его ширина зависела от плавающих детей, поэтому в этом случае 3 раза 100 пикселей.

Причина, по которой я хотел бы иметь это, как следует. В гибкой компоновке у меня есть контейнер, содержащий несколько дочерних элементов разных размеров. Ширина и количество детей могут варьироваться. Дети всегда плавают. Цель состоит в том, чтобы иметь детей с плавающей точкой. Итак, если у меня всегда есть один дочерний элемент, я бы просто установил его margin-right и margin-left для auto. Тем не менее, есть несколько детей, которые я хочу поставить рядом друг с другом, но после того, как они были упорядочены по горизонтали, я хотел бы, чтобы эта строка была сосредоточена на странице. Я не могу дать фиксированную ширину контейнера, так как количество детей и каждая их ширина не определяются заранее.

Я думаю, что я мог бы сделать это с помощью javascript, но мне интересно, есть ли чистое решение css. Благодаря

ответ

-3

Добавить position:fixed; в контейнер

.container { 
    background: red; 
    padding: 10px; 
    position:fixed; 

Fiddle

+1

Имея положение фиксированный не очень приемлем в большинстве ситуаций. – BringMeAnother

3

По оборачивать ваш контейнер DIV в других обертке DIV, вы можете центрирование красного контейнера DIV, а красный DIV будет только как и его плавающие дети.

HTML

<div class="centered"> 
    <div class="container"> 
     <div class="child"></div> 
     <div class="child"></div> 
     <div class="child"></div> 
    </div> 
</div> 

CSS

.centered { 
    text-align: center; 
} 
.container { 
    background: red; 
    padding: 10px; 
    display: inline-block; 
} 
.child { 
    width: 100px; 
    height: 100px; 
    float: left; 
} 
.child:nth-child(even) { 
    background: green; 
} 
.child:nth-child(odd) { 
    background: blue; 
} 

Fiddle: http://jsfiddle.net/SbPRg/

+0

Почему голос? – vegemite4me

+0

Я не голосовал, но причина очевидна: изменение содержания в стиле не является хорошей практикой – gok

+3

@gok Итак, почему бы не голосовать всем, кто предлагает добавить '

' на SO? – vegemite4me

4

Кроме Adsy предложение (установить положение контейнера к фиксировано), вы можете:

1) Использовать абсолютную позицию на контейнере:

HTML:

<div class="container"> 
<div class="child"></div> 
<div class="child"></div> 
<div class="child"></div> 
</div> 

CSS:

.container { 
    background: red; 
    padding: 10px; 
    position:absolute; 
} 
.child { 
    width: 100px; 
    height: 100px; 
    float: left; 
} 
.child:nth-child(even) { 
    background: green; 
} 
.child:nth-child(odd) { 
    background: blue; 
} 

http://jsfiddle.net/tKz8b/

2) Установите поплавок на контейнер, который хорош, если вам это нужно с относительным/статическим позиционированием :

HTML:

<div class="container"> 
    <div class="child"></div> 
    <div class="child"></div> 
    <div class="child"></div> 
</div> 
<div class="clearfix"></div> 
<div>Next</div> 

CSS:

.container { 
    background: red; 
    padding: 10px; 
    float: left; 
} 
.child { 
    width: 100px; 
    height: 100px; 
    float: left; 
} 
.child:nth-child(even) { 
    background: green; 
} 
.child:nth-child(odd) { 
    background: blue; 
} 

.clearfix:after { 
    content: "."; 
    display: block; 
    clear: both; 
    visibility: hidden; 
    line-height: 0; 
    height: 0; 
} 

http://jsfiddle.net/LYrWx/1/

+0

Есть ли решение для более чем одной строки элементов? http://stackoverflow.com/questions/36481408/how-to-get-rid-of-empty-space-on-the-right-of-a-container-with-floating-items –

+0

вот так? http://jsfiddle.net/ivanchaer/L6ojt8vs/ (если да, дайте мне знать, чтобы я мог опубликовать этот ответ по другому вопросу, спасибо!). –

0

Поздно партии здесь, но все, что вам действительно нужно, это добавить display: inline-block. И чтобы центрировать .container div, просто примените text-align: center к тому, что содержит it.

JSFiddle: http://jsfiddle.net/LwXhE/24/

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