1


 
 
 

МЕХЗАВОД | Сайтостроение для начинающих

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » МЕХЗАВОД | Сайтостроение для начинающих » Самостоятельное обучение » Отличный адаптивый слайдер для сайта.


Отличный адаптивый слайдер для сайта.

Сообщений 1 страница 2 из 2

1

Если вы пройдёте вместе со мной все три урока – вот, какая штука получится у вас в итоге -   Ссылка

Урок 1. Установка адаптивного слайдера.

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

Урок 2. Настройка адаптивного слайдера.

Здесь тупо настройки. Урок получился длинный, так как их действительно ОЧЕНЬ много.

Урок 3. Модернизация слайдера Slick.js

Здесь мы сделаем ещё один слайдер, и заставим оба слайдера работать в паре. А также – займёмся стилизацией элементов анимации.

2

Как сделать слайдер на CSS и HTML, без Javascript
Слайдеры, как правило делаются с использованием Javascript. Обычно для этого задействуют библиотеку JQuery. Хотя CSS и не позволяет создать полнофункциональный слайдер с кучей возможностей, таких как анимация по таймеру, листание пальцем на тач-скрине и т.п., во многих случаях такие продвинутые возможности и не требуются.

Простой слайдер для блога гораздо проще сверстать на чистом HTML и CSS, чем задействовать для этого возможности Javascript. Во-первых, код стилей слайдера получится гораздо проще и понятнее, чем код слайдера на Javascript. Во-вторых, та часть пользователей, которая параноидально не доверяет сайтам и заходит на незнакомые сайты только с аддоном NoScript, вырезающим весь JS-код, тоже сможет воспользоваться вашим слайдером.

Поехали!
Простой слайдер с анимированным переключением кадров

Примечание: В этом примере я буду ориентироваться на самые новые возможности CSS. Код не предназначен для работы в старых браузерах.

Начнём создание слайдера с такого кода:

    <div class='sliderA'>
        <input type="radio" name="slider1" id="slider1_1" checked="checked">
        <label for="slider1_1"></label>
        <div></div>

        <input type="radio" name="slider1" id="slider1_2">
        <label for="slider1_2"></label>
        <div></div>

        <input type="radio" name="slider1" id="slider1_3">
        <label for="slider1_3"></label>
        <div></div>

        <input type="radio" name="slider1" id="slider1_4">
        <label for="slider1_4"></label>
        <div></div>
    </div>

Контейнер слайдера — div с классом sliderA. Каждый кадр слайдера описывается трёмя тегами:

    Радиокнопкой (input type="radio"), отвечающей за состояние данного кадра (видно / не видно)
    Меткой label, отвечающей за отображение кнопки перехода на данный слайдер.
    Тегом div в котором находится содержимое кадра.

Радиокнопки внутри одного слайдера должны иметь одинаковое имя name. Также, все радиокнопки должны иметь уникальные (различные) идентификаторы id. Метка в поле for должна содержать значение id соответствующей радиокнопки. (Если вам не понятно, почему и зачем всё это делается читайте статью про вкладки. Там всё это объяснено подробно.)

Начинаем работать над стилями. Контейнер:

        .sliderA {
            width: 400px;
            height: 250px;
            border: 1px solid #888;
            position: relative;
            text-align: center;
        }

Мы задаём фиксированные размеры контейнера. Я установил их равными размеру изображений, которые я буду использовать в этом примере. Свойство position: relative необходимо, чтобы задать новую точку отсчёта позиций вложенных контейнеров. Свойство text-align: center я добавил, чтобы выровнять по центру полосу меток-кнопок, которые я буду позиционировать как inline-элементы.

Отображение радиокнопок нам не нужно, скрываем их:

        .sliderA > input {
            display: none;
        }

Оформляем метки-кнопки. Кода много, но ничего сложного нет:

        .sliderA > input + label {
            display: inline-block;
            width: 10px;
            height: 10px;
            border-radius: 8px;
            background: rgba(90, 90, 90, 0.8);
            border: 2px solid rgba(190, 190, 190, 0.8);

            cursor: pointer;

            z-index: 100;
            position: relative;

            margin-right: 4px;
            top: 90%;

            transition: background 0.8s ease-out 0s;
        }

        .sliderA > input + label:hover {
            background: rgba(250, 250, 250, 0.8);
        }

        .sliderA > input:checked + label {
            background: rgba(220, 220, 220, 0.8);
        }

