Safari browser как ИЕ6 наших дней

Если вы спросите меня какой браузер сейчас самый сложно поддерживаемый,то я не задумываясь скажи, что это Сафари. Такого количества непредсказуемых багов, как в Сафари, я никак не ожидал.
Это и проблема с градиентами в SVG, если у вас используется тег BASE, и проблемы с flexbox, и некорректная работа с такими единицами измерения, как VH и VW при зуме. Жесть.
UPD. В продолжение темы :)

Свойство flex (продолжение)

В предыдущей заметке по свойству flex есть короткая запись:

/* Одно значение, ширина/высота: flex-basis */
flex: 10em;

Вроде бы удобно, но есть одно но. Если вы хотите указанным способом задать только flex-basis, то для в браузере мы получим:

flex: 1 1 10em;

Все бы ничего, но если ранее вы указали для нужного элемента свойства flex-shrink или flex-grow, отличные от 1 1, то краткая запись flex: 10em; (например, в media query вам надо указать flex-basis) переопределит вышеуказанные flex-shrink или flex-grow.

Чудесны дела твои, webkit

А знаете ли вы, что браузерах семейства Webkit/Blink у элемента input[type="file"] есть псевдо-элемент ::-webkit-file-upload-button.
И этот псевдо-элемент можно оформлять средствами CSS. Хоть вот так :)

See the Pen zdNbLJ by Sergey Kirichenko (@oknechirik) on CodePen.

Свойство flex

Краткая запись для трех отдельных свойств flex элементов: flex-grow, flex-shrink и flex-basis.
(Здесь — для памяти.)

/* 0 0 auto */
flex: none;

/* Одно значение, число без размерности: flex-grow */
flex: 2;

/* Одно значение, ширина/высота: flex-basis */
flex: 10em;
flex: 30px;
flex: auto;
flex: content;

/* Два значения: flex-grow | flex-basis */
flex: 1 30px;

/* Два значения: flex-grow | flex-shrink */
flex: 2 2;

/* Три значения: flex-grow | flex-shrink | flex-basis */
flex: 2 2 10%;

/* Глобальные значения */
flex: inherit;
flex: initial;
flex: unset;

Коды служебных клавиш в виде JSON

Чисто для справки:


{
    ignoreKeys: {
        8: 'backspace'
        , 9: 'tab'
        , 13: 'enter'
        , 16: 'shift'
        , 17: 'control'
        , 18: 'alt'
        , 27: 'esc'
        , 33: 'page up'
        , 34: 'page down'
        , 35: 'end'
        , 36: 'home'
        , 37: 'left'
        , 38: 'up'
        , 39: 'right'
        , 40: 'down'
        , 45: 'insert'
        , 46: 'delete'
        , 116: 'f5'
        , 123: 'f12'
        , 224: 'command'
    }
}

Первый postcss плагин.

В продолжение темы postcss. Если коротко, то я в восторге!
Второй день работы с postcss, и я уже пишу себе плагинчик, для перевода пикселей в EM’ы. Да, вы скажете, что уже есть такое, но дело в том, что в наследие от работы с SASS в стилях осталось много мест с вызовом SASS-функции em($font-size, $context). И чтобы не менять пока, на время миграции, этот подход, набросал плагинчик, повторяющий подобное поведение.
Не хватает пока, разве что, указания точности в настройках (precision). Чтобы уменьшить количество знаков после запятой.

Прогресс в CSS нагнал и меня

Сколько бы я не сопротивлялся, прогресс в CSS нагнал и меня. Когда я пришел на нынешнее место работы, SASS, который тут использовали, показался мне громоздким и неудобным. Но со временем, изучив его возможности, я так с ним сроднился, что переход на что-то другое мне казался пустой тратой времени и сил. К тому же кода уже столько, что миграция просто пугает.
Но вот пришло время изменений. Сборка стилей SASS’ом стала чуть ли на самым узким местом в проекте. Сборка стилей длится в секундах, что печалит.
Решили переходить на использование postcss. А для пущего интереса в связке с CSSNext.
На ближайшие дни и недели меня ждет увлекательное изучение нового и менее увлекательное переписывание старого.
Постараюсь описывать найденные и собранные грабли.
Всем добра!
Намасте!

Яндекс Дзен

Любопытную штуку завел Яндекс: платформу для издателей Яндекс Дзен.
Не удержался и завел себе канал. Поиграемся, интересно.
Бывает, что есть чем поделиться, а этот способ вроде как прост и быстр!

Темы в angular material

Немного экзотичный кейс. В проекте использован angular material и, частично, его механизм темизации интерфейса. Есть несколько приложений, использующих общие стили. Часть стилей переопределяет стили из матириала. В одном из приложений имя темы указывается явно на все приложение, а другом не используются вообще, а применяются кастомные стили. Это дано.
Что надо? Чтобы в случае, если для приложения явно указана тема, отличная по оформлению от кастомных стилей, использовались кастомные стили, а не стили темы.
В angular material есть механизм указания темы для отдельных элементов библиотеки через атрибут md-theme. Так вот, если вам на каком-то элементе не нужно, чтобы использовалась тема приложения или даже дефолтная тема, оставьте значение этого атрибута пустым. И пишите кастомные стили, какие вам нужны.

<md-radio-group ng-model="model" md-theme="">
  <md-radio-button ng-repeat="setting in settings" 
                      ng-value="setting.value"
                      class="app-color">
    <span ng-bind="setting.title"></span>
  </md-radio-button>
</md-radio-group>