Если вы еще не видели интерфейс «головы чата» Facebook, вот быстрое снижение. Это маленькие круглые значки, которые будут всплывать на боковой стороне экрана вашего мобильного устройства, чтобы сообщить вам, что сообщение пришло от друга. Это часть домашней страницы Facebook, но даже если вы работаете на iOS, приложение Facebook использует их. Я думаю, что это будет одна из тех вещей, которые вы либо любите, либо ненавидите.
Однако, с точки зрения HTML, я думал, что они были интересны. Не могли бы вы сделать этот интерфейс в HTML / CSS. Ответ — да, и это довольно просто. Просто некоторые границы, отступы и отрицательное поле.
<!DOCTYPE html> <html> <head> <title>Practical CSS - Single Chathead</title> <link rel="stylesheet" href="css/single.css" type="text/css" media="screen" /> </head> <body> <img src="img/tpryan.png" class="chathead"> <div class="content"> <h2>The Main Thing</h2> <p>DIY ea nulla photo booth tempor occaecat, velit nihil mixtape scenester. Irony laboris echo park, wolf officia vice cupidatat labore butcher freegan farm-to-table nisi velit aliqua gluten-free. Aliquip nesciunt assumenda, wayfarers seitan wolf reprehenderit nulla twee sartorial dolore food truck voluptate ex vinyl. Aliquip ex enim, irony terry richardson trust fund consectetur fap pariatur dolor. Lo-fi nulla whatever mlkshk, banksy american apparel carles adipisicing incididunt wolf photo booth hipster. Wayfarers four loko ex cosby sweater, adipisicing sartorial non cardigan craft beer cillum reprehenderit terry richardson 3 wolf moon mollit. Ethical ut labore beard, 3 wolf moon duis readymade assumenda hipster tofu mcsweeney's master cleanse.</p> <p>Irony mixtape cupidatat 3 wolf moon, id cardigan retro cillum exercitation biodiesel wes anderson locavore. Voluptate vinyl lo-fi, ethical sunt et irure nihil fugiat. Terry richardson tumblr art party, artisan quis est cillum messenger bag officia duis. Elit cliche letterpress est, single-origin coffee wayfarers mustache aesthetic esse echo park dolor synth yr viral artisan. Do vinyl terry richardson officia food truck. Veniam cupidatat et aliquip. Sartorial tattooed tofu odio eu culpa ex, irony PBR.</p> </div> </body> </html>
.chathead{ width: 150px; height: 150px; border-radius: 75px; border: 4px solid #FFFFFF; box-shadow: 1px 1px 5px rgba(0,0,0,.5); position: absolute; right: -10px; }
демонстрация
Это было относительно просто, но это становится более сложным, когда вы разговариваете с несколькими людьми. Facebook берет самого последнего человека в цепочке и заставляет его занимать половину «головы чата». Тогда приходите следующие два, занимая четверть каждого. Тогда остальные скрыты.
Итак, мне нужно извлечь из n-го дочернего волшебства выборочный стиль первых 3 элементов в коллекции изображений. Установите переполнение на скрытое, поиграйте еще с некоторыми радиусами границ и BOOM, «головы чата» сделаны.
<div class="chathead-multiple"> <img src="img/tpryan.png"> <img src="img/jonesbey.png"> <img src="img/mcorlan.png"> <img src="img/khoyt.png"> </div>
.chathead-multiple{ width: 150px; height: 150px; border-radius: 75px; border: 4px solid #FFFFFF; box-shadow: 1px 1px 5px rgba(0,0,0,.5); right: -10px; overflow: hidden; position: absolute; margin-right: -10px; z-index: 10; } .chathead-multiple img{ display: none; margin: 0; z-index: 1; } .chathead-multiple img:nth-child(-n+3) { width: 75px; height: 75px; display: inline-block; position: absolute; } .chathead-multiple img:first-child { width: 150px; height: 150px; left: -75px; border-right: 1px solid #FFFFFF; } .chathead-multiple img:nth-child(2) { left: 75px; top:0; border-bottom: 1px solid #FFFFFF; border-left: 1px solid #FFFFFF; border-radius: 0 75px 0 0; } .chathead-multiple img:nth-child(3) { left: 75px; bottom:0; border-top: 1px solid #FFFFFF; border-left: 1px solid #FFFFFF; border-radius: 0 0 75px 0; }
демонстрация
Хорошо, так что все было довольно просто, поэтому я бы хотел, чтобы они были интерактивными. Если я нажму на «чат-голову» для разговора с несколькими участниками, я бы хотел, чтобы это расширило остальных участников. Это очень легко. Просто немного Javascript и некоторый обмен классами.
демонстрация
Итак, родной интерфейс Facebook сделан в CSS / HTML. Но я думаю, что мы можем сделать лучше. Одна из моих проблем, связанных с этим интерфейсом, которая может помешать мне использовать его в веб-приложении, заключается в том, что он скрывает содержимое под ним, просто тусуется, скрывая все, что может быть ниже его. Для меня, если бы я использовал это, я хотел бы, чтобы это плавало вместо абсолютно положения. Так что я могу сделать несколько настроек, чтобы это произошло.
h2{ clear: both; } .content{ text-align: right; } .chathead-multiple{ float: right; width: 150px; height: 150px; border-radius: 75px; border: 4px solid #FFFFFF; box-shadow: 1px 1px 5px rgba(0,0,0,.5); overflow: hidden; position: relative; z-index: 10; -webkit-shape-outside: circle(50%, 50%, 60%); } .chathead-multiple img{ display: none; margin: 0; z-index: 1; } .chathead-multiple img:nth-child(-n+3) { display: block; width: 75px; height: 75px; display: inline-block; position: absolute; } .chathead-multiple img:first-child { width: 150px; height: 150px; left: -75px; border-right: 1px solid #FFFFFF; } .chathead-multiple img:nth-child(2) { left: 75px; top:0; border-bottom: 1px solid #FFFFFF; border-left: 1px solid #FFFFFF; border-radius: 0 75px 0 0; } .chathead-multiple img:nth-child(3) { left: 75px; bottom:0; border-top: 1px solid #FFFFFF; border-left: 1px solid #FFFFFF; border-radius: 0 0 75px 0; } .chathead-single{ width: 150px; height: 150px; border-radius: 75px; border: 4px solid #FFFFFF; box-shadow: 1px 1px 5px rgba(0,0,0,.5); position: relative; float: right; clear: right; margin-left: 65px; margin-bottom: 25px; right: 50px; /* CANARY ONLY FEATURE NOW */ -webkit-shape-outside: circle(50%, 50%, 60%); }
демонстрация
Теперь в моей демонстрации я вытащил текст, чтобы он был выровнен по правому краю, а не по левому краю, чтобы лучше показать плавающий край. Но я все еще не доволен этим. Зачем? Потому что каждый из этих кругов вырезает гигантский квадрат из текста. И это отчасти хромает, потому что они круги. Несколько недель назад мой коллега из Adobe Бем Джонс-Бей написал статью об использовании фигурных исключений из спецификации CSS Shapes and Exclusion. Казалось, идеально подходит. Поэтому, если у вас установлен Chrome Canary и включены экспериментальные функции, вы получите совершенно другой результат:
Демо [Посмотреть на Канарских]
Секретным соусом здесь является свойство -webkit-shape-outside. Это в основном позволяет мне исключить круг из основного текста вокруг каждой из «чат-голов». Чтобы узнать больше об использовании shape-outside, обязательно ознакомьтесь со статьей Бема. Это только один из способов, с помощью которых браузер становится более способным отображать большее количество визуальных макетов и эффектов.