• Почему пропадает background на разрешении 5к?

    @chuchas
    у вас в неправильном порядке описаны свойства background для второй картинки в классе .author, и safari не смог его "пережевать".

    верный порядок :
    background: url(../img/bg-author_text.png) center 115px no-repeat, url(../img/bg-author.jpg) center top / 100% fixed no-repeat ;


    то есть background-size после position указать
    background:
         url(sweettexture.jpg)    /* image */
         top center / 200px 200px /* position / size */
         no-repeat                /* repeat */
         fixed                    /* attachment */
         padding-box              /* origin */
         content-box              /* clip */
         red;                     /* color */
    Ответ написан
    Комментировать
  • Вопрос про миксы БЭМ?

    delphinpro
    @delphinpro
    frontend developer
    Блок - универсален и независим (в идеале). Он может располагаться в любом месте сайта без ущерба для собственного вида. Поэтому блокам не задаются стили, влияющие на позиционирование.
    Элемент - неотъемлемая часть блока, не существующая вне его. Поэтому элементу можно задать позиционирование в пределах своего блока.
    Микс решает проблему позиционирования блока. В данном случае нам нужно задать расположение блока поиска. Но блоку мы не можем задать width, left и т.п. Поэтому делаем этот же блок элементом другого (внешнего) блока и уже как элемент позиционируем.

    Почему не модификатор? Потому что
    Модификаторами в БЭМ задают блокам внешний вид, состояние и поведение.

    Позиционирование не относится ни к одному из этих вариантов.

    Обо всем этом написано https://ru.bem.info/methodology/css/ в разделах "Модификаторы" и "Внешняя геометрия и позиционирование"

    UPD
    Пожалуй стоит дополнить, что все вышенаписанное, как должно быть понятно, относится именно к позиционированию. Если вы миксуете какие-то стили, которые "задают блокам внешний вид, состояние и поведение", то тут вполне возможно использование модификатора.
    Ответ написан
    4 комментария
  • Как убрать дублирование домена в URL ссылки?

    Указывайте ссылку с "http://" или путь к папке без домена сайта.

    У вас:
    abc.ru/folder/

    Надо:
    http://abc.ru/folder/ ИЛИ "/folder/"
    Ответ написан
    Комментировать
  • В чем причина такого поведения?

    EreminD
    @EreminD
    Кое-что умею
    1. Первая цифра стирается, получается у inputa с типом number пустое значение
    2. У инпута с типом range пустого значения быть не может - выставляется значение дефолтовое

    Обрабатывать можно так:
    $amount.on('input', function() {
      if(this.value == "") this.value = 0; //например, вот так. Если значение пустое, ставить 0
      $rangeslider.val(this.value).change();
    });


    История какая: подразумевается, что пользователь берет этот круглый ползунок и двигает, куда ему надо. Ползунок занимает положение в соответствии с текущим значением. Нет значения - нет положения. Т.е. ползунок отображаться не будет. А что тогда остается двигать пользователю? Ничего.
    Это еще не все. Это вы - молодец - на старте указываете значение. А если разработчик не указывает? забыл или не нужно? Можно тогда ставить автоматом. Какое? Самое левое? А почему? Самое правое? А почему? Посередине? Звучит демократично.
    В общем, это - не дефект, а защита от дурака
    Ответ написан
    9 комментариев
  • Ваше отношение к рекурсии?

    GavriKos
    @GavriKos
    Ваше отношение к морозильнику? Где то примерно лет 5 назад сложилось сомнительное мнение, однако сейчас все чаще покупаю пельмени и их надо где то хранить.

    Короче, вопрос бредовый. Если рекурсия вам упростит решение задачи - используйте ее смело.
    Ответ написан
    5 комментариев
  • Datepicker React/Redux?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Универсальный рецепт для любых сторонних компонентов.

    1. Сторонний компонент, если он хороший, обычно ничего не знает о данных. Он их только отображает. Это то что нам нужно.

    2. Раз компонент ожидает от нас данные, мы должны их в него передать. Например в контейнере СтраницаБилетов, у вас подключается компонент ВыборДаты. Супер, чтобы в ВыборДаты передать данные используются props. Будет примерно так:
    <ВыборДаты текущаяДата={Дата_из_стора/или роута} />

    либо EN вариант:
    <DatePicker current={myDate} />

    3. Далее, у стороннего компонента (опять же, если он хороший) наверняка, есть какой-то onChange обработчик. Предположим, что он называется onDateChange. Следовательно, мы в контейнере подключаем AC (создатель действия, экшен), и передаем его в компонент. Выглядеть будет примерно так:
    <DatePicker onDateChange={this.props.getTickets} />


    либо русский вариант (просто для понимания, вдруг пригодится)
    <ВыборДаты текущая={мояДата} onDateChange={this.props.загрузиБилеты} />


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

    Приведу пример с кодом, хотя так как я его вытащил с реального проекта, он может вас запутать некоторой сложностью:

    Это мой компонент DayPicker, который внутри себя подключает компонент DatePicker
    class DayPicker extends Component {
      constructor(props) {
        super(props)
        this.state = {
          start: null,
        }
      }
      componentWillMount() {
        const { startTime } = this.props
        this.setState({ start: startTime })
      }
      componentWillReceiveProps(nextProps) {
        const { startTime } = nextProps
        this.setState({ start: startTime })
      }
      render() {
        const { start } = this.state
        const { onDateChange } = this.props
    
        return (
          <section>
            <div className='date-picker'>
              <DatePicker
                className='form-control'
                placeholderText={'Введите дату'}
                selected={moment(start)}
                onChange={ (moment) => onDateChange('startTime', moment) }/>
            </div>
          </section>
        )
      }
    }


    Тем не менее, это компонент. И он должен как-то получать в себя данные. Это происходит в контейнере, кода там много, приведу кусочек:

    // обработчик onDateChange
    onDateChange(dateField, moment) {
      const query = this.props.location.query
      const nextQuery = {
        ...query,
        [dateField]: moment.format('YYYY-MM-DD'),
      }
      // так как у меня все завязано на роутинге, здесь другой вызов ниже,
      // но для простоты примеры, здесь необходимо вызвать экшен, например getTickets(dateField)
    }
    
    // это находится в render функции
    const { startTime } = this.props
    
    <div className='row row-margin'>
      <div className='col-md-12'>
        <DayPicker
          onDateChange={this.onDateChange}
          startTime={startTime}
        />
      </div>
    </div>
    
    // ваш экшен getTickets(dateField) наверняка подключается так
    import { getTickets } from '../../actions/TicketsActions'
    //...
    const mapDispatchToProps = (dispatch) => ({
      getTickets: (dateField) => dispatch(getUsers(dateField)),
    })
    //...
    
    // ваша переменная startTime наверняка приходит из редьюсера / роута, у меня из роута
    const mapStateToProps = (state, ownProps) => ({
      startTime: ownProps.location.query.startTime,
    })
    Ответ написан
    8 комментариев
  • Как метод может быть доступен внутри объекта через this, но не быть доступным извне по имени?

    @Aves
    MyComponent это функция-конструктор, setState в прототипе. Нужно создать инстанс компонента.
    var instance = ReactDOM.render(<MyComponent />. document.body);
    instance.setState({myState: 1});

    (new MyComponent()).setState() тоже по идее будет работать.
    Ответ написан
  • Сколько можно навесить eventListener на одной странице?

    @Vovchikvoin
    Конечно дурацкая, для таких вещей придумано делегирование.
    Ответ написан
    3 комментария
  • Почему у HTMLCollecton length 0?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Вот что за мания в первой половине говорить об одном примере (где window.getElementsByTagName не существует), а во второй половине у вас появился drag, а потом jQuery...
    var list = document.getElementsByTagName('ul');
    console.log(list);
    console.log(list.length);

    Отлично работает прямо на этой странице.
    Ответ написан
    1 комментарий
  • Почему псевдоэлемент :before с position:absolute в IE ведёт себя не так, как в других браузерах?

    Carduelis
    @Carduelis
    Web-developer, front-end, js, less
    У псевдоэлемента с position: absolute, не указаны значения left, top, а это означает, что браузер использует свои значения по умолчанию. А они могут вполне разниться от браузера к браузеру.
    Разное поведение может обсулавливаться следующем:
    когда значение по умолчанию не стоит, браузер отправляет обычный элемент к левому краю элемента с position: relative, или к краю страницы, если таковых элементов нет. Crhome видит разницу между элементами и псевдоэлементами и отправляет псевдоэлемент к краю элемента-родителя, а не элемента с position: relative.
    @SelenIT2 уточнил:
    Дело в том, что, по стандарту, что угодно с position:absolute и без top/right/left/bottom размещается там, где оно оказалось бы без position:absolute. А псевдоэлемент размещается перед контентом родительского элемента. А когда контент центрирован, возникает неоднозначность, где именно это «перед контентом» — до или после свободного места, добавленного для центрирования. По логике здравого смысла, полагаю, всё-таки ближе к тексту (т.е. Хром более прав).

    Как оказалось, не важно: это псевдо элемент или просто элемент, IE ведет себя также. Суть в центровке контента codepen.io/anon/pen/jPmEjK
    Поэтому стоит всегда добавляеть пару атрибутов left/top (или других по оси x и оси y ), чтобы позиционирование было однозначным.
    Бывает, что иногда в списках position: relative не удается поставить родителю, и приходится не использовать одно из значений left/top, оставляя поведение элемента на усмотрение браузера, но в таком случае лучше изменить html-код, чтобы можно было использовать у родительского элемента списка relative, а у дочернего - absolute
    Ответ написан
    1 комментарий
  • Возможно ли технически сверстать нарисованный блок с динамической границей для responsive верстки?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Возможно. Примерно вот так (пока корректировал положение нижней планки, кто-то поэкспериментировал и сделал вторую версию:).
    Близкая тема Как реализовать не стандартные (обрезанные) границы в блоке,за которым имеется цветной фон?
    Ответ написан
    12 комментариев
  • Сайт, который имитирует звуки природы?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    Ответ написан
    Комментировать
  • Как убрать тормоза в прорисовке блоков с большими картинками в chrome?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Пятиминутка оптимизации:
    1) У вас нигде не включена 3д акселерация. Необходимо использовать либо will-change, либо translateZ(). Проще наверное will-change.
    а) Добавьте will-change: width, left; для .side
    б) Добавьте will-change: transform, width, opacity; для .img
    Вот так выглядит таймлайн у меня без твиков:
    pq5WvkG.png
    А вот так выглядит с моими твиками
    rAxTkFy.png
    Как видите до твиков средний фпс был около 30-40 и иногда стабильно проваливался до 20, что в общем то хреново. После твиков 50-60 с джанками на js/layout. Их я уже оптимизировать тут не буду, мне лень :)
    2) У вас .side изменяет свойство left, это весьма затратная херня. Постарайтесь переписать с использованием translateX. Это даст буст по производительности
    3) Изменение width для фуллскрин элементов это жутко затратное действие, так что ничего удивительного что без твиков у вас все тормозило.

    UPDATE: таймлайны приведены из хрома, если это кого интересует. В изначальном виде сайт одинаково ужасно тормозил на chrome/ff. При этом в ie11 все смотрелось весьма неплохо :) Конкретно сказать почему все именно так - не в состоянии, ибо уже сто лет не делал анимацию без акселерации. Обычно всегда побеждает хром, ибо в нем все работает и анимируется плавно, потом идет фф, где почти все работает, но зачастую идет проседание по производительности, и замыкает тройку ослик11, в котором зачастую много-чего не пашет (но при этом то что пашет, работает быстрее чем в фф).
    Ответ написан
    1 комментарий
  • Можно ли в ссылке писать блочные теги?

    @Billy_Milligan
    Не слушайте всяких, а лучше читайте документацию. В HTML5 можно смотрим сюда, в HTML4.01 нет.
    Ответ написан
    2 комментария
  • Как сделать правильный transition?

    Mr_Smitt
    @Mr_Smitt
    Если не трогать html, то думаю это поможет
    * {
        box-sizing: border-box;
    }
    .content {
        padding: 10px 20px;
    }
    .list-wraper {
       position: relative;
       padding: 0px;
       height: 72px;
    }
    .list-item {
       background-color: #fff;
       position: absolute;
       padding: 0;
        width: 100%;
       transition: all 200ms ease;
       -moz-transition: all 200ms ease;
       -webkit-transition: all 200ms ease;
       -o-transition: all 200ms ease;
        border: 1px solid #ccc;
        box-sizing: content-box;
    }
    .list-item:hover {
        z-index: 1;
        padding: 4px;
        margin: -4px;
    }
    Ответ написан
    Комментировать
  • Как побороть разное поведение input в браузерах?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    У меня везде одинаково. Текст, поверх которого выводится текст input. Что уже удивительно — почему стартовый текст не исчезает, и почему не использовать placeholder?

    Решение с упрощением jsfiddle.net/tpecazgn
    Ответ написан
    2 комментария
  • Почему не работает множественный фон в CSS?

    rOOse
    @rOOse
    Frontend developer
    https://developer.mozilla.org/en-US/docs/Web/Guide...

    You can do this with both the shorthand background property and the individual properties thereof except for background-color. That is, the following background properties can be specified as a list, one per background: background, background-attachment, background-clip, background-image, background-origin, background-position, background-repeat, background-size.

    Просто уберите запятую
    Ответ написан
    Комментировать