CSS — CSS Guru http://starhack.ru Верстка сайтов, использование CSS, Javascript, jQuery, веб-разработка Fri, 12 Mar 2021 11:33:49 +0000 ru-RU hourly 1 https://wordpress.org/?v=5.7.7 Window.getComputedStyle() of pseudo elements. http://starhack.ru/window-getcomputedstyle-of-pseudo-elements/ http://starhack.ru/window-getcomputedstyle-of-pseudo-elements/#respond Fri, 12 Mar 2021 11:33:47 +0000 http://starhack.ru/?p=1289 Читать далее Window.getComputedStyle() of pseudo elements.]]> Возникла необходимость получить размер псевдоэлемента (:after) в js коде.

Для этого есть простая возможность:

window.getComputedStyle(element, pseudoElt);

Где pseudoElt это строка с именем псевдоэлемента.

Прочитал документацию, примеры смотреть не стал, написал:

window.getComputedStyle(element, 'after');

Проверил в хроме, всё работает. И на этом закончил.

Через некоторое время, что сопутствующая функциональность не работает в Файрфоксе. Расстроился, полез смотреть. Не мог ничего понять, полез искать в сети. В том числе посмотрел примеры из доков. Всего-то, что и надо было это pseudoElt писать, так сказать полностью, вот так:

window.getComputedStyle(element, ':after');

Не хватало двоеточия перед именем псевдоэлемента. Хром же подстроился под пользователя, и понял, что я хотел. Файрфокс, как и всегда, оказался занудой.

Читайте доки внимательнее. Не пропускайте детали. Будьте аккуратнее. Проверяйте в нескольких браузерах.

]]>
http://starhack.ru/window-getcomputedstyle-of-pseudo-elements/feed/ 0
Простой лоадер на чистом CSS http://starhack.ru/prostoj-loader-na-chistom-css/ http://starhack.ru/prostoj-loader-na-chistom-css/#respond Sun, 17 Jan 2021 13:13:00 +0000 http://starhack.ru/?p=1276 Нашел в своем codepen, уж и забылось когда и зачем.

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

]]>
http://starhack.ru/prostoj-loader-na-chistom-css/feed/ 0
Стиль для внешних ссылок http://starhack.ru/stil-dlya-vneshnix-ssylok/ http://starhack.ru/stil-dlya-vneshnix-ssylok/#respond Mon, 11 Jan 2021 13:10:11 +0000 http://starhack.ru/?p=1270 Читать далее Стиль для внешних ссылок]]> Ссылки, ведущие на другие сайты, со страниц вашего сайта (внешние ссылки) можно стилизовать несколькими способами. Например, добавляя к таким ссылкам отдельный CSS-класс.

Но можно обойтись исключительно средствами CSS! Для этого используем селектор атрибута.

/* <a href="//google.com">External link 1</a> */
/* <a href="https://google.com">External link 2</a> */
/* <a href="http://some-site.example">External link 3</a> */

a[href*="//"]:not([href*="your-site-address.name"]) {
    /* any styles you want */
}

Такой селектор выберет все ссылки, в атрибуте href которых есть двойной слеш (//), за исключением страниц вашего сайта. Если же для внутренней навигации вы используете внутренние ссылки без указания протокола, то можно изменить селектор вот так:

a[href^="http"], a[href^="//"] {
    /* any styles you want */
}

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

]]>
http://starhack.ru/stil-dlya-vneshnix-ssylok/feed/ 0
Полезные функции в CSS, о которых хорошо бы знать. Часть первая. CSS-функция attr. http://starhack.ru/poleznye-funkcii-v-css-o-kotoryx-xorosho-by-znat/ http://starhack.ru/poleznye-funkcii-v-css-o-kotoryx-xorosho-by-znat/#comments Tue, 22 Dec 2020 18:45:36 +0000 http://starhack.ru/?p=1250 Читать далее Полезные функции в CSS, о которых хорошо бы знать. Часть первая. CSS-функция attr.]]> В CSS, как это ни странно, есть свои функции. Например, функция для задания цвета rgb. Но сейчас не о ней.

CSS-функция attr

Функция attr() возвращает значение атрибута на выбранном элементе. Это позволяет нам получить значение атрибута и использовать для, например, свойства content выбранного элемента.

Вот пример.

<a href="http://example.com">Example</a>

a:after {
    content: ' (' attr(href) ')';
}

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

]]>
http://starhack.ru/poleznye-funkcii-v-css-o-kotoryx-xorosho-by-znat/feed/ 1
GAP/GRID-GAP и Flexbox http://starhack.ru/gap-grid-gap-i-flexbox/ http://starhack.ru/gap-grid-gap-i-flexbox/#respond Thu, 06 Jun 2019 08:03:30 +0000 http://starhack.ru/?p=1203 Если вы вдруг не знали, то знайте: Firefox применяет свойство grid-gap для flex-контейнеров.

Для меня это оказалось неожиданным именно из-за именования. Grid в названии вроде как указывает на применимость для grid-контейнеров. Вероятно, поэтому это свойство и переименовали в просто gap.

Свойство экспериментальное и сейчас поддерживается только в Firefox.

]]>
http://starhack.ru/gap-grid-gap-i-flexbox/feed/ 0
Создание значков с помощью Image Asset Studio http://starhack.ru/sozdanie-znachkov-s-pomoshhyu-image-asset-studio/ http://starhack.ru/sozdanie-znachkov-s-pomoshhyu-image-asset-studio/#respond Wed, 27 Mar 2019 15:40:21 +0000 http://starhack.ru/?p=1190 Просто полезная ссылка, как создать набор адаптивных иконок для Android приложения

]]>
http://starhack.ru/sozdanie-znachkov-s-pomoshhyu-image-asset-studio/feed/ 0
Прозрачность в шестнадцатеричном виде http://starhack.ru/prozrachnost-v-shestnadcaterichnom-vide/ http://starhack.ru/prozrachnost-v-shestnadcaterichnom-vide/#respond Mon, 27 Aug 2018 14:43:14 +0000 http://starhack.ru/?p=1150 Если вы используете HEX-нотацию для задания цветов в своих стилях и хотите использовать прозрачность в цвете, то вот простая подсказка, если не хочется пересчитывать прозрачность. Уже все пересчитали за нас: Шестнадцатеричный код цвета для прозрачности от 100% до 0% списком.

]]>
http://starhack.ru/prozrachnost-v-shestnadcaterichnom-vide/feed/ 0
Placeholder по-русски http://starhack.ru/placeholder-po-russki/ http://starhack.ru/placeholder-po-russki/#respond Tue, 21 Aug 2018 14:50:32 +0000 http://starhack.ru/?p=1154

Чем заменить слово placeholder в описании задачи по-русски?

— Окнечирик (@oknechirik) August 21, 2018

]]>
http://starhack.ru/placeholder-po-russki/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