• Как сделать такие карточки?

    mizutsune
    @mizutsune
    Frontend Developer
    <div class="container">
        <div class="card"></div>
        <div class="card"></div>
        <div class="card"></div>
        <div class="card"></div>
    </div>


    Вариант первый:

    .container {
        display: grid;
        grid-gap: 10px;  
        grid-template-areas: 
          "A A B"
          "A A C"
          "A A D";
    }
    
    .card:nth-child(1) {
        grid-area: A;
    }
    
    .card:nth-child(2) {
        grid-area: B;
    }
    
    .card:nth-child(3) {
        grid-area: C;
    }
    
    .card:nth-child(4) {
        grid-area: D;
    }


    Вариант второй:

    .container {
        display: grid;
        grid-template-columns: repeat(3, 1fr);
        grid-gap: 10px;
    }
    
    .card:nth-child(1) {
       grid-row: span 3;
       grid-column: span 2;
    }


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

    mizutsune
    @mizutsune
    Frontend Developer
    Есть библиотека под названием Conveyer которая имеет подобный функционал.

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

    Думаю что есть ещё много других альтернатив, в том числе и реализация данного функционала без стороннего кода, но такой вариант стоит рассматривать если вы уверены в своих знаниях и способны учесть множество моментов, которые нужно учитывать.
    Ответ написан
    Комментировать
  • Как такое сверстать?

    mizutsune
    @mizutsune
    Frontend Developer
    Такую раскладку блоков можно сделать например с помощью библиотеки masonry или поискать аналоги.

    Можно конечно и без библиотек сделать. Например вот статья в которой есть материал по этой теме.
    Ответ написан
  • Как получить содержимое HTML в JS из другого файла?

    mizutsune
    @mizutsune
    Frontend Developer
    Как вариант можно использовать Fetch API.

    Простой пример на обычном JS:

    const button = document.querySelector(".button");
    const container = document.querySelector(".container");
    
    button.addEventListener("click", async () => {
       const response = await fetch("./path/sample.html");
       const result = await response.text();
       const parser = new DOMParser();
       const DOM = parser.parseFromString(result, "text/html");
       const targetContent = DOM.querySelector("body").innerHTML;
    
       container.insertAdjacentHTML("afterbegin", targetContent);
    });


    Думаю большого труда не составит переделать под свои нужды.
    Ответ написан
    Комментировать
  • Как добиться паузы после проигрывания анимации?

    mizutsune
    @mizutsune
    Frontend Developer
    Не особо уверен что это получится сделать адекватно и просто с помощью одного только CSS, поэтому предложу такой вариант с JS:



    В примере используется Mutation Observer, который можно заменить setInterval или рекурсивным вызовом или чем-нибудь ещё... вариантов много.

    Ещё как вариант, можете посмотреть библиотеку anime.js. Возможно с помощью неё, тоже можно решить данную задачу, но точного ответа дать не могу.
    Ответ написан
    Комментировать
  • Как выровнять форму по центру?

    mizutsune
    @mizutsune
    Frontend Developer
    Устанавливать фиксированные значения для свойства width - не совсем корректно. Да и к тому же вы используется гриды, не совсем так как нужно.

    Немного подправил ваши стили:

    .register__inner {
         width: 100%;
    }
    
    .register__form {
         width: 100%;
         max-width: 1000px;
         margin: 0 auto;
         display: grid;
         grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));
         grid-gap: 10px;
    }
    
    .register__input {
         width: 100%;
         height: 65px;
         border: 1px solid #d8d8d8;
         border-radius: 5px;
         padding: 27px 24px 23px;
    }
    
    .register__btn {
         width: 100%;
         height: 65px;
         border: none;
         border-radius: 5px;
         background: #ffe100;
    }


    У элемента .register__form в принципе можно установить значение grid-template-columns: repeat(2, 1fr), а потом через медиа запросы поменять, но это уже второстепенная задача.
    Ответ написан
    Комментировать
  • Как сделать такое окно загрузки фото?

    mizutsune
    @mizutsune
    Frontend Developer
    Например как-то так:



    В примере выше для функционала Drag & Drop or Draggable - используется библиотека Sortable. С её помощью реализуется основная "магия". Всё остальное настраивается по вкусу и цвету.
    Ответ написан
    1 комментарий
  • Как расположить блоки с контентом таким образом?

    mizutsune
    @mizutsune
    Frontend Developer
    <div class="container">
        <div class="card"></div>
        <div class="card"></div>
        <div class="card"></div>
    </div>


    .container {
        display: grid;
        grid-auto-flow: column;
        grid-gap: 10px;  
        grid-template-areas: 
          "A B"
          "A C";
    }
    
    .card:nth-child(1) {
        grid-area: A;
    }
    
    .card:nth-child(2) {
        grid-area: B;
    }
    
    .card:nth-child(3) {
        grid-area: C;
    }


    Или:

    .container{
        display: grid;
        grid-gap: 10px;  
        grid-template-columns: repeat(2, 1fr);
    }
    
    .card:nth-child(1) {
        grid-row: 1 / span 2;    
    }
    Ответ написан
    Комментировать
  • В чем причина не рабочего бургер меню на GitHub?

    mizutsune
    @mizutsune
    Frontend Developer
    Добавил бургер меню на свой сайт портфолио.


    Если речь идёт об этом портфолио, то тут ошибка в этом:

    <script src="/source/js/script.js"></script>

    - <script src="/source/js/script.js"></script>
    + <script src="source/js/script.js"></script>
    Ответ написан
    1 комментарий
  • Есть сайт для оценки npm модуля?

    mizutsune
    @mizutsune
    Frontend Developer
    Не уверен что это то что нужно, но есть такой сайт openbase. При выборе какой-нибудь библиотеки/плагина/etc, выводит информацию плюс предлагает альтернативы.
    Ответ написан
    Комментировать
  • Как поменять свойства слайдера в js зависимости от размера окна?

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

    Пример:

    const swiper = new Swiper('.swiper', {
          breakpoints: {
            640: {
              slidesPerView: 2,
            },
            768: {
              slidesPerView: 4,
            },
            1024: {
              slidesPerView: 5,
            },
          }
        });
    Ответ написан
  • Как сделать анимацию с кнопками?

    mizutsune
    @mizutsune
    Frontend Developer
    Как вариант можете попробовать такой плагин Vanilla-JS-Magic-Line-Navigation.

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

    mizutsune
    @mizutsune
    Frontend Developer
    Если нет опыта в создании подобных компонентов, то наверное стоит использовать какую-нибудь готовую библиотеку для аккордеонов. Например такую Accordion или такую metismenujs или поискать какие-нибудь ещё варианты. С помощью любой из этих двух библиотек, можно решить описанную в вопросе задачу.

    Или можно сделать как-то так без библиотек:

    Ответ написан
    3 комментария
  • Как сверстать этот элемент?

    mizutsune
    @mizutsune
    Frontend Developer
    В этом элементе нет ничего сложного. Карточка, внутри иконка, заголовок и текст с описанием.



    В песочнице в качестве иконок используются Inline SVG. Разумеется их лучше заменить тегами <img /> с путями до иконок, атрибутом alt и другими нужными атрибутами.
    Ответ написан
    3 комментария
  • Как выровнять картинку?

    mizutsune
    @mizutsune
    Frontend Developer
    Если правильно понял, то как-то так:

    Ответ написан
  • Как сделать принудительный перенос текста?

    mizutsune
    @mizutsune
    Frontend Developer
    Если верстка имеет примерно такой вид:

    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit</p>


    А нужно чтобы было так:

    <p>Lorem 
    ipsum dolor sit amet consectetur adipisicing elit. </p>


    Тогда, увы, но средствами CSS такого эффекта добиться не выйдет. В CSS имеется псевдоэлемент ::first-letter для стилизации первой буквы в строке, но нет псевдоэлемента :first-word, который мог бы дать возможность стилизовать первое слово. Так что как вариант, можно обернуть первое слово в дополнительный тег, например в span через html руками или через JS. После чего станет доступна стилизация первого слова. Ну или всё таки вставить тег br в нужном месте.

    Например можно сделать как-то так:

    <p class="target">Lorem ipsum dolor sit amet consectetur adipisicing elit</p>


    const target = document.querySelector(".target");
    
    target.innerHTML = target.innerText
         .split(" ")
         .map((w, i) => (i > 0 ? w : `<span>${w}</span>`))
         .join(" ");


    .target > span:first-child {
      display: block;
    }


    В результате, все слова идущие после первого слова, будут на новой строке.
    Ответ написан
    2 комментария
  • Как разделить данные в html формате?

    mizutsune
    @mizutsune
    Frontend Developer
    function getAllNextSiblings(el, subElement, selectorFilter) {
         let collection = [];
         let target = el.nextElementSibling;
    
         while (target) {
              if (target.matches(subElement)) break;
              if (selectorFilter && !target.matches(selectorFilter)) {
                   target = target.nextElementSibling;
                   continue;
              }
              collection.push(target.textContent.trim());
              target = target.nextElementSibling;
         }
         return collection;
    }


    // собираем заголовки и параграфы в массив объектов 
    // разбивая полученные данные на группы
    [...document.querySelectorAll("h1")].map(target => {
         return {
              heading: target.textContent,
              paragraphs: getAllNextSiblings(target, "h1", "p")
         };
    });


    В итоге имея например такую HTML - разметку:

    <div class="container">
        <h1>Глава 1</h1>
        <p>Текстовой блок - 1</p>
        <p>Текстовой блок - 2</p>
        <p>Текстовой блок - 3</p>
        <p>Текстовой блок - 4</p>
    
        <h1>Глава 2</h1>
        <p>Текстовой блок - 1</p>
        <p>Текстовой блок - 2</p>
        <p>Текстовой блок - 3</p>
      </div>


    Получим такой результат:

    [
       {
          "heading": "Глава 1",
          "paragraphs": [
             "Текстовой блок - 1",
             "Текстовой блок - 2",
             "Текстовой блок - 3",
             "Текстовой блок - 4"
          ]
       },
       {
          "heading": "Глава 2",
          "paragraphs": [
             "Текстовой блок - 1",
             "Текстовой блок - 2",
             "Текстовой блок - 3"
          ]
       }
    ]
    Ответ написан
    3 комментария
  • Как реализовать вещь, которая изображена на скриншоте?

    mizutsune
    @mizutsune
    Frontend Developer
    Данный элемент обычно называется Overlay. Его предназначение заключается не только в том чтобы затемнить область вокруг модального окна или off-canvas меню для наилучшей фокусировки на элементе, но ещё и для того чтобы при клике на данный элемент можно было закрыть окно/меню.

    Однако если закрытие по клику не нужно, разумеется можно сделать и тенью и псевдоэлементами как вам подсказали в комментариях.

    Или если всё же нужно закрытие по клику, тогда вариантов несколько.

    Первый вариант:

    Оборачиваете off-canvas меню в обертку для которой устанавливаете полупрозрачный темный фон. При открытии меню, делаете обертку и меню видимыми.

    Второй вариант:

    Создаёте отдельный элемент для оверлея, задав нужный полупрозрачный темный фон. При открытии меню, делаете оверлей и меню видимыми.

    Есть ещё несколько вариантов, но эти два наиболее подходящие для решения подобных задач.

    Вот как пример библиотека onoffcanvas.
    Ответ написан
    Комментировать
  • Как убрать блок с помощью JS и добавить новый после отправки формы?

    mizutsune
    @mizutsune
    Frontend Developer
    Если кратко ответить на вопрос, то как-то так:

    1. При нажатии на кнопку Отправить, делаем валидацию полей.
    2. Если валидация прошла успешно, скрываем форму и переходим к следующему шагу.
    3. Показываем popup окно с уведомлением или добавляем активный класс скрытому блоку с уведомлением.
    4. Profit.

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

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

    Ответ написан