Тег: c

Заменяем аватар на цветной кружок с буквой с помощью JavaScript

Новый тренд в дизайне - милые цветные кружочки (квадратики) различного цвета с первой или двумя первыми буквами имени. Так сейчас делают все: браузер Сафари, почтовые клиенты, социальные сети.

Здесь я покажу как это сделать с помощью JavaScript. Главный вопрос – подбор цвета?

Цвет мы будет генерировать из строки с именем. На самом деле подойдет абсолютно любая строка, но так как и букву мы берем из имени, то и цвет будет генерировать из него же.

Вот так будет выглядеть наш HTML:

<div class="user-info">
    <div class="user-info-avatar" id="avatar"></div>
    <div class="user-info-name" id="name"></div>
</div>

Добавим немного CSS-стилей:

.user-info-avatar {
    display: inline-block;
    width: 30px;
    height: 30px;
    line-height: 30px;
    border-radius: 15px;
    text-align: center;
    margin-right: 10px;
    color: white;
}
.user-info-name {
    display: inline-block;
}

А теперь JavaScript:

var stringToColor = function stringToColor(str) {
    var hash = 0;
    var color = '#';
    var i;
    var value;
    var strLength;

    if(!str) {
        return color + '333333';
    }

    strLength = str.length;

    for (i = 0; i < strLength; i++) {
        hash = str.charCodeAt(i) + ((hash << 5) - hash);
    }

    for (i = 0; i < 3; i++) {
        value = (hash >> (i * 8)) & 0xFF;
        color += ('00' + value.toString(16)).substr(-2);
    }

    return color;
};

var name = 'Михаил';
var letter = name.substr(0, 1);
var backgroundColor = stringToColor(name);
var elementAvatar = document.getElementById('avatar');
var elementName = document.getElementById('name');

elementName.innerHTML = name;
elementAvatar.innerHTML = letter;
elementAvatar.style.backgroundColor = backgroundColor;

За генерирование цвета отвечает функция stringToColor. Она принимает строку с именем (любую строку), переводит ее в биты и уже из них в HEX-цвет. Если мы не передадим в функцию ничего, то получим в ответ цвет по умолчанию – в данном примере, #333333.

Вот таким нехитрым образом можно делать такое модное нынче оформление при отсутствии аватара.

02 июля 2015
13.3 тыс.
2 мин

Офис Booking.com в Амстердаме

Booking.com — система интернет-бронирования отелей, основана в 1996 году. Штаб-квартира компании находится в Амстердаме.

01 июля 2015
8.4 тыс.
1 мин

F-ck Counter-Strike

В 2002-м году мой друг, а тогда еще и одноклассник, Денис «denser» очень любил компьютерную игру Quake 3 Arena. Но в это время популярность начала набирать появившаяся из ниоткуда игра Counter Strike.

Денис не хотел с этим мириться и написал статью F-ck CS. Я ее перечитал, исправил и даю на прочтение.

28 июня 2015
3.3 тыс.
15 мин

HTML5 video и кнопка для AirPlay

Menu AirPlay

В грядущем обновлении Mac OS, с номером 10.11 и названием El Capitan, придет и новая версия браузера Safari – 9.0.

Список нововведений не слишком чтобы внушительный, но интересные вещи там присутствуют. Одна из них – возможность добавить кнопку airplay в любое видео, вставленное с помощью тега video.

17 июня 2015
9.5 тыс.
7 мин

Условные комментарии для Internet Explorer в React

Иногда сделать простые вещи очень непросто. Например, добавить условный комментарии для IE в html. Этим я сегодня и занимался.

В моем текущем проекте нам нужно было поддерживать css медиа-запросы в IE9. Для этого было решено использовать библиотеку media-match.

Что может быть проще? Пара строк кода с условным комментарием:

<!--[if lte IE 9]>
   <script src="/public/media.match.js">
<![endif]-->

Но все оказалось намного сложнее, так как мы используем React.js и делаем изоморфное одностраничное приложение. Кто бы знал, что React не рендерит на странице комментарии, помещенные в .jsx-файлы. Показынный ниже способ не работает:

