• Как отключить определенные правила vscode для md файлов?

    mizutsune
    @mizutsune
    Frontend Developer
    В settings.json можно изменить правила для определенных типов файлов.

    "[markdown]": {
        "files.trimFinalNewlines": false,
        "files.trimTrailingWhitespace": false
      },


    После добавления этих правил в файл settings.json, потребуется перезагрузить VSCode, чтобы изменения вступили в силу.
    Ответ написан
    Комментировать
  • Как конкатенировать элементы массива в цикле?

    mizutsune
    @mizutsune
    Frontend Developer
    Можно обойтись и без цикла, если нужно просто объединить элементы массива в одну строку. Для решения подобных задач лучше подходит функция implode:

    // implode
    $arr = ["1", "2", "3"];
    $result = implode("", $arr);
    echo $result; // 123


    Или функция join:

    $arr = ["1", "2", "3"];
    $result = join("", $arr);
    echo $result; // 123


    Однако если по каким-то причинам, функции implode/join не подходят, например в случае если нужно проделать какие-то дополнительные действия с элементами массива перед конкатенацией, тогда можно воспользоваться циклами - for, foreach, etc.

    $arr = ["1", "2", "3"];
    $result = "";
    
    foreach ($arr as $key => $item) {
        $result .= $item;
    }
    
    echo $result; // 123


    Альтернативным вариантом является использование функции array_reduce, правда для решения такой простой задачи - данная функция выглядит слегка избыточной.

    $arr = ["1", "2", "3"];
    $result = array_reduce($arr, fn ($acc, $item) => $acc .= $item);
    
    echo $result; // 123
    Ответ написан
    2 комментария
  • Как при входе в аккаунт на моем форуме убрать :80 из URL?

    mizutsune
    @mizutsune
    Frontend Developer
    На официальном сайте phpBB, были похожие вопросы: тык и тык.

    В общем можно попробовать решить проблему через изменение настроек сервера в админке phpBB. Попробуйте установить порт сервера на 443(по умолчанию порт установлен на 80), который обычно используется для HTTPS. Вам также может потребоваться принудительно настроить URL-адрес сервера.

    63dfdd9bc3e0e905813423.png

    Ещё как вариант можно воспользоваться этим вариантом. То есть, нужно отключить функцию: Принудительные настройки URL сервера, после чего добавить в файл .htaccess следующий код:

    RewriteCond %{HTTPS} !=on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    Ответ написан
    Комментировать
  • Как сделать такую обертку?

    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
    Есть ли какой нибудь сервис для такого?


    Можно нагуглить кучу разных сервисов с таким запросом: pattern generator online.
    Вот например неплохой генератор паттернов от Flaticon.

    Однако можно обойтись и без генераторов.
    Если есть опыт работы с SVG, то тогда можно создать нужную картинку используя элемент pattern.
    Ответ написан
    Комментировать
  • Как мне убрать отступ сверху у ссылки?

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

    .textfaq .question {
    + display: inline-flex;
    + justify-content: center;
    + align-items: center;
    + line-height: 40px;
    }
    Ответ написан
    Комментировать
  • Как скопировать значение из div в input, если таких конструкций на странице много одинаковых?

    mizutsune
    @mizutsune
    Frontend Developer
    document.querySelectorAll(".section").forEach(n => {
    	let databox = n.querySelector("span");
    	let input = n.querySelector(".hidden_price");
    	input.value = databox.textContent;
    });


    Кстати атрибут ID должен быть уникальным.
    Ответ написан
    1 комментарий
  • Как сместить элемент?

    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;
    }

    Ответ написан
    Комментировать
  • Как запустить несколько Pop Up на одной странице?

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



    Но, в целом реализация модальных окон это не пара строчек кода, а намного больше и чтобы сделать хорошо, нужно потратить больше 5-ти минут времени. В любом случае, можно взять готовую библиотеку и посмотреть из чего она состоит. Это в некоторых случаях может помочь и возможно упростит создание своего велосипеда.
    Ответ написан
    Комментировать
  • Как выстроить блоки с помощью 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
    Как отключить инициирование свайпера если слайдов меньше чем нужно для показа?


    const swiper = new Swiper(".slider", { init: false });
    
    const slider = document.querySelector(".slider");
    const sliderSlides = slider.querySelectorAll(".swiper-slide");
    
    sliderSlides.length > 3 ? swiper.init() : false;
    Ответ написан
    Комментировать
  • Не затемняется фото?

    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");
    }



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

    mizutsune
    @mizutsune
    Frontend Developer
    Тег option невозможно нормально стилизовать средствами CSS. Но есть несколько вариантов решения задачи:

    1. Простым решением будет отказ от каких либо стилизаций тега option, ограничившись при этом стилизацией тега select. Да, можно сказать что идея так себе, но это достаточно "популярное" решение, которое встречается очень часто во многих ответах/советах, при возникновении подобных вопросов. В основном это связано с тем что нативный select имеет поддержку доступности, удобное управление с клавиатуры и мыши и так далее. Воссоздавать весь набор этих функций, достаточно сложно, без наличия опыта.

    2. Найти более менее нормальную библиотеку кастомных select`ов и использовать её, вместо стандартного select. Однако готовая библиотека не панацея и в ней может отсутствовать набор тех или иных функций. Разумеется при желании можно добавить нужный функционал, но это займёт определенное время, а также потребует знаний JS + навыка работы с чужим кодом.

    3. Наиболее сложным вариантом является создание своего кастомного select`а с нуля. Можно конечно уложиться и в пару строк кода, создав простой select, но если делать доступный и качественный компонент, придётся потратить немало времени, чтобы реализовать полную копию тега select с набором всех необходимых функций, а также с возможностью нормальной стилизации как самого компонента, так и дочерних элементов.

    4. Ну и в качестве ещё одного варианта можно попробовать какую-нибудь комбинацию JS + </select> с добавлением дополнительных элементов, для стилизации, но это так себе решение...
    Ответ написан
    Комментировать
  • Как с помощью js при уменьшении ширины экрана обрезался текст?

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

    Пример

    .target {
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }



    Или если нужно обрезать текст по количеству строк, тогда вполне подойдёт webkit-line-clamp.

    Пример

    .target {
      overflow: hidden;
      display: -webkit-box;
      -webkit-line-clamp: 5;
      -webkit-box-orient: vertical;
    }



    Однако если всё же хочется сделать с помощью JS, тогда как вариант можно сделать так:



    Свойство breakpoints содержит двумерный массив с парами значений: [[min-width, max-width], wordsLimit].
    Ответ написан
    Комментировать
  • Как сделать анимацию "водных разводов"?

    mizutsune
    @mizutsune
    Frontend Developer


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








    Ответ написан
    Комментировать
  • Как организовать код на js?

    mizutsune
    @mizutsune
    Frontend Developer
    Как вариант, можно делать проверку на наличие элемента на странице и если он есть, выполнять определенную функцию.

    const fn = (..args) => {
      // выходим из функции если элемент не найден
      if(!document.querySelector(".target-element-selector")) return;
      
      // код функции
    };


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

    if (window.location.href === "https://you-site.com/blog"){
       // код который нужно выполнить на странице blog
    }


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

    mizutsune
    @mizutsune
    Frontend Developer
    Ответ написан
    Комментировать