2014-09-19 4 views
0

Я пытаюсь создать приложение чата, где каждое новое сообщение создает новый div, который вставлен в нижней части контейнера, таким образом ударяя предыдущее сообщение (-и) в верхнюю часть контейнера , Я могу получить сообщения, которые нужно добавить в контейнер, но не может заставить позиционирование работать правильно.make css3 divs float to top

HTML (пример):

<div id='chat_container'> 
    <div class='message'>Message 1</div> 
    <div class='message'>Message 2</div> 
</div> 

CSS:

#chat_container{ 
        position: relative; 
        height: 240px; 
       } 


.message{ 
      position: absolute; 
      bottom: 0; 
     } 

Если я использую выше стиль, каждый последующий .message ДИВ коробка будет вставлен в том же месте, что и предыдущие сообщения, тем самым скрывая их. Я хочу передать сообщение 1 в начало страницы, не полагаясь на javascript для обновления свойств стиля.

+0

Все решения, которые я видел на SO, связанные с этим проблемы дизайна использовать JavaScript/JQuery, чтобы установить полосу прокрутки внизу. Альтернативой является добавление новых сообщений в верхней из 'chat_container'. –

+0

Тот факт, что вы упоминали термин« IF »в своем заявлении, в принципе это означает, что есть условие, которое должно применяться, чтобы программа/приложение/сайт и т. д. могли принять решение Если вы не хотите использовать javascript, это нормально. Но помните что-то или где-то будет условие.И я не помню HTML, имеющего 'if {} else {}' – Arty

+0

Я просто считаю удивительным, что CSS не имеет метода для того, что по существу позиционирует элементы div относительно родительского контейнера снизу вверх, вместо другой способ вокруг. Я против делать что-то подобное с JS, потому что это должно обрабатываться CSS. – boody

ответ

0

Есть решение для Вашего вопроса:

<div id='chat_container'> 
    <div id='wrapper'> 
    <div class='message'>Message 1</div> 
    <div class='message'>Message 2</div> 
    </div> 
</div> 

CSS:

#chat_container{ 
    height: 240px; 
    display: table; 
} 
.wrapper{ 
    display: table-cell; 
    vertical-align: bottom; 
} 
.message{ 
    position: relative; 
} 
+0

этот вид работал, но у меня были проблемы с переполнением. Учитывает ли этот тип отображения переполнение? Похоже, что это добавление новых div без уважения переполнения и высоты в моем CSS. – boody

1

Всемогущий FLEX приходит на помощь!

#chat_container { 
    display:flex; 
    flex-direction:column-reverse 
} 
.message { 
    display:block; 
    width:100%; 
    margin:20px auto; 
    border:1px solid #000; 
} 

See fiddle

Некоторые концептуализация

CSS3 Flexible Box или Flexbox, является режим компоновки, предусматривающий расположение элементов на странице, так что элементы ведут себя предсказуемо, когда в макете страницы должны быть размещены различные размеры экрана и различные дисплеи размером . Для многих приложений модель гибкого ящика обеспечивает улучшение по сравнению с моделью блока в , что оно не использует поплавки, а также поля полей гибкого контейнера не совпадают с полями его содержимого.

Многие дизайнеры найдут модель flexbox более легкой в ​​использовании. Ребенок Элементы в гибкой коробке могут быть выложены в любом направлении и могут иметь гибкие размеры для адаптации к пространству дисплея. Таким образом, позиционирование ребенка элементов намного проще, а сложные макеты могут быть достигнуты более и с кодом более чистого кода, так как порядок отображения элементов не зависит от их порядка в исходном коде. Эта независимость преднамеренно влияет только на визуальный рендеринг, оставляя речевой порядок и навигацию на основе исходного кода.

от Mozilla MDN "Using CSS flexible boxes"

+1

хорошее решение. я думаю, что мы должны продвигать такие функции, как flexbox и встроенный блок, используя float и display: table, чтобы выполнить те вещи, на которых они не были предназначены. –

+0

flex является относительно новым из-за проблем с поддержкой браузера, но теперь, когда все современные браузеры поддерживают его, все больше людей принимают эту модель каждый день, так как она работает как магия во многих сценариях, что предыдущий CSS не покрывал – Devin

+0

, что он получает мои 80% но он помещает все новые сообщения выше (вместо ниже) первого сообщения. Я просматриваю документацию сейчас ... – boody