• Как определить когда показывать картинку для ретины а когда нет?

    SmthTo
    @SmthTo Куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.
    Тег picture или img + атрибут srcset:
    https://developer.mozilla.org/ru/docs/Learn/HTML/M...
    https://webdesign.tutsplus.com/ru/tutorials/quick-...

    Update. Есть и другой подход (не через media, а через x2, x3 и так далее), если так нужна именно Retina:
    https://webkit.org/demos/srcset/.
    Особого смысла не вижу, т. к. сейчас все телефоны имеют retina-экраны (300 DPI) или очень близки к ней.

    Update #2. Вот ещё интересная ссылка для размышления с дополнительной информацией:
    https://m.habr.com/post/422531/

    P. S. Если будет поддержка IE11, то лучше (проще) использовать img с фолбэком (обычный src):
    Ответ написан
    3 комментария
  • Когда использовать jpg а когда png?

    SmthTo
    @SmthTo Куратор тега Вёрстка
    Все перепёлки мира будут оплакивать мою смерть.
    Типичные примеры использования:

    JPG — фото, иллюстрации без прозрачности, где важны цвета, переходы, оттенки и т. п. В таком случае JPG выигрывает у других форматов в плане соотношения качество/цветность/размер. Так себе для контрастных схем и текстов.

    PNG — фотографии, схемы, графические элементы с прозрачностью, всякие вылетающие за границы элементы, где относительно много цветов (фото людей, инопланетян и т. п.). При соотносимом с JPG размере файла, PNG содержит гораздо меньше цветов, а сравнимые с JPG по количеству цветов файлы PNG будут весить очень много (поэтому для фото используют JPG). Если дело доходит до схем и текстов, PNG предпочтительнее JPG в силу отсутствия артефактов на контрастных краях.

    GIF — анимации. Ну тут вообще отдельная песня. Ему на смену пророчат APNG и MP4, но воз и ныне там.

    SVG — иконки, иллюстрации. Поддерживает прозрачность, бесконечно тянется. Обычно те же иконки в SVG весят меньше, чем в PNG при одинаковом фактическом размере использования. Можно анимировать (отдельная тема и куча особенностей) и управлять с помощью CSS и JS, если встраивать inline (можно и через #use, но с ограничениями). Наверное, самый чувствительный к ошибкам формат, потому что состоит из кода: сложный SVG-файл может убить производительность. Можно очень легко зашить вредоносный код, поэтому запрещён в вёрстке писем.

    P. S. Я не могу описать все случаи, бывают уникальные, так как процесс выбора формата зависит от контента вашего изображения. В каждом конкретном нетипичном случае — думайте сами. К примеру, если векторная иллюстрация весит много, то есть смысл перевести её в JPG или PNG. Иногда SVG-иконка может весить в разы больше её PNG-аналога (при одинаковом фактическом размере использования, например, 100 на 100 пикселей при 1:1 размере viewport к физическому разрешению экрана) — тут многое зависит от методов и качества создания таких иконок. Как правильно отметил @Adamosу, иногда затраты на рендеринг SVG (на стороне клиента) не окупают его преимуществ, и приходится использовать растровые изображения. Ну и т. д… Особенностей использования форматов — куча.

    P. P. S. Почитайте о Retina, ибо нет никакого «для ретины следует юзать JPG».
    Ответ написан
    22 комментария
  • Как прижать подвал к низу страницы и при этом оставить событие scroll работоспособным?

    SmthTo
    @SmthTo Куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.
    1. Все крайне элементарно и просто:
    2. А вот так будет, если есть контент (та же разметка и CSS):
    Update. Почему я поставил flex для тега html и почему я не использовал единицы viewport (vh/vw)? Если использовать 100vh для высоты, тогда в iOS Safari и Android Chrome (сразу после загрузки) страница по высоте будет выходить за пределы видимой области. Это происходит из-за того, что 100vh — высота окна браузера со сжатым интерфейсом, а сразу после загрузки страницы интерфейс не схлопнут. Именно поэтому flex и 100%.
    Ответ написан
    5 комментариев
  • Существуют ли сайты, которые созданы в Elementor и от которых сносит крышу?

    SmthTo
    @SmthTo
    Все перепёлки мира будут оплакивать мою смерть.
    Elementor — нормальный, достаточно удобный инструмент для быстрого создания сайтов с относительно минимальными усилиями, если вам не нужно что-то сложное в плане логики и т. п. Как и любой подобный конструктор общего назначения для невладеющих навыками CSS/HTML/PHP, данный конструктор ограничивает первоначальные возможности кастомизации отдельных элементов, потому что он... универсальный. Но его функционал можно расширить. Стоит отметить. что он лишь дополняет шаблон, а не является полноценным WP-шаблоном

    Любой инструмент (даже из 2500-го года н. э.) будет на выходе выдавать хрень, если его пользователь в плане маркетолога/дизайнера -- человек без понимания и чувства вкуса.

    1. Есть ли всякие недоработки отдельных блоков в плане дизайна и кода? Да, есть.
    2. Можно ли там сделать что-то типа taotajima.jp? Нет, нельзя. Такие сайты только вручную.
    3. Пользуюсь ли я такими инструментами? Пользовался, когда нужно было отдать заказчику вполне типичную современную страницу, на которой он может что-то поправить сам. Сейчас уже не работаю в данной сфере и для таких потребностей.
    4. Elementor не преподносит себя как инструмент создания «крышесносящих» сайтов.
    Ответ написан
    9 комментариев
  • Как в IE 11 сделать чтобы FlexBox работал также как везде?

    SmthTo
    @SmthTo Куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.
    Ну, на самом деле просто нужно правильно верстать с учетом особенностей IE11, и все будет нормально:

    .advanced-search {
        flex: 0 0 100%; /* вы не поставили ширину у этого flex-элемента внутри родительского flex-контейнера */
    }
    
    .product-bg-box {
        height: 300px; /* нужно ставить и просто height тоже, не только min-height */
    }


    5c1b6e1b44817711988324.png5c1b706f2feb3792895607.png
    Ответ написан
    3 комментария
  • Возможно ли запретить прокрутку в iOS Safari с сохранением текущего положения?

    SmthTo
    @SmthTo Автор вопроса, куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.
    Достаточно простое решение нашел на kinopoisk.ru. Как и всегда в таких случаях, оно лежало на поверхности.

    В переменную сохраняем текущее положение прокрутки body, на body вешаем стилями полученное значение (только отрицательное) в свойство top. Так же нужно добавить position: fixed и left: 0 (right: 0 тоже можно, хуже не будет). Да-да, всё же fixed, засим, может поломать transform.

    Вот такие inline-стили для body от работы данного метода на Kinopoisk:
    top: -345px;
    left: 0px;
    right: 0px;
    position: fixed;

    Проверил у себя на устройствах: работает в iOS Safari 11 и 12. Иных путей решения данной проблемы найти не удалось.

    Update. Забыл добавить функции, что я написал, они не супер-гипер крутые, но рабочие:
    // 1. Фиксация <body>
    function bodyFixPosition() {
    
      setTimeout( function() {
      /* Ставим необходимую задержку, чтобы не было «конфликта» в случае, если функция фиксации вызывается сразу после расфиксации (расфиксация отменяет действия расфиксации из-за одновременного действия) */
    
        if ( !document.body.hasAttribute('data-body-scroll-fix') ) {
    
          // Получаем позицию прокрутки
          let scrollPosition = window.pageYOffset || document.documentElement.scrollTop;
    
          // Ставим нужные стили
          document.body.setAttribute('data-body-scroll-fix', scrollPosition); // Cтавим атрибут со значением прокрутки
          document.body.style.overflow = 'hidden';
          document.body.style.position = 'fixed';
          document.body.style.top = '-' + scrollPosition + 'px';
          document.body.style.left = '0';
          document.body.style.width = '100%';
    
        }
    
      }, 15 ); /* Можно задержку ещё меньше, но у меня работало хорошо именно с этим значением на всех устройствах и браузерах */
    
    }
    
    // 2. Расфиксация <body>
    function bodyUnfixPosition() {
    
      if ( document.body.hasAttribute('data-body-scroll-fix') ) {
    
        // Получаем позицию прокрутки из атрибута
        let scrollPosition = document.body.getAttribute('data-body-scroll-fix');
    
        // Удаляем атрибут
        document.body.removeAttribute('data-body-scroll-fix');
    
        // Удаляем ненужные стили
        document.body.style.overflow = '';
        document.body.style.position = '';
        document.body.style.top = '';
        document.body.style.left = '';
        document.body.style.width = '';
    
        // Прокручиваем страницу на полученное из атрибута значение
        window.scroll(0, scrollPosition);
    
      }
    
    }


    Для Bootstrap'овских модальных окон можно сделать универсальный вызов этих функций при их открытии и закрытии:

    $(document).on('shown.bs.modal', function () { // открытие любого модального окна Bootstrap
      bodyFixPosition();
    })
    
    $(document).on('hidden.bs.modal', function () { // закрытие любого модального окна Bootstrap
      bodyUnfixPosition();
    })
    Ответ написан
    3 комментария
  • Как можно (проще) сверстать такую таблицу?

    SmthTo
    @SmthTo Куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.
    Если так не хотите с помощью таблиц, то единственным полноценным (и улучшенным) вариантом для вас будет верстка с помощью CSS Grid:
    https://css-tricks.com/snippets/css/complete-guide...

    Не будет нужно ставить жесткие габариты, все будет резиновое, Grid умеет управлять одновременно как строками, так колонками... ну и т. д. Иными словами -- как таблицы, только гораздо лучше.

    Пример + адаптивность:
    https://medium.com/evodeck/responsive-data-tables-...

    P. S. В табличной верстке вполне реально сделать так, чтобы картинки «идеально так же встали». Поддержка grid хоть и неплохая, но хуже, чем у того же Flexbox и тем более хуже, чем у исконных table. Поэтому пользуйтесь caniuse.com для определения ваших потребностей и возможностей.

    В данном случае, на мой взгляд, либо table, либо grid. Flexbox тут не очень подходит, т. к. он не умеет управлять одновременно как строками, так и колонками (только чем-то одним: row или column).
    Ответ написан
    2 комментария
  • Как сделать SVG по центру?

    SmthTo
    @SmthTo Куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.
    1. Во-первых, у вас SVG неправильный: сама картинка среди кучи пустого пространства.
    2. Во-вторых, много лишнего CSS-кода.
    3. В-третьих, лучше сделать через background-image, чтобы избежать ошибок масштабирования в IE.
    4. В-четвертых я исправил и сжал ваш SVG:



    Просто скопируйте SVG-код.
    Ответ написан
    Комментировать
  • Как указать тег не имеющего class(id) в css?

    SmthTo
    @SmthTo Куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.
    :nth-child(1) работает как надо, просто вы неверно его используете. С учетом однородности конструкций, вам нужно использовать селектор прямого наследования (.class > .class):


    Для справки:
    https://learn.javascript.ru/css-selectors
    Ответ написан
    Комментировать
  • Как правильно верстать в этом случае?

    SmthTo
    @SmthTo Куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.
    Если вы делаете безо всякого фреймворка, у вас нет админки, где можно такие блоки создать и на выходе нужные стили будут проставляться хоть inline, хоть через какой-нибудь data-атрибут для JS… то, конечно, либо через классы к каждому блоку, либо через nth-child, либо через inline CSS.

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

    Я такие блоки делал так: img (+ lazyload, формат JPG) и inline-стиль цвета фона обёртки, чтобы не было пустых областей ни при каких обстоятельствах. Всё это дело обрабатывалось в админке и выводилось на сайте. Можно было использовать background-image спокойно, это уже не так важно.

    Если будете делать такой же гибрид (CSS-цвет + JPG с фоном), будьте аккуратны, у JPG могут быть артефакты сжатия из-за которых цвет фона может быть неоднородным, и на стыках может быть разница между картинкой и фоновым CSS-цветом. PNG предпочтительнее в данном плане, но у него есть недостаток в плане размера.
    Ответ написан
    1 комментарий
  • Как сверстать любой анимированный интерфейс для сайта разработанный на flinto?

    SmthTo
    @SmthTo Куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.
    Эм, ну как — как? Чтобы сверстать некий «любой анимированный элемент» нужно его… сверстать.

    Да-да, вы не ослушались, его нужно сверстать — т. е. воспользоваться HTML, CSS, JS и, если нужно, canvas.

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

    SmthTo
    @SmthTo Куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.
    object-fit: cover;
    object-position: 50% 0 (или просто 0 0);

    Высоту и ширину уже надо подгонять под ваши потребности. Либо просто высоту, либо максимальную высоту.

    Либо вообще воспользоваться техникой padding-bottom: X% для обёртки картинки (которую нужно добавить), чтобы сделать сохранение пропорций по изменении ширины, а саму картинку на абсолютное позиционирование:
    https://jsfiddle.net/1o5m7rwp/11/


    По ссылке: обрезка по высоте + сохранение соотношения сторон картинки + обрезание нижней её части. Попробуйте сжать окно, чтобы увидеть сохранение соотношения сторон при адаптивности.

    P. S. IE11 не поддерживает object-fit, но есть полифил,
    Ответ написан
    1 комментарий
  • Как наладить процесс разработки?

    SmthTo
    @SmthTo
    Все перепёлки мира будут оплакивать мою смерть.
    Да особо никак. Весь ваш рабочий процесс — череда производственного хаоса, непонятных ТЗ, требований несведущего руководства и отсутствие менеджера проекта. И вот в рамках этого вы должны работать без относительно чёткого плана, без простроенной системы коммуникации, обязанностей.

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

    SmthTo
    @SmthTo Куратор тега Вёрстка
    Все перепёлки мира будут оплакивать мою смерть.
    У меня есть машина, мне надо её починить. Она плохо едет. А вроде бы и не так уж плохо. Всё зависит от дороги!

    Вроде бы все колёса на месте, когда я проверял, но я точно не знаю. Был какой-то звук, когда ехал, он звучал как-то так: «Пукх» (примерно). Какая модель машины — тоже не знаю. Да и вообще, я вам её не покажу. Может быть проблема в руле, а может быть из-за насоса. Какого именно — не знаю.

    P. S. Даже не думайте, машину я вам показывать не стану.
    Ответ написан
    4 комментария
  • Как сделать чтобы блоки не переносились?

    SmthTo
    @SmthTo Куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.
    Ну как бы вам сказать. Размер блоков — это одно. Их уместить в строку просто. Сложнее уместить шрифт, который не адаптивен по своей сути.

    Но есть один метод:
    https://css-tricks.com/snippets/css/fluid-typography/

    Нужно будет скопировать сниппет, задать нужные параметры методом пробы.
    Ответ написан
    Комментировать
  • Gulp - CSSO vs CLEAN-CSS?

    SmthTo
    @SmthTo Куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.
    Ни то и не другое.

    Лучше всего — CSSNano. Помимо обычной минификации CSS, он использует и другие методики сокращения кода (к примеру, преобразование RGB- и RGBA-цветов в HEX-цвета, удаление ненужных значений свойств, сокращение имён анимации, объединение нескольких классов через запятую в случае одинаковых стилей, ну и кучу всего другого).

    https://cssnano.co
    https://www.npmjs.com/package/gulp-cssnano

    P. S. Работает с AutoPrefixer корректно (потому что тоже основан на PostCSS). Карты исходников тоже поддерживает.

    UPDATE. Речь идёт именно о работе оригинального CSSNano (не gulp-cssnano) в связке с PostCSS для Gulp. Посмотрите комментарии других людей к моему ответу, там есть интересные вещи/аспекты касательно других подобных плагинов, которые вполне могут быть лучше, чем CSSNano.
    Ответ написан
  • Какую ширину сайта делать 1366 или 1349?

    SmthTo
    @SmthTo Куратор тега HTML
    Все перепёлки мира будут оплакивать мою смерть.
    Советую брать в основу десктопного макета разрешение типичного ноутбука (1360px) + вычитать полосу прокрутки (16–17px). В любом случае учитывать полосу прокрутки нужно обязательно, чтобы избежать проблем.

    А ещё лучше, чтобы ваш макет умещался в рамках ~1320px, потому что некоторые шрифты на разных ОС и в разных браузерах могут иметь различный размер значений межбуквенного расстояния. К примеру, такая шняга есть у шрифта Circe: MacOS рендерит с большим межбуквенным расстоянием, чем Windows (и это в рамках одного браузера — Chrome).

    P. S. Почему за основу именно типичный ноутбук? Потому что большинство больших мониторов имеет оное разрешение, в т. ч. куча недорогих мониторов по 22 дюйма и подобные им. Лучше, конечно, продумать макеты и на разрешения выше (к примеру, 1360–1600, 1601–1920, 1921–2560). Ну и так далее. Всё зависит от дизайна.
    Ответ написан
    2 комментария
  • Как сделать невидимым html, при загрузке страницы?

    SmthTo
    @SmthTo Куратор тега CSS
    Все перепёлки мира будут оплакивать мою смерть.
    LOL (!!!), у вас сайт весит 39 Мб (!!!), 130 запросов, PNG-картинки по 3 Мб, фото для фона весит 4,5 Мб... а вы спрашивайте, почему у вас сайт грузится так плохо. Ясен пень, что у вас все пустое (белый шрифт на белом фоне), пока не прогрузится хотя бы фоновый рисунок.

    CSS и DOM у вас прогружаются совершенно нормально, у вас тут проблемы посерьёзнее :))

    Для начала включите на сервере GZIP-сжатие, а также уменьшите картинки по габаритам в Photoshop и прогоните их всех хотя бы через это: https://tinypng.com.

    Это чуть-чуть облегчит сей ад (наверное, LOL), но я уже не берусь изучать все остальные технические аспекты данного сайта... Я такого давно не видел.

    https://tools.pingdom.com/#59e8fb75ecc00000
    5c11648ce6941666242817.png
    Ответ написан
  • Как выравнивать текст по нижней границе div?

    SmthTo
    @SmthTo Куратор тега Вёрстка
    Все перепёлки мира будут оплакивать мою смерть.
    Типичная задача.

    Для родителя:
    display: flex;
    flex-flow: column wrap; (чтобы в колонку)
    justify-content: space-between; (распределяет дочерние элементы равномерно в рамках родительского блока)

    А для детей нужно подбирать параметры свойств flex-grow, flex-shrink и flex-basis (например, flex: 1 0;), чтобы нужные элементы росли по высоте, заполняя пространство, а нижний элемент с ценой — нет.

    Пришлите код, иначе будет сложно сказать, что куда подставить. Возможно, нужно будет разметку менять. Скорее всего, flexbox так же будет необходим на всём блоке, чтобы колонки с текстом и фото были равны по высоте.

    https://jsfiddle.net/w1pzu5rh/1/.
    Зоны выделил разными цветами. Верстка на коленке, но алгоритм будет понятен. Под реальности проекта нужно, конечно, подстроить (ту же минимальную высоту поставить блоку, если нужно, реальные размеры, верстку и т. п.).
    Ответ написан
  • Плагины для оживление сайта?

    SmthTo
    @SmthTo Куратор тега Вёрстка
    Все перепёлки мира будут оплакивать мою смерть.
    GreenSock (GSAP).

    Примеры:
    https://greensock.com/examples-showcases?product_i...

    Но это, конечно, не совсем плагин :))

    P. S. Не слушайте про ненужность анимаций на сайте. Просто надо знать им меру и делать те анимации, которые бы помогали дизайну/навигации, помогали бы пользователю с пониманием процессов на сайте (удаление элементов, добавление в корзину, схлопываение блоков и т. п.).
    Ответ написан