Помогите сверстать чат
Нужно расположить блоки в виде чата, как на картинке. Помогите, пожалуйста, что я делаю не так и как это сделать правильнее, чище?
.text-align-center < text-align: center; >.item:nth-child(even) < direction: rtl; >.item < position: relative; margin: auto; white-space: nowrap; >div < display: block; >.person < display: inline-block; overflow: hidden; position: relative; vertical-align: middle; >.text < display: inline-block; vertical-align: middle; font-size: 30px; direction: ltr; >.all-chat
homework 5 Chat 9:03 Hi 9:05 Hello!
Отслеживать
9,644 4 4 золотых знака 35 35 серебряных знаков 72 72 бронзовых знака
задан 12 янв 2017 в 7:44
139 1 1 серебряный знак 12 12 бронзовых знаков
.item:nth-child(even) — а если у тебя будет несколько сообщений подряд от одного пользователя? Сделай просто отдельный классы для отправленного сообщения и для принятого сообщения. Может быть даже стоит в них разметку разную сделать
12 янв 2017 в 8:17
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Даю общие советы и перехожу к деталями вашего кода:
- При вёрстке интересуйтесь предназначением CSS-свойств. То есть довод использования — просто потому что «так работает» используйте в последнюю очередь (если всё остальное не работает). К примеру, вы используете свойство direction . Это свойство предназначено для указания направления текста. В большинстве языков текст пишется слева направо (значение ltr по умолчанию), но на арабском и иврите текст пишется справа налево и для этого текста указывается direction: rtl; . Получается, что вы используете это свойство не по назначению.
- Осмотрительней используйте абсолютное позиционирование. В идеале его использовать только когда нужно чтобы элементы перекрывали другие и элемент извлёкся из потока отображения. К примеру, модальные окна, выпадающие списки с более сложным отображением, чем стандартный select и т.д. Также используется для в некоторых рецептах вроде поместить иконку внутри текстового поля. Но в данном случае не вижу в потребности в абсолютном позиционировании.
- С большой осторожностью используйте псевдоселекторы (к примеру, first-child; , only-child , nth-child и т.д.). Потому что псевдоселекторы
- игнорируют видимый блок или нет. То есть если вы скроете один из блоков с помощью display: none , он всё равно будет учитываться при применении псевдоселектора.
- при применении учитывают лишь порядковый номер элемента относительно родителя. То есть псевдоселектор .item:nth-child(even) работает так «выбрать каждого чётного ребёнка, у которого есть класс item «, а не так «выбрать каждый чётный элемент с классом item «. Иллюстрирую примером:
.item:nth-child(even)
One (not item) Two (item) Three (item) Four (not item) Five (item) Six (item)
Если вы добавите элементы рядом с .item , вёрстка может сломаться.
Поэтому рекомендую посмотреть, может стоит задавать отдельные классы для особых типов элементов.
В данном случае, я полагаю также, что чат означает, что может быть несколько сообщений подряд от одного пользователя. Поэтому применение стилей только к чётным элементам, кажется неверным.
- Изучите flexbox. Расположение элементов с помощью float , clear , vertical-align не обладает такой мощью и не такое гибкое и сопровождаемое.
- Изучите CSS-методологию. BEM или SMACSS. Для того, чтобы вы могли легко менять вёрстку, а также если такие же блоки или подобные нужны на других страницах вы бы их без проблем добавляли и меняли. В примере, я буду использовать BEM.
- Не используйте безликие или неоднозначные имена вроде .item . Это же может быть что угодно. Применение этого класса зависит от того, кто в нём родитель и что рядом находится. А это значит, что если где-то добавится блок .item , то те же стили для него и применятся, что, возможно, будет нежелательно. Относитесь к селекторам также как к переменным. У них должно быть строго определённое предназначение и имя должно чётко его отражать. Если вы назовёте, к примеру, chat-item , то уже более ясно значение этого блока.
- Относитесь к вёрстке как к программированию, для которого важна легкость восприятия, гибкость и сопровождаемость. Также не менее важно соответствие стандартов. Вёрстку портят дублирования кода, старайтесь их избегать. Использование современных препроцессоров с переменными, циклами, условиями делает вёрстку почти неотличимой от программирования.
Результаты
Для каждой серии сообщений создал блок .chat-item , где будет находиться аватар и одно или несколько сообщений от пользователя.
Для того, чтобы применять стили для инвертирования расположение (для отвечающего) колонки я задал flex-direction: row-reverse; , что инвертирует порядок расположения элементов.
Здесь использована методология BEM.
Для того, чтобы не создавать дополнительные классы для вложенных элементов при инвертировании я пожертвовал чистотой BEM и добавил селекторы с вложенностью ( .chat__item—responder .chat__message , .chat__item—responder .chat__message-content ). По самой методологии (в идеале) следует использовать только классы без вложенности.
В результате код может выглядеть так:
.chat__header < text-align: center; >.chat__item < display: flex; align-items: flex-start; >.chat__person-avatar < border-radius: 50%; >.chat__messages < margin-left: 10px; >.chat__message < display: flex; align-items: center; margin-right: 10px; >.chat__message-content < border-radius: 5px; padding: 7px; background-color: #ccc; display: inline-block; margin-left: 5px; >.chat__item--responder < flex-direction: row-reverse; >.chat__item--responder .chat__message < flex-direction: row-reverse; >.chat__item--responder .chat__message-content
Chat 9:03 Hi 9:03 How are you? 9:05 Hello 9:07 I'm fine. Let's have a dinner today. 9:07 What do you think about it?
12 CSS Chats
Collection of hand-picked free HTML and CSS chat code examples from Codepen and other resources.
Related Articles