Я устанавливаю свойство display: inline-block, что позволит разместить метки одной строкой и выровнять их по центру как строчные элементы, и вместе с тем задать им фиксированные размеры как блокам. Затем я задаю ширину и высоту, а также радиус скругления углов, цвет фона и цвет границы. Всё это приводит к тому, что наши метки будут отображаться в виде маленьких круглых кнопок.

Свойство cursor позволяет задать внешний вид курсора мыши при наведении на кнопку. Я установил значение pointer, т.е. вид указателя мыши будет такой же, как при наведении на ссылку («указательный палец»).

Свойство z-index необходимо для того, чтобы метки-кнопки лежали поверх кадров слайдера. Для этого же установлено свойство position: relative — иначе z-index не будет работать.

margin-right добавляет отступы между кнопками, а top: 90% сдвигает их в нижнюю часть контейнера. Можно было задать вертикальную позицию кнопок более грамотно, но здесь я ограничусь этим способом.

Также я задаю цвет фона для нажатой кнопки и кнопки, на которую наведена мышь. Свойство transition определяет анимацию для смены фона.

Также нам следовало устранить все пробелы и переводы строк между тегами слайдера, так как при использовании display: inline-block они дадут нам лишние зазоры между кнопками. Так мы поступали в предыдущей статье. Я не стал сейчас этого делать для упрощения восприятия кода HTML.

Получилась вот такая заготовка слайдера:

Добавляем стили для div-ов, в которых будет находиться содержимое кадра:

        .sliderA > div {
            position: absolute;
            top: 0px;
            left: 0px;
            right: 0px;
            bottom: 0px;
            z-index: 0;
        }

Все кадры будут занимать одно и то же положение. position: absolute позволяет изъять блоки из потока и разместить из произвольным образом. top, left, right, bottom задают координаты кадра таким образом, что кадр занимает весь контейнер слайдера целиком. z-index отправляет кадры под кнопки переключения кадров, иначем мы не сможем эти кнопки ни увидеть, ни нажать.

Теперь самая главная часть слайдера — показ и скрытие кадров в зависимости от нажатой кнопки. Традиционный подход скрытия элементов страницы с использованием свойства display: none нам не совсем подходит. Ведь для слайдера хотелось бы сделать плавное переключение кадров, но CSS не позволяет задать анимацию значения display при помощи правил transition.

Для плавного скрытия и появления кадров нам понадобятся два свойства: opacity и visibility; а также упомянутый transition.

Свойство opacity позволяет в виде десятичной дроби задать уровень прозрачности элемента страницы, от 0 (полностью прозрачный) до 1 (полностью непрозрачный). Например, opacity: 0.5 — прозрачность 50%.

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

Чтобы полностью отключить элемент и сделать его прозрачным для щелчков мышью, понадобится второе свойство: visibility: hidden. Однако visibility не позволяет задать частичную прозрачность. Элемент либо виден, либо нет.

Поэтому мы будем при помощи transition анимировать оба свойства, чтобы добиться нужного нам эффекта. Суть метода в следующем:

    Когда пользователь переключает кадр, новый кадр появляется с visibility: visible, но с opacity: 0.
    Затем происходит анимация значения opacity у обоих кадров. У старого кадра она плавно опускается до нуля, а у нового — плавно поднимается до единицы.
    После завершения анимации, visibility старого кадра устанавливается в значение hidden, чтобы он не мешал щелчкам мышью по новому кадру.

Вот такой код у меня получился:

        .sliderA > div {
            visibility: hidden;
            opacity: 0;
            transition: opacity 0.8s ease-out 0.1s, visibility 0.1s ease-out 0.9s;
        }

        .sliderA > input:checked + label + div {
            visibility: visible;
            opacity: 1;
            transition: opacity 0.8s ease-out 0.1s, visibility 0.1s ease-out 0s;
        }

Также я добавил правило для тега p внутри кадра, чтобы сделать подписи к картинкам:

        .sliderA > div > p {
            position: absolute;
            top: 0px;
            left: 0px;
            right: 0px;
            text-align: center;
            color: #fff;
            text-shadow: 1px 1px 2px #000;
        }

