#фишка дня
Иногда возникает задача поставить перевод строки после строчного (inline) элемента. Без
На помощь приходят псевдоэлементы.
Значение свойства
Ну и чтобы он сработал, нам стоит прямо указать браузеру на необходимость сохранения переводов строк.
Что это даёт? Ну, например, на десктопе можно показать перевод строки, а на адаптиве – убрать его, очистив content. Конечно, это можно сделать и скрытием
#css #tricks #unicode #after #newline
Иногда возникает задача поставить перевод строки после строчного (inline) элемента. Без
<br/>
, без преобразования элемента в блочный.На помощь приходят псевдоэлементы.
Значение свойства
content
— «\A» — это Unicode-символ 0x00000A, который, внезапно, являет собой перевод строки.Ну и чтобы он сработал, нам стоит прямо указать браузеру на необходимость сохранения переводов строк.
Что это даёт? Ну, например, на десктопе можно показать перевод строки, а на адаптиве – убрать его, очистив content. Конечно, это можно сделать и скрытием
<br/>
, но мы уже решили, что он лишний.#css #tricks #unicode #after #newline
#заметка дня
Пока одни считают эмодзи языком неграмотных, другие используют их как метаязык и даже преуспевают в этом.
Мир был бы гораздо скучнее без сложных эмодзи. Но не будете же вы каждый раз менять стандарт для очередной бородатой картинки?
И вот тут на сцену выходят лигатуры.
Что такое лигатура в цифровой типографике? Это замена шрифтом некой комбинации символов на один. А что такое эмодзи? Это лишь ещё один шрифт, который система применяет (или нет, сорян) к определённому диапазону символов.
И вот сочетание из чёрного квадрата и Санта Клауса превращается в чёрного Санту Клауса. Удивительное рядом.
И да, раз это просто несколько символов – к ним можно применять любые средства работы со строками. А пустые символы на самом деле не пустые, это буквально символы склейки: zero-width joiner, чтобы мы были в курсе, что это не отдельные картинки.
Кстати, некоторые из вас наверняка применяют шрифты с лигатурами в своей IDE. Так что не так уж и далеки вы от эмодзи :)
#emoji #ligature #font #unicode
Пока одни считают эмодзи языком неграмотных, другие используют их как метаязык и даже преуспевают в этом.
Мир был бы гораздо скучнее без сложных эмодзи. Но не будете же вы каждый раз менять стандарт для очередной бородатой картинки?
И вот тут на сцену выходят лигатуры.
Что такое лигатура в цифровой типографике? Это замена шрифтом некой комбинации символов на один. А что такое эмодзи? Это лишь ещё один шрифт, который система применяет (или нет, сорян) к определённому диапазону символов.
И вот сочетание из чёрного квадрата и Санта Клауса превращается в чёрного Санту Клауса. Удивительное рядом.
И да, раз это просто несколько символов – к ним можно применять любые средства работы со строками. А пустые символы на самом деле не пустые, это буквально символы склейки: zero-width joiner, чтобы мы были в курсе, что это не отдельные картинки.
Кстати, некоторые из вас наверняка применяют шрифты с лигатурами в своей IDE. Так что не так уж и далеки вы от эмодзи :)
#emoji #ligature #font #unicode
#фишка дня
Посмотрите на этот код; ничего странного не замечаете?
А здесь происходит ого-го какая драма!
Итак, этот, казалось бы, невинный кусок кода очень даже содержит в себе бэкдор. Посмотрите внимательно на GitHub Gists: https://gist.github.com/bekharsky/fa4c071ce657e37f6d0f3e7f4a91799b
Да, это на скриншоте сложно заметить, но в деструктурировании req.query вторым параметром лежит невидимый символ \u3164. Заполнитель, буквально.
То есть:
Добавляете символ как параметр запроса с командой на выполнение ну и дальше он передаётся в список ниже. А уж там...
Доклад по методу: https://certitude.consulting/blog/en/invisible-backdoor/
Вообще, таких символов очень много (очень рекомендую почитать статью). Не копируйте все подряд из сети себе.
#node #js #security #unicode
Посмотрите на этот код; ничего странного не замечаете?
А здесь происходит ого-го какая драма!
Итак, этот, казалось бы, невинный кусок кода очень даже содержит в себе бэкдор. Посмотрите внимательно на GitHub Gists: https://gist.github.com/bekharsky/fa4c071ce657e37f6d0f3e7f4a91799b
Да, это на скриншоте сложно заметить, но в деструктурировании req.query вторым параметром лежит невидимый символ \u3164. Заполнитель, буквально.
То есть:
const { timeout,\u3164} = req.query;
Добавляете символ как параметр запроса с командой на выполнение ну и дальше он передаётся в список ниже. А уж там...
Доклад по методу: https://certitude.consulting/blog/en/invisible-backdoor/
Вообще, таких символов очень много (очень рекомендую почитать статью). Не копируйте все подряд из сети себе.
#node #js #security #unicode
#фишка дня
Посмотрите на этот код; ничего странного не замечаете?
А здесь происходит ого-го какая драма!
Итак, этот, казалось бы, невинный кусок кода очень даже содержит в себе бэкдор. Посмотрите внимательно на GitHub Gists: https://gist.github.com/bekharsky/fa4c071ce657e37f6d0f3e7f4a91799b
Да, это на скриншоте сложно заметить, но в деструктурировании req.query вторым параметром лежит невидимый символ \u3164. Заполнитель, буквально.
То есть:
Добавляете символ как параметр запроса с командой на выполнение ну и дальше он передаётся в список ниже. А уж там...
Доклад по методу: https://certitude.consulting/blog/en/invisible-backdoor/
Вообще, таких символов очень много (очень рекомендую почитать статью). Не копируйте все подряд из сети себе.
#node #js #security #unicode
Посмотрите на этот код; ничего странного не замечаете?
А здесь происходит ого-го какая драма!
Итак, этот, казалось бы, невинный кусок кода очень даже содержит в себе бэкдор. Посмотрите внимательно на GitHub Gists: https://gist.github.com/bekharsky/fa4c071ce657e37f6d0f3e7f4a91799b
Да, это на скриншоте сложно заметить, но в деструктурировании req.query вторым параметром лежит невидимый символ \u3164. Заполнитель, буквально.
То есть:
const { timeout,\u3164} = req.query;
Добавляете символ как параметр запроса с командой на выполнение ну и дальше он передаётся в список ниже. А уж там...
Доклад по методу: https://certitude.consulting/blog/en/invisible-backdoor/
Вообще, таких символов очень много (очень рекомендую почитать статью). Не копируйте все подряд из сети себе.
#node #js #security #unicode
😱10👍5🔥1
#фишка дня
Иногда возникает задача поставить перенос строки после строчного (inline) элемента. Без
На помощь приходят псевдоэлементы.
Значение свойства
Ну и чтобы он сработал, нам стоит прямо указать браузеру на необходимость сохранения переводов строк.
Что это даёт? Ну, например, на десктопе можно показать перевод строки, а на адаптиве – убрать его, очистив content. Конечно, это можно сделать и скрытием
#css #tricks #unicode #after #newline
Иногда возникает задача поставить перенос строки после строчного (inline) элемента. Без
<br/>
, без преобразования элемента в блочный.На помощь приходят псевдоэлементы.
Значение свойства
content
— «\A» — это Unicode-символ 0x00000A, который, внезапно, являет собой перевод строки.Ну и чтобы он сработал, нам стоит прямо указать браузеру на необходимость сохранения переводов строк.
Что это даёт? Ну, например, на десктопе можно показать перевод строки, а на адаптиве – убрать его, очистив content. Конечно, это можно сделать и скрытием
<br/>
, но мы уже решили, что он лишний.#css #tricks #unicode #after #newline
👍17🔥5❤1👎1🤔1
#заметка дня
Пока одни считают эмодзи языком неграмотных, другие используют их как метаязык и даже преуспевают в этом.
Мир был бы гораздо скучнее без сложных эмодзи. Но не будете же вы каждый раз менять стандарт для очередной бородатой картинки?
И вот тут на сцену выходят лигатуры.
Что такое лигатура в цифровой типографике? Это замена шрифтом некой комбинации символов на один. А что такое эмодзи? Это лишь ещё один шрифт, который система применяет (или нет, сорян) к определённому диапазону символов.
И вот сочетание из чёрного квадрата и Санта Клауса превращается в чёрного Санту Клауса. Удивительное рядом.
И да, раз это просто несколько символов – к ним можно применять любые средства работы со строками. А пустые символы на самом деле не пустые, это буквально символы склейки: zero-width joiner, чтобы мы были в курсе, что это не отдельные картинки.
Кстати, некоторые из вас наверняка применяют шрифты с лигатурами в своей IDE. Так что не так уж и далеки вы от эмодзи :)
#emoji #ligature #font #unicode
Пока одни считают эмодзи языком неграмотных, другие используют их как метаязык и даже преуспевают в этом.
Мир был бы гораздо скучнее без сложных эмодзи. Но не будете же вы каждый раз менять стандарт для очередной бородатой картинки?
И вот тут на сцену выходят лигатуры.
Что такое лигатура в цифровой типографике? Это замена шрифтом некой комбинации символов на один. А что такое эмодзи? Это лишь ещё один шрифт, который система применяет (или нет, сорян) к определённому диапазону символов.
И вот сочетание из чёрного квадрата и Санта Клауса превращается в чёрного Санту Клауса. Удивительное рядом.
И да, раз это просто несколько символов – к ним можно применять любые средства работы со строками. А пустые символы на самом деле не пустые, это буквально символы склейки: zero-width joiner, чтобы мы были в курсе, что это не отдельные картинки.
Кстати, некоторые из вас наверняка применяют шрифты с лигатурами в своей IDE. Так что не так уж и далеки вы от эмодзи :)
#emoji #ligature #font #unicode
👍19👎1
#заметка дня
Кажется, я должен объяснение за позавчерашний опрос, да?
Давайте разбираться, почему же 1 превращается в \31.
Обратимся к спецификации. Поехали: https://www.w3.org/TR/2018/REC-selectors-3-20181106/
Сразу бахну на вас выдержку из лексической FLEX-нотации:
Что нас тут волнует? Нас волнует понятия идентификатора и стартовой последовательноти символов в селекторе, так и называются — ident и nmstart.
Как видим, nmstart это или a-z и символ подчёркивания, либо escape-последовательности (nonascii-символы в целом, Unicode), куда попадают и цифры, и математические символы и иероглифы.
Знак дефиса при этом зарезервирован под вендорные префиксы (помните такие? -ms-, -webkit-, -moz-), но его очень даже можно написать через escape-последовательность \- и использовать даже в селекторах по атрибуту — [att].
Итого, атрибут можно написать как _1 и так и использовать [_1], из одной цифры — 1 — только как escape-последовательность — [\31].
А можно как -1 — [\-\31] 🤪Удивительное рядом, короче.
К слову, зачем нужны такие атрибуты кроме разминки мозга? Как я уже сказал в комментариях к опросу, для экстремальной оптимизации, например.
Если результат работы какого-нибудь конструктора баннеров можно так соптимизировать — поверьте, он будет оптимизирован. Самому, наверное, не стоит, но всё же.
А если хочется почитать языком попроще — вот есть сравнительно свежая статья на Хабре: https://habr.com/ru/post/682844/
#css #unicode
Кажется, я должен объяснение за позавчерашний опрос, да?
Давайте разбираться, почему же 1 превращается в \31.
Обратимся к спецификации. Поехали: https://www.w3.org/TR/2018/REC-selectors-3-20181106/
Сразу бахну на вас выдержку из лексической FLEX-нотации:
ident [-]?{nmstart}{nmchar}*
name {nmchar}+
nmstart [_a-z]|{nonascii}|{escape}
nonascii [^\0-\177]
unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
escape {unicode}|\\[^\n\r\f0-9a-f]
Что нас тут волнует? Нас волнует понятия идентификатора и стартовой последовательноти символов в селекторе, так и называются — ident и nmstart.
Как видим, nmstart это или a-z и символ подчёркивания, либо escape-последовательности (nonascii-символы в целом, Unicode), куда попадают и цифры, и математические символы и иероглифы.
Знак дефиса при этом зарезервирован под вендорные префиксы (помните такие? -ms-, -webkit-, -moz-), но его очень даже можно написать через escape-последовательность \- и использовать даже в селекторах по атрибуту — [att].
Итого, атрибут можно написать как _1 и так и использовать [_1], из одной цифры — 1 — только как escape-последовательность — [\31].
А можно как -1 — [\-\31] 🤪Удивительное рядом, короче.
К слову, зачем нужны такие атрибуты кроме разминки мозга? Как я уже сказал в комментариях к опросу, для экстремальной оптимизации, например.
Если результат работы какого-нибудь конструктора баннеров можно так соптимизировать — поверьте, он будет оптимизирован. Самому, наверное, не стоит, но всё же.
А если хочется почитать языком попроще — вот есть сравнительно свежая статья на Хабре: https://habr.com/ru/post/682844/
#css #unicode
🤯12👍5🏆1
#фишка дня
Иногда возникает задача поставить перенос строки после строчного (inline) элемента. Без
На помощь приходят псевдоэлементы.
Значение свойства
Ну и чтобы он сработал, нам стоит прямо указать браузеру на необходимость сохранения переводов строк.
Что это даёт? Ну, например, на десктопе можно показать перевод строки, а на адаптиве – убрать его, очистив content. Конечно, это можно сделать и скрытием
#css #tricks #unicode #after #newline
Иногда возникает задача поставить перенос строки после строчного (inline) элемента. Без
<br/>
, без преобразования элемента в блочный.На помощь приходят псевдоэлементы.
Значение свойства
content
— «\A» — это Unicode-символ 0x00000A, который, внезапно, являет собой перевод строки.Ну и чтобы он сработал, нам стоит прямо указать браузеру на необходимость сохранения переводов строк.
Что это даёт? Ну, например, на десктопе можно показать перевод строки, а на адаптиве – убрать его, очистив content. Конечно, это можно сделать и скрытием
<br/>
, но мы уже решили, что он лишний.#css #tricks #unicode #after #newline
🔥26👍1
This media is not supported in your browser
VIEW IN TELEGRAM
#фишка дня
А знали ли вы, что в регулярных выражениях в JS можно указывать не только символы и диапазоны, но и названия групп символов в Unicode (т. н. property)?
Что такое группы Unicode? Ну, например, ASCII, Alpha, Diacritic, White_Space, Emoji. Вроде говорят сами за себя, вот они все: https://unicode.org/reports/tr44/#PropList.txt
Так вот, потребовалось вам, например, отфильтровать только эмодзи из текста (или узнать, есть ли они там вообще), нет ничего проще:
Смотрим на видео, благодарим Стефана Юдиса за предоставленное знание.
А, ссылка на MDN, естественно: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Unicode_Property_Escapes
#js #unicode #regex
А знали ли вы, что в регулярных выражениях в JS можно указывать не только символы и диапазоны, но и названия групп символов в Unicode (т. н. property)?
Что такое группы Unicode? Ну, например, ASCII, Alpha, Diacritic, White_Space, Emoji. Вроде говорят сами за себя, вот они все: https://unicode.org/reports/tr44/#PropList.txt
Так вот, потребовалось вам, например, отфильтровать только эмодзи из текста (или узнать, есть ли они там вообще), нет ничего проще:
/\{Emoji}/u
.Смотрим на видео, благодарим Стефана Юдиса за предоставленное знание.
А, ссылка на MDN, естественно: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Unicode_Property_Escapes
#js #unicode #regex
👍18😱7❤2
#фишка дня
Иногда возникает задача поставить перенос строки после строчного (inline) элемента. Без
На помощь приходят псевдоэлементы.
Значение свойства
Ну и чтобы он сработал, нам стоит прямо указать браузеру на необходимость сохранения переводов строк.
Что это даёт? Ну, например, на десктопе можно показать перевод строки, а на адаптиве – убрать его, очистив content. Конечно, это можно сделать и скрытием
#css #tricks #unicode #after #newline #бородач
Иногда возникает задача поставить перенос строки после строчного (inline) элемента. Без
<br/>
, без преобразования элемента в блочный.На помощь приходят псевдоэлементы.
Значение свойства
content
— «\A» — это Unicode-символ 0x00000A, который, внезапно, являет собой перевод строки.Ну и чтобы он сработал, нам стоит прямо указать браузеру на необходимость сохранения переводов строк.
Что это даёт? Ну, например, на десктопе можно показать перевод строки, а на адаптиве – убрать его, очистив content. Конечно, это можно сделать и скрытием
<br/>
, но мы уже решили, что он лишний.#css #tricks #unicode #after #newline #бородач
👍26❤1