• Как решить проблему с CLS?

    MrDecoy
    @MrDecoy Куратор тега CSS
    Верставший фронтендер
    Судя по всему ему не вертикальный шифт не нравится, а горизонтальный. По обновляйте свою страницу быстро несколько раз. Сначала один элемент первый, а потом другой.

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

    MrDecoy
    @MrDecoy Куратор тега CSS
    Верставший фронтендер
    Вообще тут Ваш код должен был быть, с Вашей попыткой реализации..

    Ответ написан
    Комментировать
  • Как сделать стрелку двух линий с помощью css?

    MrDecoy
    @MrDecoy Куратор тега CSS
    Верставший фронтендер
    google: chevron css
    Ответ написан
    1 комментарий
  • Почему не работает всплывашка, сам скрипт подключен в html перед закрывающим body?

    MrDecoy
    @MrDecoy Куратор тега CSS
    Верставший фронтендер
    const openPopUp = document.getElementById('open_pop_up');
    - id должен быть уникальным в рамках страницы. Не должно быть более одного элемента, с повторяющимся id. В итоге тут будет найден только первый в разметке элемент с таким id. То есть только первая кнопка "заказать" будет работать.

    const closePopUp = document.getElementById('pop_up_close');
    - не существует элемента с таким id. Есть с class.

    const popUp = document.getElementById('pop_up'); - аналогично предыдущему.

    <a class="table_box_button" href="#" class="open_pop_up">Заказать</a>
    Это где Вы научились два раза один и тот же атрибут объявлять на элементе? Объединить в один.
    Ответ написан
    4 комментария
  • Как заставить работать colspan или существует другой способ компоновки?

    MrDecoy
    @MrDecoy Куратор тега CSS
    Верставший фронтендер
    Проблема в шапке таблицы, где вложенные объекты раскрываются в другую таблицу

    Всё верно. Проблема именно в этом. Что у Вас получается 2 несогласованные таблицы. Не понято зачем.

    <table>
      <thead>
        <tr>
          <th rowspan="3">Наименование</th>
          <th colspan="3">Компания</th>
          <th rowspan="3">Цена</th>
          <th rowspan="3">Валюта</th>
        </tr>
        <tr>
          <th rowspan="2">Название</th>
          <th colspan="2">Страна</th>
        </tr>
        <tr>
          <th>Название</th>
          <th>Морсокй морт</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>lorem</td>
          <td>lorem</td>
          <td>lorem</td>
          <td>lorem</td>
          <td>lorem</td>
          <td>lorem</td>
        </tr>
      </tbody>
    </table>
    Ответ написан
    Комментировать
  • Как найти ближайший элемент на чистом js?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    Если под "ближайший" подразумевается вверх по дереву, то:
    onclick="doLoad(this.closest('form'))"
    Ответ написан
  • Как изменить дефолтное поведение инпут дате?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    он возвращает дату в формате
    MM-DD-YYYY - месяц день год

    Нет, не возвращает.
    Возвращает в формате YYYY-MM-DD.

    как-то можно без библиотек поменять на
    DD-MM-YYYY

    Можно. Все библиотеки для JS работают на JS.

    var d = document.querySelector('input[type="date"]')
    
    d.addEventListener('change', function(){
      console.log(this.value) // YYYY-MM-DD
      const [y, m, d] = this.value.split('-')
      console.log(`${d}-${m}-${y}`) // DD-MM-YYYY
    })
    Ответ написан
    Комментировать
  • Как установить булево значение через computed?

    MrDecoy
    @MrDecoy
    Верставший фронтендер
    - forEach
    + some


    const isFilled = computed(() => {
      Object.entries(names.val).some(([, val]) => val.inputVal)
    })
    Ответ написан
    Комментировать
  • Почему закрывается popup при клике по нему?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    $('.cart-arrow, main') какие по Вашему выбираются элементы в этом селекторе?

    Ответ

    элементы с классом .cart-arrow
    и элементы, представляющие тэг main.

    Так как событие клика всплывает, то когда доходит до main срабатывает обработчик.
    Поэтому где бы Вы не сделали клик, если этот элемент внутри тэга main - сработает этот обработчик.
    Из чего можно сделать вывод, что у Вас popup как раз внутри main и лежит.
    Ответ написан
    5 комментариев
  • Как сгенерировать статическую страницу для печати через vuejs?

    MrDecoy
    @MrDecoy
    Верставший фронтендер
    function createPrintPage(htmlString) {
        const w = window.open('print-me', '_blank')
        w.document.write(htmlString)
    }
    
    createPrintPage('<h1>Print me title</h1>')

    ?

    Ну или определить для роута, который предназначен для печати, отдельный layout, в котором не будет подключен header и footer.
    Ну или стилями скрыть их
    Ответ написан
    Комментировать
  • Почему этот код не работает?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    Локал стораж хранит строки. Поэтому при установке в него false, будет храниться 'false'.
    checked ожидает - boolean.
    строка 'false' - конвертируется в true, потому что любая не пустая строка конвертируется в true. Это основа языка.

    соответтсвенно:
    -themeCheckBox.checked = localStorage.getItem('themeCheckBox')
    +themeCheckBox.checked = localStorage.getItem('themeCheckBox') === 'true'
    Ответ написан
    Комментировать
  • Как сделать, чтобы вводимый в инпут текст не заезжал под иконку очистки инпута, которая находиться в этом инпуте справа?

    MrDecoy
    @MrDecoy Куратор тега CSS
    Верставший фронтендер
    добавить паддинг справа
    Ответ написан
    Комментировать
  • Title == aria-label?

    MrDecoy
    @MrDecoy Куратор тега HTML
    Верставший фронтендер
    Не совсем.
    1) Не все скринридеры посчитают title существенным для озвучивания (пруфов на руках нет).
    2) Есть степень специфичности, на основе которой решается что озвучить пользователю.
    aria-label приоритетнее чем title.
    title наименее приоритетный, насколько я помню. Его перебьёт всё что угодно, и если совсем ничего нет, даже content, только тогда на него обратят внимание.
    title - нет на мобильных девайсах. По крайней мере визуально (voiceover`ом не проверял)

    Вот скрин кнопки "подписаться" под Вашим вопросом из дерева доступности в десктопном гугл хром:
    6370abfd6a92c130018887.png
    Как видно - по итогу пользователю зачитается "Подписаться1", потому что aria-labelledby и aria-label не заданы, а content приоритетнее чем атрибут title.

    А в приведённом Вами примере, если опустить aria-label, то, на вскидку, должен зачитать: "изображение" + значение атрибута alt + "ссылка", так как контент есть.
    А вот если бы в ссылке не было вообще ничего и картинка рисовалась на css, скажем, фоном. Вот тогда, НАВЕРНОЕ, можно было бы сказать что aria-label и title равны. Но только при условии что скринридер вообще считает title за семантический атрибут.
    Ответ написан
    Комментировать
  • Что такое window.__INITIAL_STATE__?

    MrDecoy
    @MrDecoy
    Верставший фронтендер
    При использовании предварительного рендеринга страниц, независимо на стороне сервера(SSR) или при билде приложения(SSG), разметка, прилетающая на клиент - просто разметка. Не реактивна.
    Думаю, Вы знаете, что есть такой процесс как гидратация - если коротко, то это как раз и есть процесс, когда статика обвешивается реактивностью.
    Стэйт - это просто объект в памяти.
    Откуда ему взяться в памяти, если начальное состояние приходит с сервера?
    Вот оно и приходит в переменной INITIAL_STATE.
    Происходит гидратация, initial_state становится, назовём условн, current state, то есть переходит в vm.$store и дальше работает как SPA.

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

    MrDecoy
    @MrDecoy Куратор тега HTML
    Верставший фронтендер
    https://yablyk.com/128244-chrome-link-to-text-fragment/
    1. Откройте браузер Google Chrome и перейдите на необходимую веб-страницу.
    2. Выделите нужный фрагмент текста, на который вы хотите создать ссылку. Это может быть как одно слово, так и целый абзац. Нажмите правую кнопку мыши.
    3. Выберите в контекстном меню пункт Копировать ссылку на выделенный текст.
    Ответ написан
  • Как привязать число(возраст человека) к блоку-карточке, для фильтрации?

    MrDecoy
    @MrDecoy Куратор тега CSS
    Верставший фронтендер
    Зависит от того, что у Вас на клиенте.
    Как выводятся данные, как генерируется разметка.

    Если разметка генерируется через js, то когда создаётся инстанс карточки,
    const card = document.createElement('div')
    ничего не мешает назначить своё кастомное свойство, например:
    card.personAge = 20.
    Или, более распространённая практика - задать соответствующий data-атрибут.

    Если с бэка разметка приходит, то data-атрибут
    <div class="card" data-person-age="20">...</div>
    Ответ написан
    Комментировать
  • Код должен выводить сумму элементов объекта, что не так?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    - if (typeof key == 'object') {
    + if (typeof obj[key] == 'object') {
    Ответ написан
    Комментировать
  • Как сделать превью при наведении на Jquery?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    https://learn.javascript.ru/task/image-gallery
    Дело за малым - поменять событие с клик на mouseover и.. кхе кхе... переписать на jquery
    Ответ написан
  • Как получить самую давнюю дату, хранящуюся в массиве?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    new Date( // чтобы конечный результат был в виде человеко читаемой строки
     Math.min.apply(  // применим функцию поиска минимального элемента в массиве с помощью apply
       null, // контекст не нужен
       arr.map(i => new Date(i.date)) // в качестве массива, среди которого ищем минимум - массив дат, преобразованных в Date
      )
    ).toISOString() // собственно, преобразовываем в человеко понятную строку.


    Ну или нагляднее:
    const dates = arr.map(i => new Date(i.date))
    const minDate = Math.min.apply(null, dates)
    const minDateString = new Date(minDate).toISOString()
    Ответ написан
    Комментировать
  • Как сделать операцию сложения с innerText и числом?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    Вы были в шаге от успеха.
    - text.innerText += number;
    + text.innerText = Number.parseInt(text.innerText) + number;

    Ну или нужно было перед этим прибавить к number значение из инпута
    Ответ написан
    Комментировать