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

    @alexalexes
    .header-dropdown-item {
    ...
      height: 4rem;
    ...

    .header-dropdown-item:hover {
    ...
      height: fit-content;
    ...

    Эти значения высот в вычисленном состоянии имеют разный результат в пиксельном выражении?
    Как вы думаете?
    Ответ написан
    Комментировать
  • Как сделать табы с выводом из бд?

    @alexalexes
    Выводить также как из любого другого источника данных.
    1. Подготовьте источник данных.
    - Разверните службу СУБД в операционной системе сервера.
    - Выберите менеджер, чем вам будет удобно просматривать объекты СУБД.
    - Установите менеджер СУБД.
    - При помощи менеджера СУБД заведите пользователя базы данных, схему базы данных, структуру таблиц и связей, вставьте необходимые данные.
    2. Изучите способы подключения к источнику данных и взаимодействия из PHP (как делать коннект к СУБД, как подготавливать запросы и параметры к ним, как фетчить результат выборки запроса).
    3. Подключитесь к базе, выполните запрос, встройте выборку результата в ваш шаблон HTML (табы).
    Ответ написан
    3 комментария
  • Как сделать так, чтобы элемент можно было тащить влево-вправо?

    @alexalexes
    1. На десктопе рулят события мыши: mousedown - эквивалент touchstart, mousemove - эквивалент touchmove, mouseup - эквивалент touchend.
    2. Вместо множества точек касаний (пальцы) у вас одна точка - курсор мыши, поэтому свойства changedTouches в объекте события не будет.
    3. Тестировать, что окружение браузера имеет сенсорный экран, можно проверкой наличием доступного свойства любого события touch в window:
    if("touchstart" in window)
    {
      // работаем с сенсорными обработчиками
    }
    else
    {
      // работаем с мышиными обработчиками
    }

    4. Событие завершения управления элементом (touchend, mouseup) лучше вешать не на сам элемент item, а на его контейнер, который будет занимать всю ширину экрана (идеально, если это будет body). Логика обработки может застрять на обработчике move, если во время движения точка воздействия на объект убежит за пределы объекта.
    В определенных случаях могут выручить события mouseover/mouseout.
    Ответ написан
    Комментировать
  • Как сделать, чтобы высота iframe была равна соотношению 16:9?

    @alexalexes
    Чтобы сохранить пропорции при отображении в любом браузере, нужно сделать контейнер под видео с относительным позиционированием:
    .video__container
    {
      position: relative;
    }

    И в него положить img от png файла с однотонным заполнением с нужным соотношением сторон (можно в виде встроенного бинарника сформировать ресурс, такой файл в эквиваленте png весит пару сотен байт).
    Для iframe сделать абсолютное позиционирование, чтобы можно было его приподнять над img блоком, с помощью z-index, и задать 100% ширину и высоту, чтобы его размер зависел от контейнера, а размер (точнее, пропорции) контейнера будет зависеть от размера img.
    iframe.video__iframe
    {
      position: absolute;
      z-index: 1;
      /* width и height устанавливаются в атрибутах iframe! */
    }

    В итоге получится такая конструкция:
    <div class="video__container">
      <img src="video-iframe-background-1920x1080.png"/>
      <iframe class="video__iframe" src="" width="100%" height="100%"></iframe>
    </div>

    Такой подход позволяет гибко настраиваться размерам контейнеру .video__container, или фиксировать один из его размеров. При этом, iframe всегда будет держать пропорции того изображения, которое заложено в img. И это будет работать практически на любом браузере не первой свежести.
    Ответ написан
    Комментировать
  • С помощью чего сделан эффект как на сайте https://www.fromscout.com/?

    @alexalexes
    Анимация по ключевым кадрам.
    animation: main-logo-texture 10s linear infinite;
    Ключевые кадры:
    @keyframes main-logo-texture {
        0% {
            transform: translate(0)
        }
    
        to {
            transform: translate(-99px)
        }
    }
    Ответ написан
    3 комментария
  • Как сделать так, чтобы мигание можно было воспроизводить несколько раз?

    @alexalexes
    1. Сначала занулите свойство анимации. Потом вызовите setTimeout с нулевым временем, чтобы JS применил изменения анимации в DOM и внутри setTimeout добавьте свойство анимации. Тогда анимация перезапустится.
    nickinput.style.animation = "none";
      setTimeout(function() {
        if (validmail === false) {
            mailinput.style.animation = "blinker 0.6s linear 3";
        }
        }, 0);

    2. Задайте какой-нибудь color в ключевом кадре:
    @keyframes blinker {
      50% {
        background-color: #b11515;
        color: #aaa;
      }
    }
    Ответ написан
    3 комментария
  • CSS как сверстать вертикальное расположение? либо JS как правильно находить элемент в DOOM?

    @alexalexes
    Можно указывать нужный элемент с помощью псевдоселекторов:
    let life = lifesBlock.querySelector("span:first-child");

    или
    let life = lifesBlock.querySelector("span:last-child");
    Ответ написан
    Комментировать
  • Как задать приоритет класса CSS выше класса передаваемого по API?

    @alexalexes
    Добавьте "капельку" специфичности (тип div у класса sw-review-bottom, возможно блок имеет другой тип).
    #sw-app div.sw-review-bottom {
      display: none !important;
    }
    Ответ написан
  • Как расположить неизвестное количество блоков?

    @alexalexes
    Изучайте, как верстать контейнеры с display: flex или display: grid.
    Еще запишите пункт "CSS медиа запросы", чтобы отладить число колонок на разной ширине экрана.
    Ответ написан
    Комментировать
  • Свойство display: block препятствует работе свойства order?

    @alexalexes
    Свойство order применяется только для flex и grid элементов, собственно, оно корректно только когда его родительский контейнер имеет свойство display: flex либо grid.
    Ответ написан
  • Как обрезать картинку только сверху?

    @alexalexes
    Добавьте к картинке свойство object-position: bottom.
    Ответ написан
    Комментировать
  • Как исправить обводку текста css?

    @alexalexes
    Попробуйте шрифт из этого источника:
    https://fonts-online.ru/fonts/montserrat
    На пробной странице стили обводки текста от этого источника отрабатывают корректно.
    Ответ написан
    Комментировать
  • Как расположить точки на окружности?

    @alexalexes
    В вашем примере используется карусель, у которой прописаны стартовое положение:
    state = {
        carouselDeg: 17,
        itemDeg: -17,

    carouselDeg - поворот элементов основной окружности в градусах. Опытным путем можно понять, что оно задается как:
    (360 / кол-во элементов) / 2
    Элементов у вас 10, значит, должно быть 18 градусов, а не 17 (можно заметить, что с 17 неровное начальное смещение).
    itemDeg - вращение контента внутри одного элемента. Если хотите, чтобы контент всегда был обращен горизонтально, то берете ту же формулу со знаком минус.
    Далее, есть такие методы:
    next = () => {
        this.getIdItems(true);
        this.setState(state => ({
          carouselDeg: state.carouselDeg - 36,
          itemDeg: state.itemDeg + 36
        }));
      };
    
      prev = () => {
        this.getIdItems(false);
        this.setState(state => ({
          carouselDeg: state.carouselDeg + 36,
          itemDeg: state.itemDeg - 36
        }));
      };

    Число 36 - это шаг вращения, он вычисляется как:
    360 / кол-во элементов
    В принципе все, что нужно знать для правильной ориентации карусели.
    Прорисовкой элементов карусели занимается сама библиотека, позиции элементов на плоскости вам вычислять не нужно.
    Ответ написан
    Комментировать
  • Как правильно сделать иконку возле текста?

    @alexalexes
    Чтобы применить свойство text-decoration на названии пункта меню, но не применять на псевдо элементе, нужно название обернуть в span:
    <a href="#" class="menu__item menu__item--sport"><span>Зимний спорт</span></a>

    Чтобы псевдо-элемент after был вплотную к названию, он, как вариант, должен быть строчным элементом. То есть, нужно отменить для него абсолютное позиционирование. Также, его нужно изобразить символом, а не геометрическим прямоугольником:
    .menu__item
    {
      text-decoration: none;
    }
    .menu__item > span
    {
      text-decoration: underline;
    }
    .menu__item:after
    {
      position: unset;
      content: '▪';
      margin-left: 5px;
    }
    Ответ написан
    Комментировать
  • Как вставлять картинки через код css?

    @alexalexes
    Вы пытаетесь работать с CSS как с шаблоном - для этого нужно использовать препроцессор CSS такие как Sass, Stylus, Less.
    Если у вас учебный проект, то это отдельная глава или даже раздел для набивания навыков и шишек.
    Если проект боевой и довольно простой, то можно не ввязываться в дебри динамической генерации стилей, условится, что статичные свойства стилей вы записываете в файлах CSS, а динамические - в html вставками:
    <style>
      .user-114__avatar
    {
       background-image: url({{thumbnail}});
    }
    </style>
    ...
    <!-- какие-то общие стили для аватара прописаны в классе user__avatar в файле css, а изменяемые прямо в HTML-->
    <div class="user__avatar user-114__avatar">
    </div>

    или инлайн-стилями:
    <!-- какие-то общие стили для аватара прописаны в классе user__avatar в файле css, а изменяемые прямо в инлайн-атрибуте тега-->
    <div class="user__avatar" style="background-image: url({{thumbnail}});">
    </div>

    PS: Тег img некорректно использовать без src, фон в нем может выступать только дополняющим свойством, например, закрывать прозрачные участки картинки src. И с фоновым изображением придется работать по-другому, чтобы привести в порядок адаптивность элемента.
    Ответ написан
    3 комментария
  • Если я поменяю наполнение сайта, как изменится ранжирование его в поисковых системах?

    @alexalexes
    Если не нарушите метатеги, заголовки страниц и разделов текста, используемые для поисковых ботов. То ничего не поменяется с их точки зрения.
    Ответ написан
    Комментировать
  • Как добавить блок в input?

    @alexalexes
    Либо вместо input использовать textarea высотой в одну строку, чтобы можно было добавить псевдоэлемент.
    Либо повесить обработчик события который перехватывает любой ввод символов в поле, извлекает число из строки, и дописывает символ. Но тут придется еще бороться с тем, чтобы курсор не съезжал в конец строки.
    Ответ написан
    Комментировать
  • Правильно ли использовать position absolute & relative в верстках?

    @alexalexes
    Менять свойство position оправдано, если стоит задача в одном контейнере визуально наложить друг на друга дочерние блоки, которые в html не вложены друг в друга - по тексту иду один за другим.
    Например, у вас есть контейнер div.photo__container с img и блоком описания div.photo__descr:
    <div class="photo__container">
      <img src="photo.jpg"/>
      <div class="photo__descr">
        <p>Описание для фото</p>
      </div>
    </div>

    Если стили оставить как есть, то описание отобразится под изображением.
    Чтобы наложить описание на фото, нужно изменить позиционирование блока описания.
    Если мы тупо пропишем position: absolute для блока описания photo__descr, то этот блок убежит черт знает куда (точнее, спозиционируется относительно body, или ближайшего родителя, у которого будет position: relative).
    div.photo__descr
    {
      position: absolute;
    }

    Для этого нужно ограничить абсолютное позиционирование данного блока родительским блоком:
    div.photo__container
    {
      position: relative;
    }

    Далее, хотелось бы, чтобы блок приклеился к низу контейнера. Поскольку у нас блок в абсолютном позиционировании, то могут работать свойства top, right, bottom, left. Нужен bottom:
    div.photo__descr
    {
      position: absolute;
      bottom: 0;
    }

    Еще есть желание ограничить макс. высоту блока описания, можно воспользоваться процентами, причем они будут высчитываться от родительского блока position: relative:
    div.photo__descr
    {
      position: absolute;
      bottom: 0;
      max-height: 30%;
      overflow-y: auto; /* можно еще добавить возможность прокручивать содержимое при вертикальном переполнении */
    }

    Увы, чтобы работали процентные величины относительно родителя, нужно чтобы у родителя были заданы конкретные значения ширины и(или) высоты:
    div.photo__container
    {
      position: relative;
      height: 600px;
    }
    Ответ написан
    Комментировать
  • Работа с таблицами?

    @alexalexes
    К сожалению, геометрические свойства table по отношению к строкам и ячейкам слишком древние и не подчиняются подстройки через first-child, last-child. Можно только добавить внутренние отступы для ячеек последней строки. Но эти ячейки должны содержать какой-то контейнер, чтобы имитировать цвет фона ячейки.
    В этом случае, цвет фона не должен быть на самой строке или ячейке.
    .table tr:last-child td
    {
      padding: 5px 0;
    }
    Ответ написан
    Комментировать
  • Как сменить hover для маленьких экранов с касаниями?

    @alexalexes
    Вариант 1. Применять псевдоклассы hover с определенной ширины экрана.
    Преимущества. Классическое применение media с width работает с более древними браузерами, начиная с IE9.
    Недостатки. Делается предположение, что сенсорное устройство имеет маленький размер экрана. Но это ничего не говорит о наличии только сенсорного управления.
    @media (min-width: 768px)
    {
      /* селектор стилей для кнопки при наведении */
      slider__button:hover
      {
      }
    }

    Вариант 2. Применять псевдоклассы hover для устройств, поддерживающих hover.
    Преимущества. Анализируется именно наличие функции, а не предполагаемый размер экрана.
    Недостатки. Не все условно древние браузеры понимают media с условием hover. От поддержки IE придется отказаться.
    /* устройство поддерживает hover*/
    @media (hover: hover)
    {
        /* селектор стилей для кнопки при наведении */
      slider__button:hover
      {
      }
    }

    /*устройство не поддерживает hover */
    @media (hover: none)
    {
      /* селектор стилей для кнопки при наведении - не нужен, либо должен переопределять свойства hover на нейтральное состояние */
     /* slider__button:hover
      {
      }*/
    }

    PS:
    Есть хак для поддержки media с hover для старых браузеров, но будут проблемы, если нужно иметь валидный CSS.
    @media (hover), (min-width:0\0), (min--moz-device-pixel-ratio:0)
    {
         /* селектор стилей для кнопки при наведении */
      slider__button:hover
      {
      }
    }
    Ответ написан
    Комментировать