Ответы пользователя по тегу HTML
  • Почему не работает Gulp?

    @Flying
    У вас не установлен или не подключен gulp-sass.

    Более точно можно сказать только видя содержимое Gulpfile.js

    UPD: Причина наверняка в том, что версия gulp-sass ниже 5-й, поскольку синтаксис явного подключения компилятора появился только в 5-й версии. Нужно смотреть в package.json.
    Ответ написан
  • Где и как предложить идею нового свойства CSS?

    @Flying
    Спецификаций CSS занимается рабочая группа в составе W3C. Там же есть и информация о том, как принять участие / предложить свою идею.

    К примеру вы можете создать issue в репозитории рабочей группы.

    Однако вам стоит понимать, что работа над спецификацией уровня CSS Grid - это многолетний труд сотен людей для того, чтобы довести её до реального использования. Если вы предполагаете что за всё это время никто из них не додумался до этой идеи - то вам стоит подумать ещё раз.

    Важно помнить, что в отличие от каких-то конкретный use cases которые были бы интересны для пользователей создатели спецификации сосредоточены на совершенно других вещах. Их цель - создание по возможности полного и непротиворечивого механизма, который при этом будет реалистичным в реализации и использовании.

    За примерами далеко ходить не нужно: parent selector - мечта уже нескольких поколений разработчиков и тема постоянных вопросов. Однако его нет в спецификации (хотя он был в первых драфтах CSS 3 насколько я помню) и скорее всего не будет. Причину, если интересно, попробуйте поискать сами.

    Или, к примеру, такое очевидное, казалось бы, опущение как отсутствие аналога :hover для "stuck" состояния элемента с position: sticky. Ведь его явно не хватает почти любому кто использовал этот стиль. Однако его не будет, о причинах (логичных, но далеко неочевидных) можно почитать в соответствующем issue.

    Конечно, если вы внимательно и детально изучите все спецификации и проработаете и напишете своё предложение - оно, вероятно, будет рассмотрено. Но более вероятна ситуация что где-то здесь вы найдёте аналогичную или близкую идею.
    Ответ написан
  • Как сделать такую верстку?

    @Flying
    Ответ написан
    Комментировать
  • Почему мобильный firefox увеличивает шрифт?

    @Flying
    Не знаю где вы там увидели разницу...

    Вот скриншоты из Browserstack, взял первый попавшийся девайс (Samsung Galaxy S21), открыл сайт в Chrome (слева) и Firefox (справа), сделал скриншоты, специально выровнял по вертикали чтобы проще было сравнивать.

    60ef36f8b3125511944492.jpeg

    Самое заметное - фон немного отличается, с чем это связано - не знаю, но шрифты точно одинакового размера.

    Может у вас в Settings -> Accessibility выключен Automatic font size и выставлено значение, отличное от 100% ? Тогда да, размер будет отличаться, но вы ведь сами его выставили в этом случае.
    Ответ написан
  • Когда лучше использовать примеси, а когда общие классы?

    @Flying
    Общие CSS классы можно использовать если вы контролируете установку этих CSS классов, ведь это делается в HTML. Естественно в этом случае объём результирующего CSS кода будет меньше, но в сложных случаях логика расстановки CSS классов может быть не самой тривиальное.

    В отличие от них mixin'ы влияют на генерируемый CSS. Кода в итоге скорее всего будет больше, но он будет более изолированным и менее будет зависеть от управления HTML. В плане производительности, если подходить с умом и не строить многоуровневые сложные селекторы без надобности - особых проблем быть не должно.

    Также не стоит забывать о ещё одном способе горизонтального расширения - placeholder'ах. Их использование позволяет сэкономить на объёме CSS кода за счёт исключения дублирования, но может иметь не самые очевидные последствия без понимания того что именно стоит за этой абстракцией.
    Ответ написан
    1 комментарий
  • Как задействовать CSS в зависимости от значения scrollTop (pageYOffset)?

    @Flying
    Подобная функциональность - идеальный кейс для использования IntersectionObserver. Добавляете observer на элементы, соответствующие вашим экранам, определяете пороговое значение срабатывания - и дальше просто реагируете на события переходов между состояниями.

    Конечно возможны нюансы с тем что, к примеру, несколько (больше двух) ваших страниц попадут во viewport (помним что мониторы можно развернуть и вертикально, получив высоту viewport'а в 2k пикселей), но в целом получается весьма стабильно работающая схема.

    Дополнительный плюс в том что вам не нужно заниматься отслеживанием события scroll т.к. это и сложнее в реализации и менее надёжно и есть связанные с ним проблемы (подробнее в документации)
    Ответ написан
  • Как понять какой именно шрифт отображается?

    @Flying
    Не скажу за Chrome, в Firefox это видно на вкладке Fonts:
    5fb038e1e16b2507425378.png
    Ответ написан
    Комментировать
  • Где можно взять CSS стили для prompt Mozilla Firefox?

    @Flying
    Все стили для интерфейса Firefox можно найти в их репозитории, но надо понимать что кода там очень много.

    Также не стоит забывать что скорее всего внешний вид этого окна различается в зависимости от платформы, то что вы приводите - это внешний вид для Windows, но Firefox - кросс-платформенное приложение. Не забывайте также о наличии различных цветовых тем под которые подстраивается UI браузера. В общем задача сложнее чем вам, возможно, кажется.

    Существует такая вещь как system colors, смотрите в их сторону в качестве источника информации о цветах.
    Ответ написан
    Комментировать
  • Что изучать после Flexbox?

    @Flying
    https://www.w3.org/Style/CSS/ здесь много всего интересного, скучно не будет.
    ну или хотя бы здесь: https://developer.mozilla.org/en-US/docs/Web/CSS
    Ответ написан
    1 комментарий
  • Как корректно сверстать подобное?

    @Flying
    У общего блока добавляем:
    background-image: url(<картинка с точками, можно как data url>);
    background-position: top left; 
    background-repeat: repeat-y; 
    padding-left: <размер фона по Y + отступ до контента>;

    Для каждого из элементов добавляем:
    position: relative; 
    &:before {
      content: '';
      position: absolute;
      top: 0;
      left: 0 - <размер отступа>;
      transform: translate(50%, 50%);
      border: <размер белого пространства сверху / снизу> solid #fff;
      <и здесь либо рисуем элемент через width, height, background-color, border-radius либо картинками, думаю что второе предпочтительнее> 
    }

    Правда такой способ в зависимости от высоты элементов может дать частично закрытые точки, для того чтобы этого избежать надо будет контролировать высоту элементов с тем чтобы она была кратна шагу между точками.
    Ответ написан
    Комментировать
  • Мобильная верстка — почему уменьшается масштаб сайта?

    @Flying
    Проверьте наличие в коде сайта настроек viewport'а, что-то вроде этого должно помочь:
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    Ответ написан
    1 комментарий
  • Как правильно верстать сайт с арабскими и хинди языком?

    @Flying
    Поскольку недавно пришлось добавлять в одном проекте арабский язык - поделюсь полученным опытом:

    Вёрстку как правило переделывать не нужно, обычно достаточно изменения стилей, но только в случае если сам сайт свёрстан с применением современных техник, в первую очередь flexbox. Если у вас там float'ы или таблицы - то ой, задача по сложности вырастет на пару порядков и почти наверняка не обойдётся без доработки html кода. Если же в этом аспекте всё в порядке и ваш проект построен на flexbox - то основная масса изменений сводится к одной строчке CSS:
    body {
        direction: rtl;
    }

    это "перевернёт" все горизонтальные flexbox'ы и по сути сделает за вас всю основную массу работы по адаптированию сайта к RTL языкам. Конечно, в зависимости от того как именно у вас будет подключаться стиль (отдельные стили для RTL или только патч или всё вместе) реальный селектор может быть, к примеру html[dir=rtl] + body, но это уже детали.

    Тем не менее, даже если flexbox автоматизирует для вас кучу ручного труда - есть целый ряд ситуаций когда необходимы доработки вручную. Основных направлений несколько:

    1. Горизонтальные отступы. Это самая большая часть работы по адаптации т.к. вам необходимо будет "перевернуть" и их тоже, заменив, к примеру, margin-left на margin-right и наоборот, то же самое для padding'а
    2. Абсолютное / относительное позиционирование в горизонтальной плоскости. Речь идёт о свойствах left и right, их, как можно догадаться, тоже необходимо поменять местами
    3. Размеры шрифтов. Поскольку, к примеру, арабский шрифт, обычно выглядит меньше и тоньше чем, к примеру, английский - возможно возникнет потребность увеличить размеры шрифтов (font-size, line-height) и, возможно, подстроить стилизацию (font-weight)
    4. text-align - в ряде ситуаций может потребоваться изменить его на противоположный
    5. :first-child и :last-child, стоит быть внимательным и перепроверить корректность получаемого результата, к примеру если к этим псевдо-элементам добавляется дополнительный отступ - вам, возможно, придётся менять местами и селекторы
    6. Нужно адаптировать визуальные элементы содержащие направление, к примеру стрелки / уголки и т.п. В ряде случаев их можно повернуть, но где-то необходимо будет рисовать отдельную версию


    Если вы используете CSS препроцессоры - то я очень рекомендую написать mixin'ы для рендера этих свойств и адаптировать код таким образом чтобы изменяющиеся стили рендерились через них. Я выложил набор mixin'ов которые использовал в своём проекте, среди них нет mixin'ов для отступов и шрифтов т.к. у меня эти вопросы решаются по-другому, но думаю что там не будет ничего сложного.

    Общая схема адаптации которую я использовал в проекте:
    1. Добавление direction: rtl
    2. "Переворачивание" отступов, это самая большая часть работы т.к. они чаще всего встречаются
    3. Проверка вёрстки, для каждого выпавшего элемента добавление патчей с использованием mixin'ов, ссылку на которые я дал выше
    4. Подбор изменений для шрифтов, адаптация шрифтовых параметров


    Пример выдернутого наудачу из проекта куска для демонстрации патчей, это стиль добавления иконки к строке текста, для RTL языка её нужно было опускать ниже:
    &.with-icon {
        $icon-size: 1.85em;
        @include offset(h $icon-size 0);
    
        &:before {
            // Позиция иконки меняется на противоположную
            @include hpos($left: -1em, $auto: true);
            font-size: $icon-size;
            // Подстраивается высота иконки относительно текста
            @include ltr() {
                top: 45%;
            }
            @include rtl() {
                top: 65%;
                // Стоит обратить внимание что для RTL языков иконка дополнительно переворачивается, 
                // там стрелка, так что работает нормально, но в других местах это может быть по-другому
                transform: translateY(-50%) rotate(180deg);     
            }
        }
    }


    Надеюсь это описание будет полезным :)
    Ответ написан
    2 комментария
  • Как сделать миксин-карту для подобного использования?

    @Flying
    map-has-key - это функция работы с map, у вас же по факту map of lists т.е. через map-has-key и map-get вы получаете элемент соответствующего "цвета", а обращение к элементам списка должно идти через функции работы со списками, к примеру через @for или @each, или, если вам известна позиция в списке - то через nth()
    Ответ написан
    Комментировать
  • Запуск анимации только когда человек доскролил?

    @Flying
    В современных браузерах задача решается нативно через IntersectionObserver, для более старых есть polyfill.
    Ответ написан
    Комментировать
  • Инструмент для генерации css-селекторов из файла html?

    @Flying
    Сделать это несложно на самом деле, достаточно использовать любой HTML парсер, их много. Другое дело что полученный результат придётся разбирать, отфильтровывая то что вам в реальности не нужно (причём вручную) и этот процесс почти наверняка займёт больше времени чем написание нужных вам селекторов вручную.

    Также не забывайте что:
    1. CSS селекторы - это далеко не только id и class name, они намного гибче, а самые интересные варианты вы таким образом не автоматизируете
    2. Современные IDE, к примеру те же продукты JetBrains хорошо умеют, понимая контекст, давать хороший автокомплит для CSS селекторов по структуре HTML, поэтому ваша задача там уже решена, только намного эффективнее
    Ответ написан
    3 комментария
  • От чего возникает ошибка в PHP?

    @Flying
    Выключена настройка short_open_tag в php.ini, но в целом её использование сейчас считается плохой практикой, стоит использовать полноценный тег <?php
    Ответ написан
    Комментировать
  • Как поменять стили у дочерних блоков при нажатии на основной при помощи CSS?

    @Flying
    Для того чтобы всё заработало - необходимо чтобы input стоял перед label, а не после. CSS селекторы работают только "вперёд", соответственно если хочется завязать изменение стилей на состояние checkbox - он должен располагаться в DOM раньше чем элементы к которым будут применяться стили, зависящие от состояния checkbox'а
    Ответ написан
    1 комментарий
  • Как заставить крайние правые пункты меню трансформироваться в выпадающий блок при ресайзе окна?

    @Flying
    Делал как раз такое когда верстал для LDZ, так что можно подглядеть реализацию у них на сайте (самое верхнее меню). В целом думаю что можно обойтись и без JavaScript, просто такой задачи в том проекте не стояло. Сама идея тривиальная:

    Есть две копии меню: одна для горизонтального меню другая - для вертикального. Для горизонтального меню используется flexbox с flex-wrap и ограничение высоты в 1 строку с overflow: hidden. Для вертикального - обычный список. Основная задача - при клике на триггер показа вертикального меню взять все пункты меню из горизонтального варианта и либо скопировать их в вертикальное либо перенастроить видимость пунктов вертикального меню в зависимости того "завёрнуты" ли соответствующие пункты горизонтального меню в дополнительные строки.
    Ответ написан
    Комментировать