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

    Vlad_IT
    @Vlad_IT Куратор тега Вёрстка
    Front-end разработчик
    Ютуб не отдает по ссылке прямое видео (чтобы не скачивали) поэтому нельзя его встроить через source, он дает свой код для вставки.
    Кнопка "поделиться" под видео, а там кнопка "встроить". И копируете код.
    Вот такой к вашему видео.
    <iframe width="560" height="315" src="https://www.youtube.com/embed/jNQXAC9IVRw" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
    Ответ написан
    Комментировать
  • Что лучше дублировать блок или перенести с помощью JS?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    1) Прятать лучше чем ставить через скрипты.
    2) Если есть возможность, нужно для переноса блока использовать flex свойство order
    3) Поговорить с дизайнером.
    Ответ написан
    Комментировать
  • Где взять макеты?

    Vlad_IT
    @Vlad_IT Куратор тега Вёрстка
    Front-end разработчик
    Вы видимо гуглите на русском. На английском по запросу "free psd" куча сайтов с современными макетами. https://freebiesbug.com/psd-freebies/ https://www.freepik.com/free-psd/web-templates
    Ответ написан
    3 комментария
  • Верстка с нуля: какие основные этапы работы?

    Vlad_IT
    @Vlad_IT Куратор тега Вёрстка
    Front-end разработчик
    Использую vscode+webpack+pug+scss+бэм. Из физических инструментов, основной моник: lg ultrawide 29um69g, рядом прикручен моник от ноутбука повешенный вертикально, подключенный через универсальный скаллер.

    0) Запускаю Spotify :-)

    1) Произвожу установку всех необходимых модулей для сборки. В моем случае у меня набор конфигураций для webpack (отдельные файлы для pug, scss, static и.т.д., выбираю что нужно).

    2) Запускаю avocode, загружаю в него макет. Определяю в нем переменные (в то же время записываю их, чтобы сразу кинуть в scss файл) для цветов, размеров шрифтов и.т.д. чтобы при получении кусочков кода из него, он сразу расставлял переменные.

    3) Запускаю VS Code, открываю нужную папку.

    4) Пишу размету на Pug. Пишу с БЭМ, если встречаю повторяющийся блок, то открываю файл _mixins.pug, в который пишу миксины для повторяющихся блоков, например товаров, пунктов меню, каких-то блоков и.т.д. Pug умеет делать циклы, это ускоряет сильно.

    5) Когда HTML готов, начинаю делать каркас. Если дизайн сделан по сетке, определяю контейнеры, колонки, строки в свои классы (не пишу в html тучи классов аля col-md-6, а пишу в SCSS инклуды в нужные мне блоки, типа @include make-col(2) и.т.д.).

    6) Экспортирую картинки из Avocode. Очень делается просто, указываю папку и просто кликаю экспорт и ввожу название файла и расширения. Преимущественно для иконок использую svg, если нет svg, то ищу эту иконку в интернете (дизайнеры редко рисуют иконки сами, но зато любят вставлять их не в векторе). Если иконка простая, могу сам ее в inkscape обвести, ну и если нет, то экспортирую png в размере (благо авокод это позволяет, если конечно дизайнер не вставил в исходном маленьком размере). Когда есть контакт с дизайнером, трясу его, ибо растр это плохо для иконок.

    7) Пишу стили блоков из страницы. На этом этапе можно на втором монике параллельно смотреть футураму или
    Арчера :-) Но чаще на широком монике слева браузер, справа VS Code, а на втором монике Avocode (может меняться местами с браузером). Мысленно нарезаю страницу на блоки. Для каждого блока (БЭМ) создаю отдельный scss файл (кто-то даже для элемента создает, но мне лень), из него сразу выписываю все селекторы. Иногда могу сначала выписать все селекторы со страницы (но так лучше не делать, т.к. во время работы может потребоваться изменить что-то в разметке), но чаще для одного блока выполняю этот пункт и за ним сразу выполняю пункт 8, потом для нового блока опять 7 и 8 и.т.д.

    8) Пишу css код вместе с Avocode, у него беру нужные мне параметры (а он уже подставил в них переменные), и вставляю в мой код. И параллельно сверяю со скрином макета используя вот это расширение https://chrome.google.com/webstore/detail/perfectp...

    9) Пишу адаптив. Я не могу привыкнуть к методологии mobile-first, поэтому пишу всегда сначала полную версию сайта. Я понимаю, что это чревато всякими проблемами и это типа не модно, но мне норм.

    10) Медиа-запросы пишу прямо в блоках, для каждого блока/элемента/модификатора может быть отдельный медиа-запрос. Но для начала определяю breakpoint'ы для разных экранов (чтобы их не было сотни разных), если использую Bootstrap, то беру его breakpoint'ы.

    11) Добавляю анимашки. Даже если заказчик не просил отдельно (и если не указал отдельно, что нельзя), он все равно будет доволен, а с animate.css+onscreen.js это вообще работа 10 минут. Сложные анимации обговариваю отдельно, чтобы не сделать ненужную работу.

    11) Все снова сверяю, пишу скрипты где надо. Для слайдеров в 99% случаев подходит slick (с доработками конечно, но там хорошее API), для других случаев могу написать свой.

    12) Сдаю заказчику и жду ответа сидя на тостере/пикабу.

    Это чисто мой опыт, опыт фрилансера, не знаю, как делают другие и не могу на 100% утверждать что это 100% правильный способ. Я так и не смог заставить свой конфиг webpack правильно вставлять спрайты svg.
    Надеюсь чем-то поможет мой ответ.
    Ответ написан
    7 комментариев
  • Div со свойством display: inline-block; по центру?

    Vlad_IT
    @Vlad_IT Куратор тега CSS
    Front-end разработчик
    родителю задайте text-align: center
    Ответ написан
    1 комментарий
  • Позиционирование блоков?

    Vlad_IT
    @Vlad_IT Куратор тега Вёрстка
    Front-end разработчик
    Мне кажется по логике, строка состоит из 2-х под-строк, и если в одной строке только одна под-строка, то эта строка должна быть по центру. Например если будет всего 4 дива, то последний див (который должен быть справа) не должен быть по центру, т.к. в каждой строке по 2 под-строки.
    Примерно так https://codepen.io/VladIT4/pen/OZpOjb
    Ответ написан
    1 комментарий
  • Как реализовать клавиатурный тренажер на JavaScript + помощь с функцией?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Вы немного не понимаете, как работают события (судя по этому, и предыдущему вопросу). Грубо говоря, метод document.addEventListener("keypress", checkKeyEvent) создает событие нажатия на клавишу клавиатуры, которое будет выполнять переданную функцию. Если нажать клавишу, то выполняется событие keypress, которое выполнит функцию checkKeyEvent, в которую передается объект события (а в нем и нажатая клавиша).
    Не нужно вызывать добавление события в цикле, вызовете один раз, и уже в функции checkKeyEvent делайте проверку.
    function checkKeyEvent(event) {
         // При нажатии на клавишу выполняется эта функция. Каждый раз.
    }
    document.addEventListener("keypress", checkKeyEvent);

    Ваш цикл while(counterLetters < levelText.length) { будет бесконечным, т.к. значение levelText или counterLetters не меняются. Даже если бы он не был вечен, он бы породил множество обработчиков событий, а нам нужно только одно. Циклы тут вообще не нужны. Вот такой код. Постарался подробно прокомментировать.
    let mistakesCounter = 0;
    // Это ваша getChar. Не знаю точно, такая же реализация, но это довольно известный код
    function getChar(event) {
        if (event.which == null) { // IE
            if (event.keyCode < 32) return null; // спец. символ
            return String.fromCharCode(event.keyCode)
        }
    
        if (event.which != 0 && event.charCode != 0) { // все кроме IE
            if (event.which < 32) return null; // спец. символ
            return String.fromCharCode(event.which); // остальные
        }
    
        return null; // спец. символ
    }
    
    function checkUsersKey(levelText) {
        var theEnd = false;
        var counterLetters = 0;
        var keyName;
    
        function checkKeyEvent(event) {
            // Делаем проверку, если текущий символ равен длинне символов...
            if (counterLetters >= levelText.length) {
                // То удаляем обработку события чтобы завершить печатанье.
                document.removeEventListener('keypress', checkKeyEvent);
                // Тут можете вывести сообщение пользователю, что задание закончено
                return;
            }
            keyName = getChar(event);
            // Это ваш код, проверяет, правильно ли пользователь ввел
            if (levelText[counterLetters] == keyName) {
                alert("Проверка 1 (значение true): работает"); //просто проверка
                counterLetters++;
                //тут будет код, который меняет css буквы
            } else if (keyName == null) {
                //do nothing
                alert("Проверка 2")
            } else {
                alert("Проверка 3 (else): работает");
                //тут будет код, оповещающий о том, что пользователь допустил ошибку
                mistakesCounter++;
            }
        }
        // Добавляем обработку события нажатия клавиши на функцию checkKeyEvent
        // Добавляем только один раз, она будет вызывать checkKeyEvent после каждого нажатия и удержания клавиши
        document.addEventListener("keypress", checkKeyEvent);
    }
    checkUsersKey("something");
    Ответ написан
    Комментировать
  • Как сделать сей декоративный элемент?

    Vlad_IT
    @Vlad_IT Куратор тега CSS
    Front-end разработчик
    Блок с абсолютным позицированием, который имеет верхний, правый и нижний бордер. Левый бордер реализуется через псевдоэлементы :before (с top: 0px) и :after (с bottom: 0px).
    Ответ написан
    1 комментарий
  • Vue, применение стилей к одному из нескольких одинаковых элементов?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Делайте получение стиля через метод, в который будете передавать Id по которому определять какой стиль вернуть. Ну или прямо в атрибуте пишите
    <div v-bind:class="{ 'класс_для_определенного': id === 10, 'класс_для_всех': true }></div>
    Ответ написан
    Комментировать
  • Как вызвать окно поделиться android на сайте html?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Думаю это вам поможет https://developers.google.com/web/updates/2016/09/...
    Ответ написан
    Комментировать
  • Нужно ли у заказчика спрашивать про фреймворки?

    Vlad_IT
    @Vlad_IT Куратор тега Вёрстка
    Front-end разработчик
    Вам задали задачу, если явно не указали, что использовать (терпеть не могу, когда заставляют использовать bootstrap 3), то это на ваш выбор, главное чтобы на выходе все было стандартно, чтобы программист мог без проблем натягивать.
    Bootstrap пользуется популярностью на фрилансе, еще какой. Требуют даже там, где казалось бы он абсолютно не нужен.
    Ответ написан
    2 комментария
  • В каком виде верстальщик сдает работу?

    Vlad_IT
    @Vlad_IT Куратор тега Вёрстка
    Front-end разработчик
    Постарался не повторять остальные комменты. Нашел кое что новое.
    1) Временную шкалу лучше задавать в процентах, чтобы программисту было удобнее указывать позицию, и не будет необходимости вычислять ширину временной шкалы, чтобы определять позицию по времени.
    Все штуки, которые могут иметь значение из бесконечного множества (произвольные числа, текст, картинки), и эти штуки буду потом меняться программистом (в админке, скрипте), нужно указывать не в css файлах, а прямо в HTML, чтобы программисту было удобнее и нагляднее. Можно разве что, указать через стили значение по умолчанию.
    2) Кнопки назад, вперед имеют неправильные title (кнопка назад - вперед, а вперед - назад).
    3) Кнопка прокрутки "вверх" в футере прячется за блок "Join Our Community"
    4) Что делает элемент a.arrow_up? Мне кажется, что вы хотели в него добавить текст из логотипа.
    5) В футере надо бы отступ снизу дать, а то копирайт прижат к низу.
    Ответ написан
    Комментировать
  • Как правильно оформлять медиазапросы: медиазапросы внутри класса или классы внутри медиазапроса?

    Vlad_IT
    @Vlad_IT Куратор тега CSS
    Front-end разработчик
    Если предполагается, что никто после вас не будет редактировать выходной CSS, и весь проект будет собираться сборщиком, то второй вариант удобнее, т.к. получается удобный компонентный подход.
    Допустим, есть компонент "кнопка", и для него отдельный файл /blocks/button.scss, очень удобно писать стили для этой кнопки только в этом файле. И если соблюдать БЭМ, если создавать переменные, то позже, этот компонент (блок) можно будет использовать в других проектах, без дополнительного редактирования. Скопировал файл, поменял переменные (для оформления, цвет, отступы, размеры, шрифт и.т.д.), подключил и готово.
    Но одно замечание, лучше сразу определите миксины (или переменные) для этих медиа запросов, чтобы не было сотни разных медиазапросов аля 300px, 320px, 400px и.т.д. Можно позаимствовать из Bootstrap 4

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

    Vlad_IT
    @Vlad_IT Куратор тега CSS
    Front-end разработчик
    Такое чувство, что вы это вот этот друг странного дизайнера И как такое сверстать?
    Ответ написан
    Комментировать
  • И как такое сверстать?

    Vlad_IT
    @Vlad_IT Куратор тега Вёрстка
    Front-end разработчик
    Вы уже задавали подобный вопрос Как правильнее сверстать такие элементы? , и должны были уже понять, как такое делается. Там вам дали внятные ответы, такие же как и тут. Какой смысл в вопросе?
    Ответ написан