Верстка — CSS Guru http://starhack.ru Верстка сайтов, использование CSS, Javascript, jQuery, веб-разработка Mon, 11 Jan 2021 13:03:16 +0000 ru-RU hourly 1 https://wordpress.org/?v=5.7.7 http://starhack.ru/codepen-io-v-ie11/ http://starhack.ru/codepen-io-v-ie11/#respond Tue, 18 Sep 2018 10:02:09 +0000 http://starhack.ru/?p=1158
Codepen перестал поддерживать �?Е11. Очень жаль, было удобно быстро что-нибудь перепроверить по верстке.

]]>
http://starhack.ru/codepen-io-v-ie11/feed/ 0
Interaction Media Features http://starhack.ru/interaction-media-features/ http://starhack.ru/interaction-media-features/#respond Fri, 03 Nov 2017 10:54:25 +0000 http://starhack.ru/?p=1131 Читать далее Interaction Media Features]]> Interaction Media Features — это тип медиа-запроса в стилях. Определяет каким путем пользователь может взаимодействовать с вашим приложением.
Простой способ разделить стили для устройств с различными типами взаимодействия, например, тач-устройства и десктоп, управляемый мышкой.
Сейчас во многих интерфейсах управляющие элементы показываются только при наведении курсора мыши по событию :hover. Но на тач-девайсах такое событие отсутствует как класс. И вот тут нам как раз пригодится рассматриваемый медиа-запрос.
Вот простой пример кода:
HTML

<div class="parent">
  parent
  <div class="child">child</div>
</div>

CSS

.parent:not(:hover) .child {
  /* здесь мы указываем показывать child элемент только при наведении на parent'а */
  display: none;
}
@media (hover:none) {
  .child {
/* а тут указываем, что child должен быть виден на устройствах, где hover отсутствует */
    display: block!important;
  }
}

И таким образом мы покажем пользователю с тач-устройством то, что на ему недоступно без события :hover.
И живой пример на codepen.

See the Pen Interaction Media Features by Sergey Kirichenko (@oknechirik) on CodePen.


Для проверки работы медиа-запроса откройте инспектор и переключите вид на мобильное устройство.
Toggle device toolbar

Поддержка браузерами уже достаточная, на мой взгляд, чтобы пользоваться этим меди-запросом.

]]>
http://starhack.ru/interaction-media-features/feed/ 0
Верстка на атрибутах элементов и ИЕ11 http://starhack.ru/verstka-na-atributax-elementov-i-ie11/ http://starhack.ru/verstka-na-atributax-elementov-i-ie11/#respond Wed, 01 Nov 2017 06:38:37 +0000 http://starhack.ru/?p=1122 Читать далее Верстка на атрибутах элементов и ИЕ11]]> CSS предоставляет нам возможность использовать не только классы, элементы и ID, но и атрибуты. При этом у атрибута может быть свое значение. И по этому значению мы можем применять к элементам разное оформление. На нынешнем проекте я попробовал использовать такой подход. Для разметки на flexbox я создал в стилях вот такие конструкции:

[layout] {
  display: flex;
}
[layout="column"] {
  flex-direction: column:
}

