Ответы пользователя по тегу HTML
  • Резиновая верстка хаотичных элементов?

    profesor08
    @profesor08 Куратор тега CSS
    Берешь каждый элемент, у него есть top, left, width, height. Делаешь все фиксированно, затем берешь и пересчитываешь эти значение на проценты относительно родительского контейнера. Как только все задашь, все элементы будут четко масштабировать в зависимости от ширины контейнера, у тебя получится полностью резиновый блок. Останется что-то сделать с шрифтами, привязать размер шрифта к единица vw, она зависит от ширины окна, а с помощью @media ограничишь величину четко в px.

    Как закончишь можешь откинуться в кресло и сказать насколько я крут. Я, то есть я, не ты. ))
    Ответ написан
  • Как скопировать анимацию элемента?

    profesor08
    @profesor08
    Тебе понадобится вот это: https://github.com/airbnb/lottie-web
    Иницализация и нужный конфиг есть в коде, они рядом.

    Более того, там сурсмапы есть, все исходники как на ладони.
    Ответ написан
    Комментировать
  • Как оптимизировать анимацию в SCSS?

    profesor08
    @profesor08 Куратор тега CSS
    Тут помогут циклы @for https://sass-lang.com/documentation/at-rules/contr...

    @for $i from 1 through 3 {
      @keyframes rotate-left-#{$i} {
        0% { transform: rotate(0deg); }
        50% { transform: rotate(#{$i * 60}deg); }
        100% { transform: rotate(#{$i * 60}deg); }
      }
    }
    
    // не забудь заменить на rotate-right-1,2,3
    @for $i from 1 through 3 {
      @keyframes rotate-right-#{$i} {
        0% { transform: rotate(0deg); }
        50% { transform: rotate(0deg); }
        100% { transform: rotate(#{$i * 60}deg); }
      }
    }


    Но можешь пойти дальше отказавшись от left/right
    @for $i from 1 through 6 {
      $stage_0: 0;
      $stage_1: 0;
      $stage_2: $i * 60;
      
      @if $i <= 3 {
        $stage_1: $i * 60;
      }
      @else {
        $stage_2: $stage_2 - 180;
      }
      
      @keyframes rotate-#{$i} {
        0% { transform: rotate(#{$stage_0}deg); }
        50% { transform: rotate(#{$stage_1}deg); }
        100% { transform: rotate(#{$stage_2}deg); }
      }
    }
    Ответ написан
    Комментировать
  • Как вывести такое форматирование на php?

    profesor08
    @profesor08 Куратор тега CSS
    В пхп есть такая функция как str_pad
    https://www.php.net/manual/ru/function.str-pad.php

    Собственно способ применения
    echo str_pad("Super label 1", 60, ".") . "\n";
    echo str_pad("Super blabla label", 60, ".") . "\n";
    echo str_pad("Ololo label", 60, ".") . "\n";
    echo str_pad("Trololo label", 60, ".") . "\n";
    Ответ написан
    Комментировать
  • Как оптимизировать slick slider?

    profesor08
    @profesor08 Куратор тега CSS
    Очевидно slick тут не подходит. При любом движении, он двигает все слайды, те что видны и те что не видны. А помимо это, на слайдах другие слайдеры делают то-же самое. Тут напрашивается свое решение, которое решит эти проблемы. Ну и максимально оптимизировать картинки и их размер, чтоб ничего лишнего.
    Ответ написан
    Комментировать
  • Ссылки на "Вход" и "Регистрация" лучше делать с помощью CSS псевдоэлемента, или в HTML?

    profesor08
    @profesor08 Куратор тега CSS
    Ссылки это тоже контент, это же навигация по сайту. Но твой сайт - твои правила, можешь делать что угодно на нем. Только не надо нести это в массы и задавать текст ссылок в content. Что если надо поменять текст ссылки? А если делать локализацию? Каждый раз менять css? А если css компилируется препроцессором, то на каждый чик компилировать заново?
    Ответ написан
    1 комментарий
  • Как реализовать такой scroll?

    profesor08
    @profesor08 Куратор тега CSS
    How To Create a Custom Scrollbar

    @mixin scrollbar {
      &::-webkit-scrollbar {
        /* 1 - скроллбар */
      }
    
      &::-webkit-scrollbar-button {
        /* 2 - кнопка */
      }
    
      &::-webkit-scrollbar-track {
        /* 3 - трек */
      }
    
      &::-webkit-scrollbar-track-piece {
        /* 4 - видимая часть трека */
      }
    
      &::-webkit-scrollbar-thumb {
        /* 5 - ползунок */
      }
    
      &::-webkit-scrollbar-corner {
        /* 6 - уголок */
      }
    
      &::-webkit-resizer {
        /* 7 - изменение размеров */
      }
    }
    Ответ написан
    Комментировать
  • Почему блоки в GRID сетке не адаптивны?

    profesor08
    @profesor08 Куратор тега CSS
    Нет. Это лишь твоя задумка, или мечта, но ты ничего не сделал для ее реализации. Задай нужный grid-template-columns в @media
    Ответ написан
  • Как остановить движение объекта, при отпускании кнопки?

    profesor08
    @profesor08 Куратор тега CSS
    Ничего не надо останавливать, потому что оно само остановится. Причиной твоей проблемы является то, что ты наговнокодил, и при каждом срабатывании события, ты дергаешь элемент из dom, а тебе надо в самом начале лишь сделать на него ссылку, и работать с ней.

    Ответ написан
    Комментировать
  • Как вылечить maskedinput.js?

    profesor08
    @profesor08 Куратор тега JavaScript
    У тебя инпут не перерисовался. Частая проблема на всяких мобилках крупных брендов. Задай transform: translateZ(0); для инпутов, возможно и для их контейнеров.

    Если не поможет, то придется смириться с тем, что малой кровью не обойтись, и пробуй библиотеку выше.
    Ответ написан
    Комментировать
  • Как сверстать так цифры от 1 до 10 с пунктами надписей?

    profesor08
    @profesor08 Куратор тега CSS
    <div class="number">10</div>

    .number {
      border: 2px solid red;
      border-radius: 50%;
      line-height: 100%;
      display: flex;
      align-items: center;
      justify-content: center;
      width: 30px;
      height: 30px;
    }
    Ответ написан
    Комментировать
  • Можно ли только с помощью CSS изменять состояние checkbox?

    profesor08
    @profesor08 Куратор тега CSS
    Нет, нельзя. CSS про стили, а не про взаимодействие. Ты можешь только отследить состояние чекбокса.
    Ответ написан
    Комментировать
  • Bootstrap при открытии модального окна появляется вторая полоса прокрутки?

    profesor08
    @profesor08 Куратор тега CSS
    При открытии модалки, на body навешивается класс .modal-open, при этом, его стили отключают прокрутку. Проверь наличие всех стилей, всех скриптов. Если у тебя прокрутка внутри другого элемента реализована, то отключи ее:
    .modal-open .scroll-elem {
      overflow: hidden;
    }


    Если ничего не получилось, тогда воспроизведи проблему на jsfiddle.
    Ответ написан
    Комментировать
  • Как выровнять по одной линии?

    profesor08
    @profesor08 Куратор тега CSS
    Установи картинке line-height: 100%, а самому блоку display: flex, align-items: center;
    Ответ написан
    Комментировать
  • Какими средствами можно реализовать такую анимацию?

    profesor08
    @profesor08 Куратор тега CSS
    Конкретно этот вариант будет делаться следующим образом (в кратце):
    1. Извлекутся все анимации из After Effects с помощью bodymovin
    2. В проект подключится lottie-web
    3. В lottie-web передадутся данные и будет сделана настройка.

    В результате получится идентичная анимация на svg, точь в точь как в After Effects, но в браузере.

    Почему так сложно? Да потому что вручную ты хрен добьешь такой же точности таймингов и кривых анимаций.
    Ответ написан
    Комментировать
  • Стрелка на самописных часах на 60-й секунде крутится в противоположную сторону. Как исправить?

    profesor08
    @profesor08 Куратор тега CSS
    Убери transition, он тебе только мешает. setTimeout, setInterval тут не подойдут, они не гарантируют, что твои часики будут тикать соответственно времени.

    Вариантов у тебя несколько, задать движение стрелок при помощи @keyframes, чтоб они все время крутились, продолжительность 60 сек и 3600 сек соответственно. Программно при загрузке поворачивать контейнер стрелки на нужный угол, чтоб стрелки начинали идти с нужного положения.

    Другой вариант это двигать стрелки на js, анимировано и плавно, независимо от частоты кадров. Увеличиваем значение и угол поворота растет и растет до бесконечности, но можешь его уместить в рамки 0 - 359 - (seconds * 6) % 360

    const sec = document.getElementById("sec");
    const min = document.getElementById("min");
    
    let lastTime = Date.now();
    let seconds = (new Date()).getSeconds();
    let minutes = (new Date()).getMinutes() + seconds / 60;
    
    function animate() {
      const now = Date.now();
      const deltaTime = now - lastTime;
      lastTime = now; 
      
      seconds += deltaTime / 1000;
      minutes += deltaTime / 1000 / 60;
      
      sec.style.transform = `rotate(${seconds * 6}deg)`;
      min.style.transform = `rotate(${minutes * 6}deg)`;
      
      requestAnimationFrame(animate);
    }
    
    animate();


    Аналогично можно подсчитывать время на каждом кадре
    const sec = document.getElementById("sec");
    const min = document.getElementById("min");
    
    function animate() {
      const date = new Date();
      
      const seconds = date.getSeconds() + (date.getTime() % 1000) / 1000;
      const minutes = date.getMinutes() + seconds / 60;
      
      sec.style.transform = `rotate(${seconds * 6}deg)`;
      min.style.transform = `rotate(${minutes * 6}deg)`;
      
      requestAnimationFrame(animate);
    }
    
    animate();
    Ответ написан
    1 комментарий
  • Как делать подобные "трюки"?

    profesor08
    @profesor08 Куратор тега CSS
    Расположи одну картинку поверх другой, и какую-то полоску по середине, которую будешь дергать туда-сюда. Ширину второй картинки задай 50%. Убедись чтоб изображение было выровнено по левому краю и заполняло всю высоту, а в ширину auto. Далее прилепи простейший drag'n'drop и для полоски, и задавай ширину картинки в зависимости от положения полоски. Кода требует мало, сложностей особых нет, и чему нибудь научишься.
    Ответ написан
    Комментировать
  • Как с помощью CSS получить точно такой же фон?

    profesor08
    @profesor08 Куратор тега CSS
    Комментировать
  • Как создать подобный эффект перехода и анимацию?

    profesor08
    @profesor08
    Немного THREE.js, немного glsl и немного gsap.

    И собрать это вот так: https://www.youtube.com/watch?v=I9A4xTT2rh0

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

    precision highp float;
    float mirrored(float v) {
     float m = mod(v, 2.0);
     return mix(m, 2.0 - m, step(1.0, m));
    }
    
    vec2 mirrored(vec2 v) {
     vec2 m = mod(v, 2.0);
     return mix(m, 2.0 - m, step(1.0, m));
    }
    vec3 mirrored(vec3 v) {
     vec3 m = mod(v, 2.0);
     return mix(m, 2.0 - m, step(1.0, m));
    }
    vec4 mirrored(vec4 v) {
     vec4 m = mod(v, 2.0);
     return mix(m, 2.0 - m, step(1.0, m));
    }
    float tri(float v) {
     return mix(v, 1.0 - v, step(0.5, v)) * 2.0;
    }
    vec2 tri(vec2 v) {
     return mix(v, 1.0 - v, step(0.5, v)) * 2.0;
    }
    vec3 tri(vec3 v) {
     return mix(v, 1.0 - v, step(0.5, v)) * 2.0;
    }
    vec4 tri(vec4 v) {
     return mix(v, 1.0 - v, step(0.5, v)) * 2.0;
    }
    #define PI_2 6.283185307179586
    #define PI_H 1.5707963267948966
    varying vec2 vUv;
    varying vec2 vUv1;
    varying vec2 vUv2;
    uniform vec4 time;
    uniform float progress;
    uniform vec3 mask;
    uniform float rotation;
    uniform vec4 translateDelay;
    uniform vec2 accel;
    uniform vec4 waveAmpFreq;
    uniform vec4 waveSpeedBlend;
    uniform vec4 pixels;
    uniform sampler2D texture1;
    uniform sampler2D texture2;
    void main(void) {
     vec2 uv = gl_FragCoord.xy / pixels.xy;
     float p = fract(progress + mask.z);
    
     float delayValue = p * (1.0 + translateDelay.z + translateDelay.w) - uv.y * translateDelay.w - (1.0 - uv.x) * translateDelay.z;
     delayValue = clamp(delayValue, 0.0, 1.0);
    
     vec2 translateValue = p + delayValue * accel;
     vec2 translateValue1 = translateDelay.xy * translateValue;
     vec2 translateValue2 = translateDelay.xy * (translateValue - 1.0 - accel);
     vec2 w = sin(time.y * waveSpeedBlend.xy + vUv.yx * waveAmpFreq.zw) * waveAmpFreq.xy;
     vec2 xy = (tri(p) * waveSpeedBlend.z + tri(delayValue) * waveSpeedBlend.w) * w;
     vec2 uv1 = vUv1 + translateValue1 + xy;
     vec2 uv2 = vUv2 + translateValue2 + xy;
     vec4 rgba1 = texture2D(texture1, mirrored(uv1));
     vec4 rgba2 = texture2D(texture2, mirrored(uv2));
     vec4 rgba = mix(rgba1, rgba2, delayValue);
     rgba = mix(vec4(0.0, 0.0, 0.0, 1.0), rgba, mask.y);
     rgba = mix(vec4(0.0), rgba, float(abs(uv.y * 2.0 - 1.0) <= mask.x));
     rgba.rgb *= 0.7;
     gl_FragColor = rgba;
    
    }
    Ответ написан
    1 комментарий
  • Как сделать так чтобы текст в каком либо блоке занимал всю ширину этого блока?

    profesor08
    @profesor08 Куратор тега CSS
    Есть свойство text-align: justify;, но для короткой фразы не поможет. Распредели слова по отдельным тегам и задай контейнеру display: flex, justify-content: space-between
    Ответ написан