- Bootstrap Chats
- jQuery Chats
- Tailwind Chats
Author
- Ahmad Shadeed
- November 3, 2021
Links
Made with
- HTML / CSS
Простой чат для сайта на PHP, HTML и JavaScript в один файл
Чат без базы данных, без MySQL, без каких-либо jQuery и других фреймворков — только чистый JS.
Чат в двух форматах — windows-1251 и UTF-8
История чата хранится в HTML файле, куда записываются уже оформленные в HTML сообщения.
Чат без авторизации.
Чат без использования WebSockets и long polling.
Запоминание выбранного ника в куках.
Чат с возможностью вырезания всякого «ге» из текста и ника при постинге и ограничение их по длине.
Обрезка подгружаемого куска чата
Отправка данных только в случае, если они были изменены (но отправляется весь кусок)
Отключаемый звук отправки/получения сообщения
Возможность задать время опроса, путь до файла с чатом, длину пересылаемого куска, оформление сообщений
Блокирование диалогов при загрузке и постинге, если скорость низкая
Подсказки в случае всяких фейлов
Кросс-браузерная работа — традиционно WebKit-ы (Chrome, Safari и др.), Firefox.
Отлично смотрится на мобильных устройствах.
Огромное пространство для творчества и модификаций.
Все максимально просто, коротко, понятно и со вкусом
Скачать чат для сайта.
Вопросы и ответы про чат для сайта.
Как убрать вывод IP, чтобы сохранять конфиденциальность?
Есть возможность убрать вывод IP — найдите и удалите в файле такой текст: (‘ . $id . ‘) .
Как очистить чат от ненужных записей?
Возможность быстро очистить чат от ненужных записей — Чат пишется в файл chat.db — это по сути обычный html-файл и там можно подправить все, что надо, открыв его обычным текстовым редактором. Либо вообще удалить этот файл — тогда чат пересоздаст его и будет полностью чист.
Проблемы с отражением на windows-1251
На хостинге нужно правильно настроить кодировку и проверить наличие расширения mbstring у PHP — иначе будут проблемы с работой чата.
Либо используйте чат, написанный под UTF-8.
Как вставить чат на свой сайт?
Скопировать в любой каталог на сайте файл чата (можно даже в корень) и проверить его доступность.
Например, если положили в корень своего сайта, то попробовать открыть URL вида вашсайт/chat.php, или, если в папку — то вашсайт/папка/chat.php.
Если открываться не будет — значит либо надо доступ до него прописать, либо изменить rewrite-правила в зависимости от того, какой веб-сервер используется.
Вставить на все страницы сайта проще всего через iframe.
Как создать простое приложение веб-чата
В этом уроке мы будем создавать простое приложение веб-чата с помощью PHP и jQuery. Утилита такого типа прекрасно подойдет для системы онлайн-поддержки вашего сайта.

Введение


Приложение чата, которое мы сегодня построим, будет довольно простым. Оно будет включать в себя систему входа и выхода, возможности в AJAX-стиле, а также предложит поддержку нескольких пользователей.
Шаг 1: HTML разметка
Мы начнем этот урок с создания нашего первого файла index.php.
xmlns="http://www.w3.org/1999/xhtml">
Chat - Customer Module
type="text/css" rel="stylesheet" href="style.css" />
id="wrapper">
id="menu">
class="welcome">Welcome,
class="logout"> id="exit" href="#">Exit Chat
style="clear:both">
id="chatbox">