• Почему некорректно работают события в слайдере swiper?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    Для этого нужно делегировать обработку события не самим слайдам, а врапперу. В начале обработчика убедиться что в e.path есть слайд и он родитель target ноды или сама target нода
    Дублирование дерева в списке слайдов не инициирует новые ивенты на новых слайдах. В этом суть проблемы
    Ответ написан
  • Как исправить переход на страницу mail.php на модальное окно?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    Попробуйте селектнуть форму по id и использовать .on('submit', ...), установив e.preventDefault() первым в блоке инструкций колбэка
    Ответ написан
    Комментировать
  • Кассовая программа для печати билетов?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    Да, я сталкивался с принтингом документов когда писал агрегатор маркетплейсов и нужна была печать штрих-кодов на отгрузку и всё такое. На печать отправлял через printjs. Доки формировал фронтом через канву в пдф и насколько я помню скармливал через base64, то ли как html указывал id канвы - не припомню уже. Но это реально, даже управлять контентом билетов не задействуя сервер вообще
    Ответ написан
    Комментировать
  • Flex как прижать к низу элемент?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    .card__sneakers-body убираем flex-direction:column, вместо этого задаём flex-wrap:wrap
    Всем непосредственным дочкам (ну кроме heart) задаём width: 100%
    а card__sneakers-wrap-bottom добавляем align-self: flex-end
    Ответ написан
    Комментировать
  • Как правильно сделать такие линии и адаптировать их?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    Это можно сделать лишь с помощью :after и :before, манипулируя ими в зависимости от first-of-type, last-of-type и nth-of-type разных комбинаций

    допустим есть голые колонки, внутри которых уже контент
    div.col *12 > div.col__content + div.col__decorator

    Декоратор у нас кружок и через before и after блока div.col ставим пунктиры, позиционируем абсолютно внутри относительного родительского col. Ну как и decorator. Можно даже decorator оставить position static и внутри decorator насоздавать псевдоэлементов. Это по своему усмотрению
    А дальше css. Ну тут вообще только на препроцессорах можно внятно описать конструкцию
    .col {
      overflow: hidden; чтоб урезать линии границ блоков с закруглениями
      // пунктиры 1го и последнего одинаковы для десктопа и мобилки
      &:first-of-type {
        &:after {}
      }
      &:last-of-type {
        &:before {}
      }
      @media(max-width: мобилка) {
        &:nth-of-type( последовательности подбираем ) {
          &:before, &:after {}
        }
      }
      @media(min-width: десктоп) {
        &:nth-of-type( последовательности подбираем ) {
          &:before, &:after {}
        }
      }
    }

    Писать это муторно и вообще пилотаж довольно таки высший, но вполне реализуемо на css. Второй вариант - экспорт декораторов в svg, установка его в абсолютный блок, который дочерний к общему контейнеру списка. Устанавливать в svg preserveAspectRatio='none' и менять свгхи по медиа-запросу. Вариант для ленивых
    Ответ написан
    6 комментариев
  • Как правильно указать сочетание символа # и кода цвета?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    А так пробовали?
    @return #{'#'}#{$color}
    Ну или так
    @return '#' + #{$color}
    Может что-то сработает, хотя не уверен
    Да, кстати, можно вроде и так как вы сделали, просто через + сконкатить
    @return #{'#'}+$color
    А может даже и так
    @return #{'#'} + #{$color}
    Ответ написан
    Комментировать
  • Почему не добавляется новое свойство экземпляра vue?

    ShadowOfCasper
    @ShadowOfCasper Автор вопроса
    Middle User Interface Web Developer
    ещё и тип вопроса со сложный на простой переделал, я охреневаю. Ему говоришь - не работает ни через свойство, ни через прототип - он глаза замылил и продолжает бред нести. Вью - блестящий фрейм, а комьюнити ну просто отвратительно. Реакт - ужасная либа, а комьюнити - настоящие душки. Интересная градация

    Короче пока найден только один путь решения проблемы - он костыльный. По докам установка инстанса своего класса как вью плагина НЕ РАБОТАЕТ НИ ЧЕРЕЗ СВОЙСТВО, НИ ЧЕРЕЗ ПРОТОТИП

    Работает только объявление свойства ПОСЛЕ создания инстанса приложения
    const app = new Vue({
      router,
      store,
      i18n,
      render: h => h(App)
    }).$mount('#app')
    // вместо vue use ajax, где ajax - объект с install, в котором объявляется новое св-во / прототип
    app.$ajax = new Ajax()
    store.$app = app
    Ответ написан
  • Почему не изменяется props компонентов модалки по обновлению из внешнего setState?

    ShadowOfCasper
    @ShadowOfCasper Автор вопроса
    Middle User Interface Web Developer
    Ребят, всё ок (почти)
    Когда я подробно описал проблему - ну сами знаете, метод уточки.
    Я приглянулся к input, в котором input value={this.props.value} и решил попробовать прокинуть value сквозь state, и это сработало. Хотя странно - инпуты в других разделах обновляются нормально.
    Может мне кто-нибудь объяснить, что у вас тут в реакте происходит?
    Ответ написан
    Комментировать
  • Можно ли отрендерить реакт-компонент императивно?

    ShadowOfCasper
    @ShadowOfCasper Автор вопроса
    Middle User Interface Web Developer
    https://ru.reactjs.org/blog/2015/10/01/react-rende...
    class AlertCaller {
        constructor(options) {
            this.state = {
                children: options.textError
            }
            this._render();
        }
        
        _render() {
            ReactDOM.render(
            <Alert {...this.state} />,
            document.getElementById("alerts")
            );
        }
        destroy() {
            ReactDOM.unmountComponentAtNode(this._container);
        }
    }

    thanx Роман Александрович for resolving way
    Ответ написан
    Комментировать
  • Как выводить спрайт svg в зависимости от data элемента на странице?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    Итак, символьный спрайт - твой случай
    В коде html будет:
    <svg><use/ xlink:href='path/to/sprite.svg#icon-name'><svg>

    В коде спрайта нужны символы, которые подставляются по id.
    Вот пример куска спрайта, просто чтоб ты понял как это работает
    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><symbol fill="none" viewBox="0 0 18 18" id="archive" xmlns="http://www.w3.org/2000/svg"><path d="M9 0v10.42m0 0L6.143 7.676M9 10.42l2.857-2.742M6 5H4.5L1 12m0 0v5h16v-5M1 12h4a1 1 0 011 1 1 1 0 001 1h4a1 1 0 001-1 1 1 0 011-1h4m0 0l-3.5-7H12"/></symbol>
    ...

    Ну и вместо use подставляется разметка символа, связанная по id.
    Так ты сможешь контролировать svg и через css и через js. И все они будут лежать в одном спрайте.

    Ну и естественно, процесс компиляции иконок в спрайт - я юзаю через gulp.
    const gulp = require('gulp'),
    cheerio = require('gulp-cheerio'),
    svgmin = require('gulp-svgmin'),
    replace = require('gulp-replace'),
    util = require('gulp-util'),
    notify = require('gulp-notify'),
    svgSprite = require('gulp-svg-sprite'),
    path = require('path');
      let dest = path.join('src', 'assets', 'icons');
      let svgConfig = {
        mode: {
          symbol:{
            sprite: "../sprite.svg"
          }
        }
      };
      gulp.task('sprite', function() {
        gulp.src("**/*.svg", {cwd: path.join(dest, 'exported')})
          .pipe(svgSprite(svgConfig))
          .pipe(cheerio({
            run: function ($) {
              $('[stroke]').removeAttr('stroke');
              $('[viewBox]').attr('viewBox', '0 0 18 18');
              return
            },
            parserOptions: {xmlMode: true}
          }))
          .pipe(replace('&gt;', '>'))
          
          .on('error', function(err) {
            util.log(err);
          })
          .on('error', notify.onError('sprite compiling error!'))
          .pipe(gulp.dest(dest))
      });

    path src и dest а также поиконочную обработку через cheerio уже подгоняешь под себя
    Ответ написан
  • Как убрать ошибку в npm?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    вот потому что нехрен кодить под вендой - система (с точки зрения разработки веба да и не только) говно. Ну и помимо явного совета поставить линукс или купить мак разберём проблему.
    npm явно путает путь. Он пытается искать проект с манифестом на рабочем столе. А проект в корне диска. Поставь костыль - символьную ссылку (или как там у ведроюзеров - ярлЫк) на свой проект на рабочем столе. А ещё лучше поставь линукс. Или купи мак....
    Ответ написан
  • Git+ftp возможно ли одновременно использовать в проекте?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    Как раз твой случай
    UPD у тебя очень много примитивных вопросов про общую суть работы гита, чтобы ответить на них - нужно просто пересказать доки гита, поэтому хочешь не хочешь а придётся выкупить как работает гит. Если же кратко
    1) Хранишь на удалённом сервере репу и спулливаешься перед изменениями с нужной ветки
    2) Если работаешь по git, не надо править код на удалённых машинах руками. С гитом начнутся проблемы.
    3) Гугли и достигнешь апофеоза воли разума
    Ответ написан
    6 комментариев
  • Почему flex добавляет в высоту блока пустое пространство, если текст растягивается в ширину?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    Настройка flex-wrap тут не при чём. У тебя flex в колонку. Соответственно за растягивание в ширину отвечает свойство align-items, которое по дефолту stretch. Если текст не нужно растягивать по ширине родителя, который наследуется от самой широкой дочки, то переопредели align-items на flex-start
    Если тебе непонятно почему происходит так:
    1) Ширина родителя наследуется с самой широкой дочки, либо от ширины экрана в случае с блоком/флексом
    2) Обе дочки наследуют ширину от родителя при flex-direction: column и при оставлении по умолчанию align-items.
    Ответ написан
    Комментировать
  • Как заблокировать отправку формы обратной на сутки?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    Всё зависит от текущего функционала. Я б запрещал через базу, если запрет распространяется на зарегистрированных пользователей. Если же регистрации нет и надо каждому кто отправил форму как-то запретить отправлять снова на сутки, то localStorage. В куку сохранять не советую. У них ограничен вес - вроде 4кб на 1 домен но точно не помню - короче они уходят с запросом и естесн утяжеляют его
    Ответ написан
    Комментировать
  • Почему ie11 игнорирует конструкцию body [class*=--restricted]?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    Удали, пожалуйста, этот быдлокод и забудь про regex-селекторы навсегда.
    1) Низкий перформанс
    2) Если у тебя в блоке будет лежать другой блок с элементом или модификатором restricted - он унаследует код не его элемента и всё поедет.
    Чтобы сохранять и наследовать имя блока на любой уровень вложенности css конструкции используй sass, сохраняя в начале модуля & в переменную. Например:
    .block {
      $parent: &;
      &--active {
        #{$parent}__component {display: block}
      } 
      &__component {
        display: none;
      }
    }
    Ответ написан
    Комментировать
  • Создал html-шаблон письма. Почему при пересылке он ломается?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    1) Далеко не все почтовики поддерживают медиазапросы. Точнее почти никакие. Примерно полгода назад у меня была задача всерстать письмо адаптивно - пришлось перешерстить много инфы и тестить какие почтовики оставляют style на месте, какие атрибуты они не трогают к которым я мог бы привязать селекторы медиазапросов. Пришлось к галпу свой модуль дописывать, выносящий все стили медиазапросов и заменяющий все атрибуты class на те, что почтовики не трогают, и то я покрыл адаптивом только половину требуемых клиентов
    2) Все что может быть заинлайнено, должно быть заинлайнено.
    Попробуй собрать вот на этом бойлерплейте, он меня с вёрсткой рассылок часто спасает
    Ответ написан
    Комментировать
  • Автоматическое обновление страницы с помощью browser-sync не происходит. Почему?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    1) var browserSync = require('browser-sync').create();
    2) По-моему watch().on() - это из 3го gulp, а у тебя тут явно 4й.
    Присмотрись к докам повнимательнее. Попробуй передать отдельный таск в watch для reload
    Ответ написан
    Комментировать
  • Как получить постоянный запрос?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    Ну так и выставь
    setInterval( () => {
       fetch('ip/request-url').then((resp) => { /*прила доступна*/}).catch(error =>{/*прила недоступна*/});
    } ,5000)

    Или вебсокет открой, если сервер твой и ты можешь дописать функционал отправки данных на фронт о доступности сервиса. Но тут кода нужно больше. Аяксить по интервалу легче, но не скажет сек в сек о том когда прила доступна
    Ответ написан
    Комментировать