Задать вопрос
  • Как создать скелетон-структуру при загрузке сайта?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    1) Вот руководство с использованием javascript - реализация примера на codepen
    2) Вот вариант реализации с Jquery
    Ответ написан
    Комментировать
  • Как изменить текст цвета в зависимости от фона?

    Frontend777
    @Frontend777
    Ubuнтер, php разраб, Wordпрессер, человек
    Если вам подойдет использование js, то можно попробовать рассмотреть такой пример:
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <script src="script.js"></script>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <link rel="stylesheet" href="styles.css">
      <title>Dynamic Text Color</title>
    </head>
    <body>
      <div class="container">
        <p id="content">Ваш текст.</p>
      </div>
    </body>
    </html>

    Css:
    body {
      margin: 0;
      padding: 0;
      font-family: Arial, sans-serif;
    }
    
    .container {
      width: 100%;
      height: 100vh;
      display: flex;
      justify-content: center;
      align-items: center;
      background-color: white; /* Default background color */
    }
    
    .container.dark {
      background-color: black; /* Dark background color */
      color: white; /* Text color for dark background */
    }

    JS:
    const container = document.querySelector('.container');
    const content = document.getElementById('content');
    
    // Функция для определения цвета фона
    function getBackgroundColor(element) {
      const bgColor = window.getComputedStyle(element).backgroundColor;
      return bgColor;
    }
    
    // Функция для определения оптимального цвета текста
    function getTextColor(backgroundColor) {
      // Пример простой проверки на светлый или тёмный цвет фона
      const rgb = backgroundColor.match(/\d+/g);
      const brightness = (parseInt(rgb[0]) * 299 + parseInt(rgb[1]) * 587 + parseInt(rgb[2]) * 114) / 1000;
    
      return brightness >= 128 ? 'black' : 'white';
    }
    
    // Изменение цвета текста в зависимости от цвета фона
    function updateTextColor() {
      const bgColor = getBackgroundColor(container);
      const textColor = getTextColor(bgColor);
      content.style.color = textColor;
    }
    
    // Обновляем цвет текста при загрузке и изменении размера окна
    window.addEventListener('load', updateTextColor);
    window.addEventListener('resize', updateTextColor);

    P.S Нагенерил код gpt
    Ответ написан
    7 комментариев
  • Почему TS выдает ошибку при попытке присвоить объект значению val: User | null = null?

    XanXanXan
    @XanXanXan
    removeUser: state => state = null
    removeUser: state => initialState

    const initialState: {
      currentUser?:  User;
    } = {}
    
    state.currentUser = {
            id: token.user_id,
            name: token.user_name,
            role: token.user_role
    }


    https://stackoverflow.com/questions/63037105/why-i...
    Ответ написан
    5 комментариев
  • Как использовать тег picture при создании адаптивных изображений?

    @IvanPsarev
    It-любитель
    Заводим тег picture внутри которого указываем дефолтную картинку:
    <picture>
        <img class="image"
          src="img/mobile.jpg"
          alt="Описание" width="260" height="260">
    <picture>

    В данном коде у нас везде просто загрузится "img/mobile.jpg".
    Как это можно улучшить? Можно использовать прогрессивные файлы изображений такие как webp (почитать про них стоит отдельно, вкратце - они меньше весят при одинаковом качестве картинки).
    Добавляем условие для показа новой картинки:
    <picture>
        <source srcset="img/mobile.webp" 
          type="image/webp">
        <img class="image"
          src="img/mobile.jpg"
          alt="Описание" width="260" height="260">
    <picture>

    Здесь, если браузер поддерживает .webp будет загружена картинка: img/mobile.webp.
    Допустим у нас есть брейкпоинт на десктоп при 768px где нам нужно показывать картинку более высокого качества (либо вообще другую). Код можно улучшить так:
    <picture>
        <source media="(min-width:768px)" 
          srcset="img/desktop.webp"
          type="image/webp">
        <source media="(min-width:768px)"
          srcset="img/picture/desktop.jpg">
        <source srcset="img/mobile.webp" 
          type="image/webp">
        <img class="image"
          src="img/mobile.jpg"
          alt="Описание" width="260" height="260">
    <picture>

    Тут мы добавили еще 2 условия: если окно шире 768px и браузер поддерживает webp - грузится desktop.webp, если не поддерживает то - desktop.jpg.
    Данную конструкцию можно еще расширить. Например мы хотим чтобы на retina-дисплеях картинки показывались в более высоком качестве. Для этого у нас должны быть копии всех наших картинок но с увеличенным в 2 раза разрешением. Например, наши картинки будут именоваться как mobile@1x.jpg (260х260рх). плюс эти же картинки, но в 2 раза большем разрешении: mobile@2x.jpg (520х520рх). Загружать их, или нет будет решать браузер, на основании данных о плотности пикселей на экрана полученных от системы (это тоже отдельная тема для обсуждения, есть статьис названием что-то вроде "Пиксель на самом деле не пиксель". Точного названия не помню, но смысл в том, что на "так называемых" Retina-дисплеях при фактическом разрешении, например, 2500х1600px браузер будет "считать", что окно шириной 1250px). Короче для "ретинизации" код нужно изменить так:
    <picture>
      <source media="(min-width:768px)" 
        srcset="img/desktop@1x.webp, img/webp/desktop@2x.webp 2x"
        type="image/webp">
      <source media="(min-width:768px)"
        srcset="img/picture/desktop@1x.jpg, img/picture/desktop@2x.jpg 2x">
      <source srcset="img/webp/mobile@1x.webp, img/webp/mobile@2x.webp 2x" 
        type="image/webp">
      <img class="image" 
        src="img/mobile@1x.jpg" 
        srcset="img/mobile@2x.jpg 2x"
        alt="Описание" width="260" height="260">
    </picture>

    Вся эта громадина читается сверху:
    - первый <source>: если ширина экрана больше 768рх, браузер поддерживает webp и плотность пикселей 2x грузится desktop@2x.webp, если плотность пикселей 1х - desktop@1x.webp
    - если webp не поддерживается, то второй <source> - все тоже самое для .jpg
    - если экран уже 768px - третий <source>
    - во всех остальных случаях и в случае если браузер не поддерживает загрузится обычный <img>.
    Нужно понимать, что для такого подхода требуется иметь для одной картинки 4 файла и это только для одной ширины экрана:
    mobile@1x.jpg, mobile@2x.jpg, mobile@1x.webp, mobile@2x.webp.
    И еще столько же для desktop.
    Вот как-то так, можно добавить еще брейкпоинт для tablet - все по примеру :)
    Ответ написан
  • Локальная сеть переключается на 'Общественную'. Как исправить?

    pindschik
    @pindschik
    ФЫВА ОЛДЖ
    21 ПК это более чем достаточно для создания домена. Сильно облегчите себе же работу... И проблемы типа этой просто перестанут существовать.
    Ответ написан
    4 комментария
  • Где должны храниться файлы с тестами в модульной и FSD архитектуре Front-end?

    WblCHA
    @WblCHA
    В папке __tests__ на том же уровне, что и тестируемый файл. Локальные моки там же, глобальные для пекеджей согласно документации библиотеки для тестирования, а свои глобальные уже смотреть надо, в фсд можно в шейрд запихнуть.

    П.с.: но это всё очень условные правила, всё зависит от проекта и принятых там правил. Так же и от настроек линтера (в смысле можно настроить какой хочешь паттерн). Так что не грех попробовать разные варианты и выбрать тот, который для тебя/команды и проекта больше подходит.
    Ответ написан
    Комментировать
  • Как сделать, чтобы при всех масштабах сайт отображался корректно?

    demon416nds
    @demon416nds
    Разработчик на чем попало
    Изменение масштаба технически является изменением разрешения рендеринга, делайте "резиновую" вёрстку
    Ответ написан
    2 комментария
  • Что такое выражение, литерал и инициализация в JavaScript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    По-простому я бы объяснил так:
    • выражение – это любой кусок кода, который в итоге даёт значение. Напр. цифра 0 или a===b
    • литерал – это буквально записанное значение. Напр. 10 или "строка" или объект {a:10, b:20}
    • инициализация – придание начального значения. Напр. переменной при создании: var a = 10
    Ответ написан
    3 комментария
  • Как сделать анимацию курсора под текстом?

    MrDecoy
    @MrDecoy Куратор тега CSS
    Верставший фронтендер
    Можно конечно отключать poiner-events, но если включать его для текста, то это всё равно приведёт к той же проблеме. Что под текстом не будет работать.

    Поковырял немного:


    Основное что изменил - отслеживание событий mousemove не на канвасе, а на всей секции и e.offsetX на e.clientX
    Ответ написан
    1 комментарий
  • Как сверстать подобные блоки?

    LenovoId
    @LenovoId
    svg, css,js


    Ответ написан
    Комментировать
  • Как правильно верстать используя bootstrap?

    ThunderCat
    @ThunderCat Куратор тега CSS
    {PHP, MySql, HTML, JS, CSS} developer
    Как вообще задавать фикс значения используя бутстрап?
    Никак, он не для этого.

    Создавать свой класс? Нормально ли вообще создавать свой класс и юзать его в перемешку с версткой на bootstrap?
    Да, создавать, да, нормально.

    Если да, то как организовывать такие классы в файловой структуре, ведь они будут созданы только в том случае, если возможностей бустрапа не хватит.
    Добавляете файл /assets/css/style.css, подключаете после бутстрап.
    Ответ написан
    Комментировать
  • Замыкания внутри циклов javascript

    dizballanze
    @dizballanze
    Software developer at Yandex
    1. Если как они утверждают цикл будет закончен до того как будет вызвана console.log(i) то почему результат выводится 10 раз?


    У вас же timeout используется, т.е. 10 раз внутри цикла будет запущен таймер, пока первый из таймеров закончится цикл уже пройдет все 10 итераций и соотв i будет иметь значение 10.
    Ответ написан
    Комментировать
  • Как узнать, какой тип у элементов?

    LenovoId
    @LenovoId Автор вопроса
    svg, css,js
    Отвечу сам себе -

    let nodelist = document.querySelectorAll(".items .item").constructor.name;
    let collection = document.getElementsByClassName(".items .item").constructor.name;


    Выводит как и положено
    NodeList и HTMLCollection

    Ответ написан
    3 комментария
  • Как в Firefox удалить прикреплённую ссылку?

    xotkot
    @xotkot
    ответы это убийцы вопросов
    это походу с ярлыков берётся что на домашней странице
    перейдите на about:preferences#home и поставьте галочку напротив пункта Ярлыки если не стоит, далее открываем новую страницу наводим курсор на ярлык после чего у него подсвечивается '...' жмём и выбираем пункт Открепить
    Ответ написан
    1 комментарий
  • С помощью чего сделан эффект как на сайте https://www.fromscout.com/?

    @HARDOOPS
    Ясен пень, что с помощью библиотеки Three.js (threejs.org). Видно ведь, что эти коробки – модели.
    Ответ написан
    Комментировать
  • Какую виртуальную учебную доску (похожую на Miro) можно интегрировать на сайт?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Нужно уточнить спецификации, что конкретно нужно. Вариантов досок много, можно хотя бы начать с их стоимости. Указанный вами Miro очень хорош, и я не могу представить чем он не угодил, но если нужны альтернативы, могу привести минимум 3: Conceptboard, Padlet и Stormboard. Все три норм, но если бы мне нужно было выбрать что-то одно, то это Conceptboard просто из-за простой интеграции с другими сервисами, типа Google Drive и Slack.
    Ответ написан
    Комментировать
  • Разница между JavaScript и HTML5 игрой?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    На html игры не пишут. Их всегда пишут на javascript
    Просто так называют игры, которые для отображения используют холст (canvas)
    Такое название сложилось исторически, с тех времен, когда игры в основном писались на флеше. Вот чтобы их как-то обособить игры на js стали называть играми на html5 в противовес флешу.
    Ответ написан
    Комментировать
  • Как создать сайт с ведением блога?

    TTATPuOT
    @TTATPuOT
    https://code.patriotovsky.ru/
    Что-то вам все втирают какую-то дичь.

    Зачем вообще вам смотреть в сторону каких либо фреймворков, если вы ну совсем ничего в беке не понимаете. Или хотите все нервы оставить на этом проекте?

    Самое простое из того, что предложено вами - это WordPress. Инструкций, как с ним работать в интернете полно. Придётся немного освоить синтаксис PHP и саму технологию натяжки, но только лишь его.
    Навык это очень полезные для фрилансера, если этим промышляете. (но совершенно бесполезный при устройстве в компании, кстати)

    Так же могу предложить присмотреться к какой-нибудь CMS на JS. Но всё это будет точно более трудно поддерживать в будущем. Да и инструкций/туториалов/материалов будет точно меньше чем по WordPress.
    Ответ написан
    2 комментария
  • Как Google узнает местоположение?

    @anton99zel
    29а класс средней школы №7
    Помимо IP адреса есть и другие данные.
    Вот пример, IP Польша, но провайдер Россия.
    К тому же, если аккаунт не новый и ты уже заходил или параллельно авторизован в смартфоне, то в гугл попадет твой российский IP, даже если ты параллельно сидишь с забугорного IP.
    Даже, если акк создашь при включенном VPN, но до этого засветилось устройство с российским IP, то гугл будет думать, что ты в России.
    Браузер может получать информацию из Виндовс, не смотря на языковые настройки...
    Есть такая штука CDP - узнавание клиента и объединение всех его возможных профилей, что гугл и прочие активно пользуют.
    642590d551d6e638258032.png
    Ответ написан
    Комментировать