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

    mizutsune
    @mizutsune
    Frontend Developer
    Например можно сделать так:



    В примере выше - "позиция" каждого псевдоэлемента зависит от его размера.

    Конечно можно изменить значение переменной для смещения элемента:

    - --pseudo-offset: calc((0px - (var(--pseudo-size) / 2)) - 1px);
    + --pseudo-offset: calc(0px - (var(--pseudo-size) / 2));


    Разница заключается в том, что в этом варианте нет дополнительного пикселя, который как бы слегка нормализует позиционирование.

    Ну или вообще можно задавать смещение для псевдоэлементов вручную:

    - --pseudo-offset: calc((0px - (var(--pseudo-size) / 2)) - 1px);
    + --pseudo-offset: -8px;


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

    mizutsune
    @mizutsune
    Frontend Developer
    Можно переопределить значение свойства line-height для элемента .question или для ссылки которая лежит внутри данного элемента, ну и для нормализации внешнего вида, можно ещё добавить немного флексбокса.

    .textfaq .question {
    + display: inline-flex;
    + justify-content: center;
    + align-items: center;
    + line-height: 40px;
    }
    Ответ написан
    Комментировать
  • Как сместить элемент?

    mizutsune
    @mizutsune
    Frontend Developer
    Если нужно сделать по центру(вертикально и горизонтально):

    .leftS{
        display: flex;
        justify-content: center;
        align-items: center;
    }


    Или если только по горизонтали:

    .leftS{
        display: flex;
        justify-content: center;
    }


    И в любом случае можно убрать это:

    .leftS * {
        position: relative;
        left: 30px;
    }


    Таким образом аватарка встанет по центру.

    Дополнительная информация

    Замените двоеточие, на точку с запятой в своём CSS коде.

    .msgContainer {
    - position: relative:
    + position: relative;
    }


    Ну, а ещё почитайте про форматирование кода и получше изучите CSS.

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

    mizutsune
    @mizutsune
    Frontend Developer
    .description {
      width: 100%;
      max-width: 0;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }


    Дополнительные варианты

    <td class='description'>
      <div class="textbox">
        <span> TEXT </span>
      </div>
    </td>


    .textbox {
      width: 100%;
      display: inline-grid;
    }
    
    .textbox span {
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }


    Или:

    <td class='description'>
      <div class="textbox"> TEXT </div>
    </td>


    .textbox {
      width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      display: -webkit-box;
      -webkit-line-clamp: 1;
      -webkit-box-orient: vertical;
    }

    Ответ написан
    Комментировать
  • Как выстроить блоки с помощью grid?

    mizutsune
    @mizutsune
    Frontend Developer
    .main__work-blocks {
      display: grid;
      grid-gap: 30px;
      grid-template-columns: repeat(12, 1fr);
    }
    
    .main__work-block:nth-child(n + 2) {
      grid-column: span 4;
    }
    
    .main__work-block:nth-child(3n + 1) {
      align-items: center;
      grid-column: span 8;
    }
    Ответ написан
    Комментировать
  • Есть ли плагин, для изменения DOM при адаптиве?

    mizutsune
    @mizutsune
    Frontend Developer
    В принципе можно обойтись и медиа запросами, но если структура макета слишком сложная, есть и другие варианты решения задачи.

    Например, задачу из вопроса, можно легко решить по старинке, используя два HTML - блока, плюс переключение display через медиа запросы. Например одна кнопка находится в одном месте страницы и отображается по дефолту на десктопах, а вторая кнопка находится совсем в другом месте страницы и "активируется" соответственно на планшетах и мобильниках.

    Дублирование контента имеет небольшие плюсы и большие минусы. Вариант конечно с первого взгляда кажется классным, но это не всегда будет столь выгодно, если нужно будет дублировать большие куски контента.

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

    mizutsune
    @mizutsune
    Frontend Developer
    но background-color: rgba(0, 0, 0, 0.85); не затемняет картинку


    Ну как бы всё правильно. Эффект затемнения делается совсем по другому.

    1. CSS Filter.

    Пример

    .order {
         filter: brightness(0.7);
    }



    2. Псевдоэлемент.

    Пример

    .order {
         position: relative;
    }
    
    .order::after {
         position: absolute;
         width: 100%;
         height: 100%;
         content: "";
         top: 0;
         left: 0;
         right: 0;
         bottom: 0;
         background: rgb(16 16 16 / 76%);
    }



    3. Множественный фон.

    Пример

    .order {
         background: linear-gradient(
              to top, 
              rgb(20 22 23 / 77%), 
              rgb(20 22 23 / 77%) 100%
              ), 
              url("../images/order.jpg");
    }



    И ещё множество альтернативных решений.
    Ответ написан
    Комментировать
  • Как сделать анимацию "водных разводов"?

    mizutsune
    @mizutsune
    Frontend Developer


    Ещё 7 вариантов анимации








    Ответ написан
    Комментировать
  • Как nth-child сделать в шахматном порядке?

    mizutsune
    @mizutsune
    Frontend Developer
    Ответ написан
    Комментировать
  • Как сделать такую анимацию?

    mizutsune
    @mizutsune
    Frontend Developer
    На самом деле не совсем понятно, когда запускается анимация? Если после нажатия на кнопку или после события сhange, тогда можно сделать например так:

    .is-active {
         animation-name: shake;
         animation-direction: alternate;
         animation-duration: 1s;
         animation-iteration-count: 4;
    }
    
    @keyframes shake {
         from {
              transform: translateX(0px);
         }
         to {
              transform: translateX(150px);
         }
    }


    const button = document.querySelector(".button");
    
    button.classList.add("is-active");
    
    button.addEventListener("animationend", (event) => {
         event.stopPropagation();
         button.classList.remove("is-active");
    }, { once: true });


    То есть добавить активный класс кнопке, а после окончания анимации удалить добавленный класс.

    Или кнопка "убегает" от курсора в каком-то определенном направлении?

    Ответ написан
    Комментировать
  • Как извлечь url для заднего фона?

    mizutsune
    @mizutsune
    Frontend Developer
    Есть ли возможность как то подгрузить или считать url-адрес картинок (не объявленных в дом-дереве) из определенной папки лежащей в корне сайта?


    Средствами одного только CSS такое не сделать.
    Ответ написан
    Комментировать
  • Как уместить анимацию на мобильных устройствах?

    mizutsune
    @mizutsune
    Frontend Developer
    Для начала у элементов curley, web, dev, уберите свойства: left, right, bottom. Далее можно немного подправить остальные стили у элементов + немного изменить разметку и ситуация улучшится.

    <div class="container text-uppercase">
        <p class="text curley">Hello</p>
        <div class="group">
          <p class="text web">Hello</p>
          <p class="text dev">Hello</p>
        </div>
        <div class="hide-text"></div>
      </div>


    .container {
         width: 100%;
         max-width: 600px;
         margin: 0 auto;
    }
    
    .text {
         --sw-1: drop-shadow(0 0 1px black);
         --sw-2: drop-shadow(0 0 2px red);
         font-family: "Orbitron", sans-serif;
         background: linear-gradient(darkred 30%, cyan, white, cyan, darkred 70%);
         -webkit-text-stroke: 3px cyan;
         -webkit-background-clip: text;
         -webkit-text-fill-color: transparent;
         font-weight: 900;
         font-size: 4.1em;
         text-align: center;
         text-transform: uppercase;
         filter: var(--sw-1) var(--sw-1) var(--sw-2) var(--sw-2);
         opacity: 0;
         margin: 0;
    }
    
    .group {
         display: flex;
         gap: 10px;
         justify-content: center;
    }
    
    .curley {
         animation: bg-shift 1s infinite linear alternate, 
                    scale 750ms ease-in forwards 3.5s, 
                    jump 500ms ease-out forwards 5.7s, 
                    blur-in 300ms linear 3.5s,
                    zoom 4s ease-in-out 6.25s, 
                    flip 500ms linear forwards 8s;
    }
    
    .web {
         animation: bg-shift 1s infinite linear alternate, 
                    scale-angle1 3s ease-in-out forwards 2s, 
                    blur-in 500ms linear 2s, 
                    rotate-up1 250ms ease-out forwards 5.7s,
                    zoom 1.5s ease-in-out 6.25s, 
                    flip 500ms linear forwards 8.5s;
    }
    
    .dev {
         animation: bg-shift 1s infinite linear alternate, 
                    scale-angle2 3s ease-in-out forwards 2s, 
                    blur-in 500ms linear 2s, 
                    rotate-up2 250ms ease-out forwards 5.7s,
                    zoom 1.5s ease-in-out 6.25s, 
                    flip 500ms linear forwards 8.5s;
    }
    
    /*  Код анимаций без изменений */


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

    mizutsune
    @mizutsune
    Frontend Developer
    С помощью CSS, при такой структуре разметки, желаемого результата добиться не выйдет.

    Однако можно сделать вот так:

    .ava:hover ~ #profiles_show .block {
       display:block;
    }


    Ну, а ещё в html у вас class="ava", а в css - .avatar. С этим нужно бы определиться... либо одно, либо другое.

    Кстати использовать ID атрибуты для стилизации элементов - моветон.
    Ответ написан
    2 комментария
  • Почему при наполнении текста ломается верстка?

    mizutsune
    @mizutsune
    Frontend Developer
    .programs__name {
       min-width: 0;
    }
    
    .programs__name p {
       white-space: nowrap;
       text-overflow: ellipsis;
       overflow: hidden;
    }


    Обрезать текст можно с помощью набора свойств: text-overflow, overflow и white-space(хотя возможно оно здесь лишнее). А вот min-width: 0 используется для того чтобы дочерние элементы во flex контейнере, могли сжиматься при уменьшении ширины родительского элемента.
    Ответ написан
    1 комментарий
  • Как флексами разделить блоки 2 на 2?

    mizutsune
    @mizutsune
    Frontend Developer
    .flex {
       --gap: 20px;
       display: flex;
       flex-wrap: wrap;
       gap: var(--gap);
    }
    
    .item {
       width: calc(50% - var(--gap) / 2);
       height: 100px;
       background-color: red;
    }
    Ответ написан
    Комментировать
  • Возможно ли дать картинкам такую форму в css?

    mizutsune
    @mizutsune
    Frontend Developer
    Например с помощью CSS масок или Clip Path.
    Ответ написан
    Комментировать
  • Можно ли ставить after прямо на input а не на form?

    mizutsune
    @mizutsune
    Frontend Developer
    Не у всех HTML тегов есть собственное содержимое, поэтому не во всех случаях стоит ждать корректного результата при использовании псевдоэлементов на следующих тегах <img>, <input type="text">, <input type="email">, <input type="password">, <input type="datetime">, etc.

    Однако вы можете обернуть input в дополнительный тег, после чего использовать псевдоэлемент родительского элемента.

    <div class="inputbox">
       <input type="text">
    </div>


    .inputbox::after { 
      /* ...стили для псевдоэлемента */ 
    }
    Ответ написан
    3 комментария
  • Как расположить карточки в ряд?

    mizutsune
    @mizutsune
    Frontend Developer
    Можно конечно сделать и так как вам подсказали в соседнем ответе:

    .container{ 
      display: flex;
      justify-content: space-around;
    }
    
    .card { 
       width: fit-content; 
    }


    Но в таком случае, если какая-нибудь карточка будет больше по ширине, тогда равномерного расположения по центру уже не будет.

    63397efd5efe3045799569.png

    Можно сделать по другому, например используя CSS Grid:



    Суть в том что в этой строке:

    grid-template-columns: repeat(auto-fill, minmax(310px, 310px));


    Указываем минимальную и максимальную ширину карточек, тем самым запрещаем растягиваться элементам, что обеспечит корректную работу свойства: justify-content: space-between;
    Ответ написан
    Комментировать
  • Не работает псевдоэлменет при наведение на текст?

    mizutsune
    @mizutsune
    Frontend Developer
    Вот здесь:

    .title:hover ~ .title::after {
        transform: rotate(180deg);
    }


    При наведении на элемент .title, вы пытаетесь применить трансформацию псевдоэлементу :after, используя при этом селектор следующего элемента, который работает совсем по другому.

    Чтобы менять стили псевдоэлементов, при наведении на родительский элемент, используется такая комбинация:

    <element>:hover::after { /* ... style */ }

    То есть для решения проблемы, нужно сделать так:

    .title:hover::after {
        transform: rotate(180deg);
    }
    Ответ написан
    Комментировать
  • Как работает наследственность стилей в этом случае?

    mizutsune
    @mizutsune
    Frontend Developer
    Если это касается именно Swiper, то решается это дело без !important и других лишних действий. Достаточно указать для кнопок управления слайдером кастомные селекторы и назначить нужные стили:

    new Swiper('.swiper', {
      navigation: {
        nextEl: '.my-awesome-slider-button-next',
        prevEl: '.my-awesome-slider-button-prev',
      },
    });


    .my-awesome-slider-button-prev { /* ...styles */ };
    .my-awesome-slider-button-next { /* ...styles */ };
    Ответ написан
    1 комментарий