renderHead: function() {
  return (
    <head>
      <!--[if lte IE 9]>
      <script src="/public/media.match.js"/>
      <![endif]-->
    </head>
  );
}

Единственный способ, который мне удалось найти – dangerouslySetInnerHTML для head, внутрь которого я поместил комментарий и все заработало:

renderHead: function() {
  return (
    <head dangerouslySetInnerHTML={{__html: '<!--[if lte IE 9]><script src="/public/media.match.js"></script><![endif]-->'}}>
    </head>
  );
}

Следует также отметить, что тэг script должен быть закрыт отдельно <script></script>, так как сокращение <script /> не работает в React.

Последняя, но, при этом, большая проблема – если надо поместить несколько таких комментариев в head. Конечно, можно все просто написать в одну строку, но это выглядит «убого».

Поэтому я, да простят меня парсерсы HTML в браузерах, положил условные комментарии внутри тэга meta:

renderHead() {
  return (
    var comment = '<!--[if lte IE 9]><script src="/public/media.match.js"></script><![endif]-->';
    <head>
      <title>Website title</title>
      <meta name="react-comment-hack" 
          dangerouslySetInnerHTML={{__html: comment}}>
      </meta>
    </head>
  );
}

Успешного «реакта».

© Автор Maks Nemisj

07 мая 2015
4.4 тыс.
1 мин

Casio STB-1000-1EF – «полоумные» часы с bluetooth

Анекдот.

Пятеро инженеров Casio умерли от смеха, узнав, что умные часы Samsung будут работать от батареи два дня.

Я уже исправно обозрел первые побывавшие у меня умные часы Pebble Steel. Они мне не очень приглянулись из-за внешнего вида. Зато я всегда любил брутальные G-Shock от Casio. И тут внезапно я обнаруживаю, что у японского производителя за разумные деньги есть модель, внешне очень напоминающая «шоки», но при этом умеющая работать с телефонами – Casio STB-1000-1EF. Часы были незамедлительно найдены и приобретены в Минске. К слову, до Casio задумывался о покупке Cookoo Watch.

22 февраля 2015
9.9 тыс.
6 мин

Comic-Con 2014 в Сан-Диего

Культура комиксов в США развита намного лучше, чем культура питья в нашей стране (хотя мы самая пьющая нация на планете). Ежегодно в Сан-Диего проходит крупнейший в Северной Америке фестиваль Comic-Con. Немного фотографий с прошлогоднего мероприятия.

19 февраля 2015
3.9 тыс.
16 сек

HTC Dream – первый коммерческий телефон на Android

В 2007 году Apple представила первый iPhone. Осенью 2008 вышел iPhone 3G. В течение года между двумя первыми яблочными смартфонами Google упорно разрабатывала свою мобильную операционную систему и в сентябре все того же 2008-го показала миру первый коммерческий телефон на Android 1.5 – HTC Dream (у нас почему-то называется везде HTC G1). Телефон даже по тем временам получился не самый удачный, да и операционная система была сырой и работала не очень стабильно.

14 февраля 2015
3.8 тыс.
3 мин

CSS стилизация checkbox и radio для мобильных устройств

Сделать чекбоксы input[type="checkbox"] и радиокнопки input[type="radio"] красивыми – задача не сложная. Однако, чаще всего, за этим следует добавление новых элементов, а следовательно и усложнение DOM-структуры документа.

Для современных мобильных браузеров, а также декстопных браузеров на основе WebKit и Blink (Chrome, Opera, Vivaldi и т.д.), для некоторых типов инпутов можо создавать псевдо-элементы after и before.

06 февраля 2015
6.5 тыс.
3 мин

Placeholder с поведением в стиле Material Design

Кто видел Material Design от Google, тот знает, что там есть довольно забавное поведение placeholder-а для поля ввода. Я решил попробовать сделать такое на CSS, но столкнулся с некоторыми проблемами (легко решаются с JavaScript).

Давайте посмотрим, что у меня получилось – ДЕМО.

04 февраля 2015
5.8 тыс.
2 мин