2015-11-02 2 views
1

Я не смог найти какие-либо дубликаты этого, так что здесь идет ...Поплавок дива внутри Абсолютного DIV с относительным Родителем

http://jsfiddle.net/bmyLru9w/

<div style="height: 200px; width: 200px; background-color:#ff0000"></div> 
<div id="base" style="height: 30px; width: 30px; background-color:#00ff00"> 
    <div id="popup"> 
     <div> 
     <div class="in-pop"></div> 
     <div class="in-pop"></div> 
     <div class="in-pop"></div> 
      <div class="in-pop"></div></div> 
    </div> 
</div> 

.in-pop{ 
    background-color:#ffff00; 
    width: 20px; 
    height: 20px; 
    border: 1px solid #000; 
    float: left; 
} 

#base{ 
    position:relative; 
} 

#popup{ 
    background-color:#0000ff; 
    position:absolute; 
    bottom: 30px; 
} 

У меня есть DIV (зеленый), который сидит на в нижней части моего содержания. Мне нужно всплывающее окно (для зависания), чтобы оно было на вершине этого зеленого div. Всплывающее окно синего цвета на скрипке. Затем внутри этого всплывающего окна у меня есть неизвестное количество div, которые являются float: left. Моя проблема в том, что они складываются вертикально, а не горизонтально, и я не могу определить ширину синего div, потому что он изменяется. Кажется, это происходит из-за «относительного» зеленого div, но тогда, если я этого не сделаю, я не могу правильно позиционировать синий div поверх него.

Я мог бы использовать положение: фиксированное и отрицательное верхнее поле, но отрицательные поля довольно грубые. Может быть, это мой единственный вариант.

Любые идеи?

+0

Основная проблема заключается в том, что ваш элемент '# popup' находится внутри вашего зеленого div. Поэтому ширина застряла на 30px (100% от ее родителя). –

ответ

1

Вы можете попробовать добавить это:

#popup{ 
    width: 100vw; 
} 

Это позволит сделать синий ДИВ всегда ширина окна просмотра, так что ваши элементы могут плавать, как вы ожидаете.

Смотреть это fiddle

Другой способ может быть таким:

#popup{ 
    display:flex; 
} 

Смотреть это fiddle

+0

Оба делают это лучше, но vw не работает, потому что у меня есть фоны и другие стили, чтобы добавить всплывающее окно, которое растягивается до конца экрана, а flex поддерживается только для браузеров css3. – luke

+0

flexbox поддерживается во всех современных браузерах, включая IE10 и выше. Если вы пытаетесь поддерживать IE9 и ниже, вам нужно будет изучить решение javascript. – zgood

1

Ваш #base имеет фиксированную ширину 30px, которая заставляет что-либо в нем, чтобы быть в MOST 30px широкий.

Редактировать

Мне нравится решение zgood дал с помощью Flexbox. Вот как настроить flex так, чтобы он работал в абсолютном большинстве браузеров:

display : -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */ 
display : -moz-box;  /* OLD - Firefox 19- (doesn't work very well) */ 
display : -ms-flexbox; /* TWEENER - IE 10 */ 
display : -webkit-flex; /* NEW - Chrome */ 
display : flex;   /* NEW, Spec - Opera 12.1, Firefox 20+ */ 
+0

Хорошо, что имеет смысл. Как заставить ребенка не полагаться на ширину базы? – luke

+0

Обновлено Fiddle - http://jsfiddle.net/fishgraphics/bmyLru9w/6 –

+0

Это отлично работало в FF, Chrome и Safari, но не работает в IE10 +. Кажется, что IE ненавидит идею, что theres flexbox внутри абсолютно позиционированного div. С настройкой я также могу получить его, чтобы развернуть все предметы, но также расширяет зеленую коробку. – luke

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