И так далее и тому подобное для использования возможностей flexbox.
А потом решил посмотреть на всё в Internet Explorer 11.
Сказать, что ничего не работало, не могу. Но все работало настолько удручающе медленно, что пользоваться интерфейсом было почти совершенно невозможно.
Немного технических деталей о проекте.
Это SPA на Angular 1x. Идет медленная миграция на React. Для стилей изначально использовали SASS, сейчас переписываем на PostCSS. Графические ресурсы в виде SVG.
Когда ИЕ11 начал подтупливать, я списывал это на большое количество JS и медленность Angular. Но когда простейший hover эффект стал отрабатывать с задержкой в секунду и более я таки решил посмотреть на вкладку Производительность, что встроена в отладчик ИЕ11.
К своему большому огорчению увидел, что основное время ИЕ11 тратит на расчёт и перерасчёт стилей :( На каждый элемент разметки, а их на странице очень много (списки, таблицы etc), ИЕ тратил от 2 до 4 десятых секунды!!!
И я стал искать.
И интернет подсказал, что проблема может крыться в использовании атрибутов для написания стилей.
В одной из статей на подобную проблему автор привел и пример своего решения. У них тоже в продукте использовался Ангуляр, и чтобы не перелопачивать кучу шаблонов для удаления атрибутов и замены их аналогичными по содержанию классами, автор написал несколько директив, которые просто добавляли классы элементам, у которых были атрибуты.
HTML

<div layout></div>

JS

module.exports = ['layout', /* @ngInject */ () => {
    return {
        restrict: 'A',
        controller: /* @ngInject */ ($element,$attrs) => {
            if($attrs.layout === 'column') {
                $element.addClass('layout-column');
            } else {
                $element.addClass('layout');
            }
        }
    }
}];

И вот такая замена стилей на атрибутах на обычную верстку на классах снизила нагрузку на расчет стилей почти на порядок: теперь для расчет стилей уходило от 1/100 до 1/10 секунды на элемент. 1/10 это тоже немало, но таких элементов немного и это обычно неизвестные ИЕ11 теги, которые неизбежны, когда продукт построен на ангулярных компонентах. Вот таких например:

<grid-item ng-repeat="file in files"></grid-item>

В общем и целом вывод таков: пока жив ??Е, не стоит отказываться от рекомендаций по производительной верстке. ??спользовать классы и не использовать атрибуты и элементы, особенно со многими вложенностями.
А я пока продолжу искать узкие места в своей верстке, чтобы окончательно привести ИЕ 11 в чувство.

]]>
http://starhack.ru/verstka-na-atributax-elementov-i-ie11/feed/ 0
Свойство flex (продолжение) http://starhack.ru/svojstvo-flex-prodolzhenie/ http://starhack.ru/svojstvo-flex-prodolzhenie/#respond Tue, 10 Oct 2017 09:30:39 +0000 http://starhack.ru/?p=1113 Читать далее Свойство 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.

]]>
http://starhack.ru/svojstvo-flex-prodolzhenie/feed/ 0
Чудесны дела твои, webkit http://starhack.ru/webkit-file-upload-button/ http://starhack.ru/webkit-file-upload-button/#respond Mon, 07 Aug 2017 11:34:47 +0000 http://starhack.ru/?p=1105 А знаете ли вы, что браузерах семейства Webkit/Blink у элемента input[type="file"] есть псевдо-элемент ::-webkit-file-upload-button.
�? этот псевдо-элемент можно оформлять средствами CSS. Хоть вот так :)

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

]]>
http://starhack.ru/webkit-file-upload-button/feed/ 0
Свойство flex http://starhack.ru/flex-property/ http://starhack.ru/flex-property/#respond Tue, 27 Jun 2017 12:18:43 +0000 http://starhack.ru/?p=1098 Читать далее Свойство 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;
]]>
http://starhack.ru/flex-property/feed/ 0
Прогресс в CSS нагнал и меня http://starhack.ru/progress-v-css-nagnal-i-menya/ http://starhack.ru/progress-v-css-nagnal-i-menya/#respond Wed, 31 May 2017 09:08:53 +0000 http://starhack.ru/?p=1076 Читать далее Прогресс в CSS нагнал и меня]]> Сколько бы я не сопротивлялся, прогресс в CSS нагнал и меня. Когда я пришел на нынешнее место работы, SASS, который тут использовали, показался мне громоздким и неудобным. Но со временем, изучив его возможности, я так с ним сроднился, что переход на что-то другое мне казался пустой тратой времени и сил. К тому же кода уже столько, что миграция просто пугает.
Но вот пришло время изменений. Сборка стилей SASS’ом стала чуть ли на самым узким местом в проекте. Сборка стилей длится в секундах, что печалит.
Решили переходить на использование postcss. А для пущего интереса в связке с CSSNext.
На ближайшие дни и недели меня ждет увлекательное изучение нового и менее увлекательное переписывание старого.
Постараюсь описывать найденные и собранные грабли.
Всем добра!
Намасте!

]]>
http://starhack.ru/progress-v-css-nagnal-i-menya/feed/ 0
Темы в angular material http://starhack.ru/temy-v-angular-material/ http://starhack.ru/temy-v-angular-material/#respond Fri, 31 Mar 2017 11:27:37 +0000 http://starhack.ru/?p=1062 Читать далее Темы в 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>
]]>
http://starhack.ru/temy-v-angular-material/feed/ 0
Немного очень любопытного про z-index http://starhack.ru/nemnogo-ochen-lyubopytnogo-pro-z-index/ http://starhack.ru/nemnogo-ochen-lyubopytnogo-pro-z-index/#respond Mon, 26 Dec 2016 10:58:23 +0000 http://starhack.ru/?p=1049 Ограничусь ссылкой, но зато очень интересной, на статью об особенностях z-index. Z-index и его применение в разных в контестах

]]>
http://starhack.ru/nemnogo-ochen-lyubopytnogo-pro-z-index/feed/ 0
Стили для скролбара http://starhack.ru/stili-dlya-skrolbara/ http://starhack.ru/stili-dlya-skrolbara/#respond Tue, 20 Dec 2016 12:19:46 +0000 http://starhack.ru/?p=1050 Читать далее Стили для скролбара]]> Часто дизайнеры рисуют скролбар так, чтобы он подходил под дизайн. Не задумываясь о том, как это будет сделано. Если дизайн скролбара критичен, то приходится использовать Javascript-решения, имитирующие браузерный скролбар. Но ведь это чисто оформительская задача, почему бы не использовать ля этих целей CSS, который как раз и отвечает за оформление сайта/интерфейса. Но, к сожалению, только браузеры на Webkit дают нам контроль над внешним видом скролбара.


::-webkit-scrollbar { width: 3px; height: 3px;}
::-webkit-scrollbar-button {  background-color: #666; }
::-webkit-scrollbar-track {  background-color: #999;}
::-webkit-scrollbar-track-piece { background-color: #ffffff;}
::-webkit-scrollbar-thumb { height: 50px; background-color: #666; border-radius: 3px;}
::-webkit-scrollbar-corner { background-color: #999;}}
::-webkit-resizer { background-color: #666;}

Да еще �?Е позволяет частично перекрасить скролбар.


body{
    scrollbar-base-color: #C0C0C0;
    scrollbar-base-color: #C0C0C0;
    scrollbar-3dlight-color: #C0C0C0;
    scrollbar-highlight-color: #C0C0C0;
    scrollbar-track-color: #EBEBEB;
    scrollbar-arrow-color: black;
    scrollbar-shadow-color: #C0C0C0;
    scrollbar-dark-shadow-color: #C0C0C0;
}

А вот в Firefox такой возможности нет от слова совсем. �? на багзилле давным-давно заведен баг по этому поводу. �? есть возможность проголосовать за то, чтобы Firefox имплементировал возможность оформить скролбар средствами CSS.

]]>
http://starhack.ru/stili-dlya-skrolbara/feed/ 0