Задать вопрос
  • Как лучше сверстать элемент?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Самая обычная таблица.
    Ответ написан
    Комментировать
  • Почему разные значение getBoundingClientRect в разных браузерах?

    @karminski
    Senior React.JS Developer
    У разных браузеров разные размеры viewport, тк разные размеры панелей инструментов, кол-во этих панелей, толщины краев и т.д. и т.п. Вот и отличаются размеры getBoundingClientRect. Это как бы норма.
    Ответ написан
    Комментировать
  • Как сделать такую маску в CSS?

    Aetae
    @Aetae
    Тлен
    clip-path прекрасно умеет скруглять, rtfm.

    Вот через фильтр, когда-то похожее делал:

    Принцип прост: размываешь подложку через feGaussianBlur, делаешь края снова резкими через ComponentTransfer альфа-канала. В твоём случае ещё stroke и drop-shadow наверное понадобятся, сам смотри.

    ...upd: из интереса нафигачил без фильтров:

    Всё возможно.:)

    Поигрался пут с фильтром, вот версия фильтр + простой clip-path, поддерживает полупрозрачность фона, полупрозрачность бордера и тень:

    clip-path'ом вырезаем простые квадраты, фильтром закругляем. Фильтр можно в принципе применять к любому набору элементов. Версия не последняя, есть шероховатости, может ещё когда-нить потыкаю ещё.:)
    Ответ написан
    5 комментариев
  • Почему нет нормальной работы с svg в css?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Есть.
    Практически все способы вставки svg в html не позволяют менять цвет при помощи css.

    При вставке в разметку вообще нет проблем менять цвет.
    fill: red;
    stroke: green;

    и т.д.
    Альтернативный вариант, а разметке задаем в заливку или обводку currentColor, в CSS меняем свойство color.

    Ещё один - использование кастомных свойств.

    При вставке прямо в CSS
    Маски и фильтры.

    mask: url(img.svg) no-repeat center / contain;
      background: red;
      
      &:hover {
        background: green;
      }


    Один из вариантов - инлайнить SVG прямо в CSS (в кастомные свойства, чтобы не мусорить в селекторах).
    Другой вариант - собираем стек из SVG и используем в url в маске.

    Собственно, стеки можно использовать где угодно, в отличие от устаревшего спрайта.
    https://telegra.ph/Stack--sprajt-zdorovogo-chelove...
    Ответ написан
    3 комментария
  • Как не обрезать тень элемента, используя "overflow: hidden"?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Сделать для контейнера, у которого overflow:hidden, внутренний отступ 24 + 5 пикселей. Зачем здесь три дня биться, непонятно.
    Ответ написан
    1 комментарий
  • Как выбрать элементы удовлетворяющие условию выборки?

    Lynn
    @Lynn
    nginx, js, css
    Поиграть со селекторами nth-child и nth-last-child.

    Для начала попробуем выбрать первый элемент последнего неполного ряда. Селектор :nth-child(3n + 1) выберет нам первые элементы каждого ряда.

    Теперь надо ограничить этот список только последним рядом. Видно что нужный нам элемент всегда первый или второй с конца. Так и запишем :nth-last-child(-n + 2).

    В итоге получили селектор :nth-child(3n + 1):nth-last-child(-n + 2).
    Ну а дальше воспользуемся селектором ~ что бы выбрать все (в вашем случае не больше одного) элементы которые идут после уже выбранного.

    Получается вот такой код:
    li:nth-child(3n + 1):nth-last-child(-n + 2),
    li:nth-child(3n + 1):nth-last-child(-n + 2) ~ li {
      .....
    }


    UPD: если надо что бы последний ряд выбирался всегда, даже если он полный, то надо заменить -n + 2 на -n + 3.

    UPD2: можно пойти немного другим путём и выбирать все элементы после последнего элемента в полном ряду. Получится вот так:
    li:nth-child(3n):nth-last-child(-n + 3) ~ li {
      .....
    }


    Ответ написан
    Комментировать
  • Почему не работаю стили прокрутки?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Работает

    66758e0892be7615574955.png
    Ответ написан
    5 комментариев
  • Как использовать в clip-path: path() проценты (ну и calc)?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Весь затык у нас тут в том, что CSS не позволяет в рамках path жонглировать единицами измерения. Почему? Люди задавались этим вопросом с самого момента появления path в CSS. Но этот функционал всегда был в SVG. Так что можно добавить маску в SVG (тут у нас размер элемента, условные 100% на 100%, считается за 1 на 1):

    <svg width='0' height='0'>
        <defs>
            <clipPath id='example' clipPathUnits='objectBoundingBox'>
                <path d="M 0 0 a 1 1 0 0 0 1 1 h -1 v -1z"/>
            </clipPath>
        </defs>
    </svg>

    И тогда в CSS уже будет все просто:

    .example {
        clip-path: url(#example);
    }

    Это не идеальный вариант, хотелось бы на чистом CSS, но имеем, что имеем.
    Ответ написан
  • Как сделать отступ у элементов только между друг другом?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Что же вас заставляет в современном мире верстать инлайн-блоками?

    1. Если элементов только на одну строку, то
    .elem:not(:last-child) {margin-right: NNpx}
    либо .elem + .elem {margin-left...}
    2. Если строк больше, но элементов известное количество, переписываем предыдущую формулу через nth-child
    3. Если строк больше и количество элементов в строке неизвестно, придется использовать идиотский способ с отрицательным margin для контейнера на величину лишних отступов.

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

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer

    Весь фокус в этом:
    border: 1px solid transparent;
    background: linear-gradient(#e5e2e2, #e5e2e2 0) padding-box,
    linear-gradient(90deg, #fa5560, #4d91ff) border-box;
    Ответ написан
    6 комментариев
  • Элементы выходят за пределы grid-блока. Как сделать, так чтобы они сжимались или перемещались вниз при изменении расширения экрана?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    .news_block_main{
        display: grid;
    +   grid-template-columns:repeat(auto-fill,minmax(250px,1fr));
    -    grid-template-columns: repeat(4, 1fr);
    -    grid-template-areas: 
    -    "img1 img2 img3 img4";
        gap: 24px;
        margin-bottom: 160px;
    }
    Ответ написан
    1 комментарий
  • Как в grid сделать, чтобы не зависеть от template-columns?

    delphinpro
    @delphinpro Куратор тега HTML
    frontend developer
    Так:
    Ответ написан
    Комментировать
  • Какие возможные варианты сделать такую кнопку, чтобы границы кнопок подстраивались под размер текста внутри?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Где-то в светлом будущем у нас будет CSS Painting API, с помощью которого можно будет рисовать какие угодно бордеры. А пока можно его сымитировать обычным канвасом (правда придется отступы подгонять под особенности шрифта, но это уже детали, один раз можно сделать):



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

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Фигни какой-то понаписали...
    Выбросите нафиг весь этот ваш javascript.
    Оставьте только

    window.addEventListener('scroll', function () {
      const currentScrollTop = window.pageYOffset || document.documentElement.scrollTop;
      document.body.classList.toggle('scrolled', currentScrollTop > 0)
    });

    Далее показывание и скрытие элементов сделайте в css, отталкиваясь от класса body.scrolled
    .topbar__bottom-consult {
      opacity: 0;
      transition: 0.3s ease;
    }
    body.scrolled .topbar__bottom-consult {
      opacity: 1;
    }

    Фиксирование наверху через position:sticky
    .topbar__bottom {
      position: sticky;
      top: 0;
    }
    Ответ написан
    2 комментария
  • В чем разница между word-break: break-word и word-wrap: break-word?

    nikolayshabalin
    @nikolayshabalin
    Автор профессиональных курсов в HTML Academy
    Отличная статья про техники разбиения слов. Там можно чуть лучше разобраться со всеми техниками
    Ответ написан
    Комментировать
  • Как сверстать таблицу с кнопкой в каждой строке?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    А в чем сложность?
    Ответ написан
    3 комментария
  • Как сделать чтобы :before не вылезал вперед при наведении?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега CSS
    Надо просто фон вынести в отдельный элемент тоже:
    Ответ написан
    1 комментарий
  • Как указать высоту для main?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Хорошо, конечно, что вы уверены, что высота точно 60. Что вас не волнует никакое переполнение шапки ни по какой из причин (увеличенный шрифт у пользователя, отвалился дизайнерский шрифт, использование переводчиков и другие банальные причины)
    Если так, то да, calc и вперед.

    Разумнее, задать родителю высоту 100vh и грид. В котором первой строке задан min-content, а для main 1fr, т.е. все оставшееся пространство.
    grid-template-rows: min-content 1fr
    Аналогично можно сделать и флексом и flex-grow для main.

    Так получится универсальное решение, не зависящее от высоты шапки.
    Ответ написан
    Комментировать
  • Как сделать развертывание аккордеона плавным?

    @Azperin
    Дилетант
    Можно гриды попробовать https://youtu.be/B_n4YONte5A?si=9r_06AFYgXvLqdMH&t=122
    Ответ написан
    Комментировать
  • Как перемещать элемент по клику на кнопки?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Вместо выдёргивания координат из стилей лучше будет сделать массив с координатами, обновлять этот массив, и уже на его основе задавать translate элементу. А чтобы не делать отдельные обработчики клика всем кнопкам, можно записать им в data-атрибут информацию о том, на сколько какие координаты должна изменить данная кнопка.

    <button data-steps="1,0">right</button>
    <button data-steps="-1,0">left</button>
    <button data-steps="0,1">down</button>
    <button data-steps="0,-1">up</button>
    <button data-steps="1,1">right down</button>
    <button data-steps="0,-2">double up</button>

    const coord = [ 0, 0 ];
    const stepSize = 30;
    
    const box = document.querySelector('#box');
    const buttons = document.querySelectorAll('[data-steps]');
    
    buttons.forEach(n => n.addEventListener('click', onClick));
    
    function onClick() {
      this.dataset.steps.split(',').forEach((n, i) => coord[i] += n * stepSize);
      box.style.transform = `translate(${coord.map(n => `${n}px`).join(',')})`;
    }
    Ответ написан
    Комментировать