• Скролл с остановкой для анимации на нативном JS?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Как вариант, прокручивать невидимый пустой высоченный div.
    Контент держать в другом div, position: fixed;, положение его менять программно по событию "scroll".

    Когда скролл доходит до высоты, где должна быть анимация, движение контента приостанавливается.
    Когда вышли из зоны анимации, движение продолжается, с поправкой на пропущенную высоту:
    document.addEventListener('scroll', () => {
      let offset = window.scrollY;
      const start = 685; // начало стоп-зоны в px
      const stop = 1000; // конеч стоп-зоны
    	if (offset >= start && offset < stop) {
        offset = start; // стоим на месте
      } else if (offset >= stop) {
        offset -= (stop - start); // продолжаем движение
      }
      content.style.top = `-${offset}px`; // позиционируем контент
    });


    Ответ написан
    3 комментария
  • Почему img для :before не работает как надо?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Это изображение контентное, а не оформительское. На реальном сайте, его очевидно будут загружать через админку. Его следует ставить через тег img

    <div class="person">
      <img class="person__photo" src="">
      <div class="person__wrapper">
        <div class="person__name">Имя фамилия</div>
        <div class="person__position">Должность</div>
      </div>
    </div>

    .person {
      display: flex;
      align-items: center;
      gap: 1rem;
    }
    .person__photo {
      width: 50px;
      height: 50px;
      border-radius: 50%;
      flex-shrink: 0;
    }
    .person__wrapper {
      display: grid;
      gap: 0.25rem;
    }
    .person__name {}
    .person__position {}
    Ответ написан
    Комментировать
  • Как сделать последнюю строку таблицы всегда затемнённой?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Просто поверх таблицы внизу наложи блок с фоновым полупрозрачным градиентом.
    Чтобы он не мешал указателю – pointer-events: none;
    Ответ написан
    5 комментариев
  • Как интегрировать slick slider с wordpress?

    EaGames
    @EaGames
    Front-end developer
    Через advanced custom field repeater, выводим список изображений, верстка никак не меняется.
    Пример из рабочего проекта:
    <?php if ( have_rows( 'slider', 'option' ) ): ?>
    				<div class="index-slider">
    					<?php while ( have_rows( 'slider', 'option' ) ): the_row();
    						// vars
    						$slider_img = get_sub_field( 'img' );
    						$slider_title  = get_sub_field( 'title' );
    						$slider_desc  = get_sub_field( 'desc' );
    						$slider_link  = get_sub_field( 'link' );
    						?>
    						<div class="index-slide">
    							<img src="<?php echo $slider_img; ?>" alt="img">
    							<div class="slide-content">
    								<?php if ( $slider_title ): ?>
    									<div class="title"><?php echo $slider_title; ?></div>
    								<?php endif; ?>
    								<?php if ( $slider_desc ): ?>
    									<div class="desc"><?php echo $slider_desc; ?></div>
    								<?php endif; ?>
    								<?php if ( $slider_link ): ?>
    									<a href="<?php echo $slider_link; ?>" class="btn-green">подробнее</a>
    								<?php endif; ?>
    							</div>
    						</div>
    					<?php endwhile; ?>
    				</div>
    			<?php endif; ?>
    Ответ написан
    2 комментария
  • Можно ли создать сайт загрузив движок WordPress на Google Drive?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Что вы там курите? Google Drive - это сервис хранения, редактирования и синхронизации файлов. Это не хостинг с php.
    Будут ли данные авторизации админов и пользователей доступны всем или это можно скрыть?
    - серьёзные у вас там админы.
    Ответ написан
    Комментировать
  • Каковы основные принципы регистрации и авторизации через социальные сети OAuth2?

    hbuser
    @hbuser Автор вопроса
    Отвечу сам себе.
    Здесь есть полезная конкретная информация о технической реализации.

    А если вкратце, то...

    Для авторизации, регистрации используется все та же таблица 'users'. Вместе с обычной регистрацией и авторизацией, когда при регистрации (в самом простом виде) в таблицу 'users' добавляются email, password и login пользователя, а при авторизации проверяется соответствие введенных login'а и password'а существующим в базе данных, аналогичным образом используется и регистрация/авторизация через социальные сети. Только в данном случае источником данных о пользователе для его регистрации является не непосредственный пользователь, который вводит данные в форму, а соц. сеть. Регистрация в данном случае достаточно прозрачная, т.е. не видна пользователю. Схема примерно следующая (без особенностей работы Oauth-протокола):


    1) Пользователь выбирает вход через соц. сеть.
    2) Происходит обращение к странице авторизации в этой соц. сети, если человек еще не авторизовывался там. После ввода данных, а если он ранее авторизовывался, происходит запрос на разрешение использования его данных.
    3) Если человек отказывается, то на этом конец. Если дает согласие, то выполняется перенаправление на указанную в настройках Oauth страницу сайта.
    4) У каждого пользователя в соц. сетях есть свой уникальный идентификатор, который можно запрашивать. Для своей таблицы 'users' нужно добавить пару дополнительных полей (например, вот такие): auth_via (enum('native, 'vk', 'mailru', '...')) - для обозначения типа регистрации пользователя, и social_id - здесь будет храниться уникальный идентификатор в соц. сети. Если нужно хранить какие-то специфические данные этого пользователя из соц. сетей, то можно создать доп. поля для этих данных.
    5) После того, как пользователь дал разрешение на использование его данных, необходимо запросить нужные данные от соц. сети, в т.ч. и идентификатор пользователя в соц. сети. Вот здесь и начинается невидимый процесс регистрации. Нужно проверить есть ли в БД пользователь с таким social_id, если нет, то вставляем social_id, данные пользователя из соц. сети, по необходимости, в БД. Все, пользователь зарегистрирован.
    Если же данные о пользователе есть, то необходимо запросить актуальные данные из соц. сети, сравнить их с теми, что в базе и если они изменились, то обновить их и в своей базе данных, если нет, то просто переходим к следующему шагу.
    6) Создается сессия с данными пользователя.

    Таким образом, к существующей таблице "родной" регистрации пользователей сайта присоединяется, условно говоря, таблица, поля, необходимые для регистрации/авторизации через соц. сети., и друг-другу они не мешают.

    ca4a4b263fd1424085988c9deaeb6d5b.png

    Для пользователя, зарегистрированного из соц. сети пароля и логина, естественно, нет. Они нужны для авторизации. А т.к. пользователь авторизуется с помощью своих логина и пароля в соц. сети, то и указывать здесь нечего. И еще, можно при авторизации, к запросу проверки логина и пароля, добавить условие

    'AND WHERE `auth_via`="native"'

    , чтобы исключить пользователей, зарегистрированных из соц. сетей.

    Как видно, для каждого пользователя в таблице создается внутренний (внутрисайтовый, если так можно выразиться) первичный, автоинкрементный ключ. Соответственно, нет разницы для логики сайта между пользователем, зарегистрированным через соц. сеть и через сайт. Если говорить об интернет-магазине, то, для привязки заказов к пользователю, можно использовать единый, внутренний идентификатор ID.
    Ответ написан
    3 комментария
  • Как скрывать блок по клику вне его?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Если надо по-быстрому добиться желаемого поведения...
    document.addEventListener('click', function(e) {
      if (!e.target.closest('.tileset-showitems')) {
        tilesetShowListRemove();
      }
    });

    Но вообще, я бы код переписал - убрал бы инлайновые обработчики клика, класс бы назначал самому блоку, а не вложенному элементу.

    - .active {
    + .active .box {

    const containerSelector = '.tileset-showitems';
    const buttonSelector = `${containerSelector} .tileset-showitems-trigger`;
    const activeClass = 'active';
    const closeAllExcept = container => document
      .querySelectorAll(`${containerSelector}.${activeClass}`)
      .forEach(n => n !== container && n.classList.remove(activeClass));
    
    document.addEventListener('click', ({ target: t }) => {
      const button = t.closest(buttonSelector);
      const container = t.closest(containerSelector);
    
      if (button) {
        container.classList.toggle(activeClass);
      }
    
      closeAllExcept(container);
    });
    
    window.addEventListener('keydown', e => e.key === 'Escape' && closeAllExcept());
    Ответ написан
    Комментировать
  • Как вывести разные картинки в разное время года?

    @quake4fun
    #logo {
    		background:#ccc;
    		height:50px;
    		width:100px;
    		border:1px solid;
    	}
    	#logo.s0,#logo.s1,#logo.s2 {
    		background:#ccc111;
    	}
    	#logo.s3,#logo.s4,#logo.s5 {
    		background:#111ccc;
    	}
    	#logo.s6,#logo.s7,#logo.s8 {
    		background:#c1c1c1;
    	}
    	#logo.s9,#logo.s10,#logo.s11 {
    		background:#1c1c1c;
    	}

    <div id="logo"></div>
    var date = new Date();
    	document.getElementById("logo").classList.add('s'+date.getMonth());
    Ответ написан
    2 комментария
  • Как сделать подсветку фона при наведении мыши?

    orlov0562
    @orlov0562
    I'm cool!
    смотри радиальный градиент: htmlbook.ru/css3-na-primerakh/radialnyi-gradient
    центр градиента - позиция мыши: https://css-tricks.com/examples/MovingHighlight/
    а соты сверху нарисуй
    Ответ написан
    3 комментария
  • Как лучше было бы сверстать этот блок?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    https://jsfiddle.net/n1Lmcexv/
    Если с ИЕ10+
    Ответ написан
    Комментировать
  • Как сделать кликабельным весь блок li, а не только вложенную в него а?

    Vinnica
    @Vinnica
    Начинающий верстальщик
    Мне кажется вы не совсем понимаете что вам надо сделать. Вам не надо задавать высоту и ширину li вам надо сделать это для ссылки. т.е. оставить li со стилями типа display:inline-block; а все стили которые вы хотите применить к li применить к ссылке внутри. И тогда li не будет иметь никаких стилей а ссвлка просто разойдется по всей ширине и высоте этого пункта
    Ответ написан
    1 комментарий
  • Почему не работает font-weight?

    Sander_Li
    @Sander_Li
    Backend developer
    Если дело в других стилях, должно сработать с помощью !important
    Ответ написан
    1 комментарий