• Как изменить дочерний класс через другой дочерний класс?

    @strelok011
    Версия css, которая умеет такие штуки, еще не вышла из черновиков https://habr.com/ru/articles/662355/
    И как по мне - лучше такое не выпускать вовсе.
    Если у Вас есть триггер для изменения состояния кнопки "тест 2", что мешает его расширить для выбора еще и "все посты"?
    Вы пытаетесь размазать бизнес логику функционала страницы по разным местам, что выглядит просто ужасно.
    Раньше пресловутый IE поддерживал выполнение скриптов в css, но благополучно выпилил.
    Ответ написан
  • Где в 2023 изучить canvas? И стоит ли вообще?

    @strelok011
    растровая, векторная... только в канвасе сможете добиться суууупер плавной анимации, приходилось делать и на свг и в канве.
    минусы - еще одна херня для изучения, популярность низкая, так что - зачем? это как быть экспертом по обсидиановым топорам.
    плюсы, ну они есть, но это схватилось как бетон.
    Между прочим, сайт весьма известной конторы по интернет платежам использует канву в рендере некоторых анимированых иконок. Выглядит как "дорохо богато", кисточка для пупка.
    Всё остальное - если попадёте в мир больших ГИС, бесшовных карт и прочего - ну, да... пригодится. Это возвращаясь к топору.
    Ответ написан
    2 комментария
  • Как правильно оптимизировать страницу?

    @strelok011
    Оптимизация html и css по сравнению с оптимизацией png - бесполезная ерунда. Вы можете выиграть допустим 2-5 кб против 2-3 мб одного png, в условиях современного интернета этот выигрыш ничего не даст. Даже запрос на сервер может больше времени занять чем скачивание.
    Необходимо обратиться именно к оптимизации png при этом желательно с минимальными потерями по качеству.
    Советую для начала ознакомиться вот с этой статьёй How To Optimize PNG, а потом поискать инструмент поудобнее, просто погуглив PNG optimizer. Вот сравнение нескольких пакетных оптимизаторов. Я при необходимости оптимизации png использую RIOT, он может оптимизировать png, gif и jpg. Из личного опыта - советую попробовать первым делом оптимизацию палитры. Плюс есть не искажающие оптимизации (например, удаление мета-данных). Если используете прозрачность - она сильно добавляет веса в изображение, с ней тоже можно бороться.

    Всё это хорошо, если у вас есть возможность оптимизировать изображения, статично размещенные на сайте.
    Ответ написан
    Комментировать
  • Как дать возможность вводить в input mui "-" с клавиатуры?

    @strelok011
    Выбросить type number, написать свою валидацию на скажем yup или его аналоге.
    И не тратить время.
    Ответ написан
    Комментировать
  • Как записать ответ с сервера в определенный инпут?

    @strelok011
    если разговор про реализацию в React - то вопрос, какие именно инпуты используются в вашем проекте - контролируемые или нет?
    Неконтролируемый uncontrolled
    const { useRef } from 'react';
    
    function Example () {
      const inputRef = useRef(null);
      return <input type="text" defaultValue="bar" ref={inputRef} />
    }


    Контролируемый (а еще их называют тупыми) сontrolled
    const { useState } from 'react';
    
    function Controlled () {
      const [email, setEmail] = useState();
    
      const handleInput = (e) => setEmail(e.target.value);
    
    
      return <input type="text" value={email} onChange={handleInput} />;
    }
    Ответ написан
    Комментировать
  • Какую способ написания стилей выбрать для новостного сайта на nextjs?

    @strelok011
    Собственно, не вижу проблемы в выборе инструмента.
    Если дизайнер не упоротый - будет рисовать всё опираясь на единожды отрисованные компоненты. Их должно быть вполне определенное количество, с фиксированным набором состояний.
    Создаете пакет компонентов, заголовков, верстаете лейаут для размещения по сетке, всио. С чего тут придется тонны стилей держать?
    Если есть опыт в стайлед - пишите в стайлед (он мне больше подходит по профилю, к примеру, удобно темами оперировать)

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

    @strelok011
    Поделюсь своим опытом:

    1. Отправлять - нормально. на сервере ты не хранишь пароль в открытом виде, а хранишь хэш. Если устройство скомпрометировано, ты никак не сможешь защититься.
    2. В куке ты передаешь данные. там может храниться до 4кб разного хлама, зачем тебе это хранить на сервере? Главное что ты туда должен положить - аксесс токен, которым будет подписываться каждый запрос на авторизованные эндпойнты. Кука - просто один из механизмов для хранения и передачи этого токена с клиента на сервер. Можно точно так же отдать явным респонсом вместо куки, просто это потенциальная дыра безопасности на клиенте.
    3. Токены хранишь на сервере, у них должно быть время жизни. Классика - пара часов, плюс к нему рефреш токен, которым можно перевыпустить новый. UPD Про уникальные токены - почитай например про JWT токен
    4. на клиенте ты в браузере не должен ничего читать. Запрос на бэк для клиента будет типа "не подписанным", просто вместе с запросом на бэк полетит и инфа из куки, которую уже ты должен собрать и определить статус клиента.
    5. Выше понятно, но тем не менее - при смене пароля просто убиваешь все ранее выпущенные токены авторизации вместе с рефреш токенами. В дальнейшем любой эндпойнт, требующий авторизации, будет возвращать какую-то ошибку, на которую фронт должен переводить пользователя в окно авторизации. Особой магии тут нет.
    Ответ написан
    4 комментария
  • Какие отличия в верстке под ios и android?

    @strelok011
    Надо бы насобирать еще материал, но
    1. по поводу лагов - чем меньше фильтров, теней, прозрачностей - тем айфону легче. Не умеет в ускорение.
    2. скролл - это отдельная БОЛЬНАЯ тема у айфонов. Причем у разных версий IOS они разные. Проблема в том, что реализация демонстрации куска верстки длинной страницы в окне браузера просто уродская. На старых айфонах, к примеру, не работал position fixed.
    3. Никогда, просто НИКОГДА не пытайся прибить скользящее меню к низу страницы. Это и на андроиде выйдет дичайшим геммороем из-за автовсплывающих или автоскрывающихся панелей инструментов. Это ад и боль
    4. В качестве задачи со звездочкой - попробуй реализовать модалку поверх контента, в которой свой скролл, и попробуй заблочить скролл контента в фоне. Айфон тебя порадует своими чудесами.
    5. Думаю, будет весело перебирать высоту вьюпорта и подбирать позиционирование, переключаясь то на px то на wh.
    6. Имей в виду - как бы не назывался браузер на айфоне - он использует одно и то же ядро сафари, специфичное для версии ios, так что глюки переносятся.
    7. Ловил проблемы (тут уже не в платформе а в реализации сафари) именно в сафари если делаем display: flex, flex-direction: reverse, отваливается gap. Без реверса - всё гуд. На других реализациях таких проблем не встречал.
    8. Если ты попробуешь поиграть с параллаксом самописанным - получишь ачивку "слабоумие и отвага"
    Ответ написан
    3 комментария
  • Как сделать форму из 4-х этапов и передавать данные в каждый из них?

    @strelok011
    Любая динамика с данными в окне браузера - нужен js. Работа в асинхронном режиме - таки да, это AJAX. Только сам термин ничего не объясняет.

    Писать можно хоть на нативном js, можно подключать фреймворки типа jQuery, Vue, React и проч.
    Вам придется хранить состояние формы (значения полей, ответы от бэкенда, служебные данные типа шага формы и др.), писать / использовать готовые модули для работы с календарем, отправлять запросы на эндпойнты бэкенда в асинхронном режиме, вешать крутилки (спиннеры) пока ожидается завершение запроса, перестраивать структуру документа чтоб отображать / скрывать шаги формы, писать валидацию заполнения данных, чтобы пользователь вводил только ожидаемые значения.
    Готового "воткнул - работает" не найти, такие решения исключительно под конкретные требования пишутся.
    Ответ написан
    Комментировать
  • Как правильно создать приложение Messenger?

    @strelok011
    Судя по постановке вопроса - в голове полная каша из обрывков знаний, уж простите :)
    Рекомендую посмотреть вот этот видеоурок, хоть он и не про мессенжер, а про интернет магазин.
    В видео показаны этапы проектирования продукта, планирование базы данных, реализация, создание эндпойнтов, разработка фронт-приложения.
    Если вдумчиво смотреть и сразу применять, разбираться почему и зачем, и как это можно будет расширить и изменить под себя, вы точно сможете сделать что-то свое.
    Если не хватит базы знаний - копайте статьи в интернете по тому инструменту или области, которая для вас темный лес.
    Вот тут в "двух словах" рассказано как сделать проект.
    Ответ написан
    Комментировать
  • Html письмо в корп. версии outlook не видит медиа-запросы?

    @strelok011
    1. проприетарные почтовые клиенты не используют веб движки в своей массе, так что там поддержки модных фич не стоит и пытаться ожидать.
    2. имейте в виду что любой почтовый клиент (хоть онлайн, хоть стационарный) переиначит ваш html код своими встроенными парсерами в то, на что рассчитано его окно вывода сообщения.
    3. для упрощения верстки писем попробуйте воспользоваться mjml, легко гуглится и результат вполне себе.
    Ответ написан
    Комментировать
  • Плохая ли это практика, так писать styled component и почему?

    @strelok011
    Можно вообще весь проект написать в одном файле, вебпаку всё равно.
    Главный вопрос - кому вы этот код показывать будете и как долго поддерживать.
    Суть разделения в отдельные файлы - не мешать мух с котлетами.
    Общий подход - выносить повторяющийся код, отделять бизнес-логику от оформления, выносить типы.
    Это - сложившаяся практика, опирающаяся на существующий опыт.
    З.ы. А что значит "не отсвечивается"? Подсветка в этом коде не работает что ли? Есть плагины для многих ide.
    Ответ написан
    Комментировать
  • Как убрать границу лесенкой?

    @strelok011
    попробуйте добавить вот это в класс
    -webkit-backface-visibility: hidden;
    Ответ написан
  • Почему viewport не работает на десктопе?

    @strelok011
    Потому что гугл говорит, что вьюпорт вводился и поддерживается только мобильными устройствами, из-за того что у них есть экраны с высокой PPI (плотностью физических пикселей) и изображение на экране необходимо было управляемо масштабировать.
    Десктоп подобные извращения не поддерживает, т.к. есть просто базовые значения и прямые руки у верстальщика.
    Ответ написан
    Комментировать
  • Как сделать чтоб выпадающий дропдаун не обрезался в блоке с overlfow: auto и максимальной высотой?

    @strelok011
    Чтобы не кропало - релативный блок должен находиться за пределами оверфлоу.

    Решение - дропдаун класть в тело документа за пределами родительского блока, писать муторную обвязку на js с вычислением координат порождающего элемента на экране, по ид вычислять что класть в этот пустой дропдаун, либо искать такой дропдаун в готовых библиотеках, лет 5 назад натыкался на такое готовое.
    Либо примерно ту же муть с вычислением позиционирования но с оберткой вокруг вашего блока с оверфлоу и без выноса дропдауна.

    <div style="position:relative">
        <div style="width:280px; height: 100px; border:1px solid red; overflow:hidden; ">
            <ul>
                <li style="/* removed position:relative; */ width:200px; height:50px; list-style-type:none; background:yellow;z-index: 3;">
                    <div style="position: absolute; top: 30px; left: 52px; width:180px; height:150px; background:Pink; z-index: 99;">
                        <br>
                    </div>
                </li>
            </ul>
        </div>
    </div>


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

    @strelok011
    Такое бывает в ситуации, когда в контенте или в любом блоке присутствует элемент или контейнер шире, чем ширина страницы. Это могут быть как изображения, так и элементы у которых неправильно заданы параметры с шириной и паддингом.
    Т.е. если есть элемент с шириной 100% и паддингом, ему надо бы указывать box-sizing: border-box;
    Так же могут влиять неверно применяемые флоаты, флекс и прочее.
    Первый шаг для проверки - накидывать overflow: hidden на контейнеры чтоб локализовать проблему, где именно находится распирающий элемент, либо в отладчике включить инструмент выбора элемента на странице и искать в пустой казалось бы области.
    Ответ написан
    1 комментарий
  • Как запретить скрытие адресной строки браузера на мобильном устройстве при скролле?

    @strelok011
    попробуйте это
    html {
      background-color: red;
      overflow: hidden;
      width: 100%;
    }
    
    body {
      height: 100%;
      position: fixed;
      /* prevent overscroll bounce*/
      background-color: lightgreen;
      overflow-y: scroll;
      -webkit-overflow-scrolling: touch;
      /* iOS velocity scrolling */
    }
    Ответ написан
  • Как исправить проблему контейнера?

    @strelok011
    Ну, хотя бы потому что добавляя класс "modal open" вы добавляете отступ на оборачивающий блок справа padding 8 px. Соответственно написанным вами стилям контент смещается и на него влияют оборачивающие стили, а вот блок тулбара у вас position fixed, эта конструкция вырывает элемент из потока и отступ всей обертки на него не влияет.

    Где вы такой замшелый способ прибития футера к низу нашли? Делайте на флексах, контентной части флекс гроу 1, общему контейнеру с флексом минимальную высоту 100% и этого будет достаточно.

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