Дописываем HTML-код слайдера для нашего примера:

    <div class='sliderA'>
        <input type="radio" name="slider1" id="slider1_1" checked="checked">
        <label for="slider1_1"></label>
        <div>
            <p>Восход над островом</p>
            <img src='https://lh3.googleusercontent.com/-XGgw41OSARk/VePicTdAdgI/AAAAAAAAAS4/WeBbxp4ebQg/s400-Ic42/00099_manaisland_1920x1200.jpg' alt=''>
        </div>

        <input type="radio" name="slider1" id="slider1_2">
        <label for="slider1_2"></label>
        <div>
            <p>Озёрный край</p>
            <img src='https://lh3.googleusercontent.com/-aafAKIoTkT4/VePihWk2BHI/AAAAAAAAATA/zQVtiYD_eDc/s400-Ic42/00201_lakejipe_1920x1200.jpg' alt=''>
        </div>

        <input type="radio" name="slider1" id="slider1_3">
        <label for="slider1_3"></label>
        <div>
            <p>Закатная синева</p>
            <img src='https://lh3.googleusercontent.com/-ikbDMRhLc_I/VePkT4XLFtI/AAAAAAAAATg/qaHqQk89RAw/s400-Ic42/00744_laclahachesunset_1920x1200.jpg' alt=''>
        </div>

        <input type="radio" name="slider1" id="slider1_4">
        <label for="slider1_4"></label>
        <div>
            <p>Сельский пейзаж</p>
            <img src='https://lh3.googleusercontent.com/-BLXeHJNyOqw/VePimp_e_wI/AAAAAAAAATQ/BVw_9LFehyU/s400-Ic42/00442_pyrenees_1920x1200.jpg' alt=''>
        </div>

    </div>

И получаем вот такой результат:
http://sg.uploads.ru/t/p3jBa.jpg

Восход над островом

Простой слайдер с анимированным переключением кадров, второй вариант

В слайдере можно размещать как обычные фотографии, так и любой текст, ссылки на другие страницы сайта и так далее.

В случае, когда вы используете слайдер для размещения простых изображений (например, вы турист, и публикуете фотографии из ваших путешествий) возникает желание усовершенствовать слайдер так, чтобы нажатие на слайдер приводило к переходу к следующему изображению. В предыдущем примере кадры слайдера переключаются только круглыми кнопками, а нажатие на само изображение ничего не даёт.

Усовершествуем наш слайдер. В шаблон слайдера добавим по еще одной метке для каждого кадра:

    <div class='sliderA' >
        <input type="radio" name="slider2" id="slider2_1" checked="checked">
        <label for="slider2_1"></label>
        <div></div>
        <label for="slider2_2"></label>

        <input type="radio" name="slider2" id="slider2_2">
        <label for="slider2_2"></label>
        <div></div>
        <label for="slider2_3"></label>

        <input type="radio" name="slider2" id="slider2_3">
        <label for="slider2_3"></label>
        <div></div>
        <label for="slider2_4"></label>

        <input type="radio" name="slider2" id="slider2_4">
        <label for="slider2_4"></label>
        <div></div>
        <label for="slider2_1"></label>
    </div>

Как видите, метка идущая после первого кадра, активирует второй кадр. Метка, расположенная после второго кадра, активирует третий кадр; после третьего — чертвёртый. Последняя метка активирует первый кадр.

Метки мы расположим так, чтобы они перекрывали весь слайдер и лежали выше изображения, но ниже полосы кнопок. Метки прозрачные, поэтому сквозь них видно содержимое кадра. При показе кадра номер N вместе с ним отображается метка для перехода на кадр N + 1. (Для последнего кадра — метка перехода на первый кадр.)

        .sliderA > input + label + div + label {
            display: none;
        }

        .sliderA > input:checked + label + div + label {
            display: block;
            position: absolute;
            top: 0px;
            left: 0px;
            right: 0px;
            bottom: 0px;
            z-index: 50;
        }

Таким образом, при щелчке по изображению срабатывает активация следующего изображения. Результат:

Восход над островом
http://www.helpful-stuff.ru/2014/08/kak … a-css.html
У нас получился симпатичный слайдер для фотографий с вкладочным переключением кадров. Такой слайдер отлично подойдёт, например, для публикации фотографий в блоге о путешествиях.

В следующей статье о CSS я рассмотрю другой вариант слайдера: с переключением кадров при помощи кнопок «вперёд» и «назад»

Отредактировано Sandranad (2018-09-03 19:22:35)


Вы здесь » МЕХЗАВОД | Сайтостроение для начинающих » Самостоятельное обучение » Отличный адаптивый слайдер для сайта.


создать форум