Войти
Windows. Программы. Железо. Интернет. Безопасность. Мой компьютер
  • Обновление по воздуху. OTA обновления что это. Обновление Андроид с помощью фирменной утилиты
  • Sony Ericsson Xperia Play – телефон для игр Основная камера мобильного устройства обычно расположена на задней части корпуса и используется для фото- и видеосъемки
  • Нужно ли наклеивать защитную пленку на современный смартфон?
  • Фитнес-браслеты совместимые с Windows Phone — самый полный список
  • Какие бесплатные анонимайзеры лучше выбрать
  • Служба профилей пользователей препятствует входу в систему
  • Внутренние тени в CSS. Внутренние тени в CSS Полупрозрачная фотография с тенью нестандартного цвета css

    Внутренние тени в CSS. Внутренние тени в CSS Полупрозрачная фотография с тенью нестандартного цвета css

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

    Для добавления тени используется свойство box-shadow , у которого имеется шесть значений, из них только два являются обязательными. На рис. 1 показано свойство box-shadow со всеми возможными значениями, они пронумерованы для их идентификации.

    Рис. 1. Значения свойства box-shadow

    1. ключевое слово inset устанавливает тень внутри элемента;
    2. сдвиг тени по горизонтали (5px - вправо, -5px - влево);
    3. сдвиг по вертикали (5px - вниз, -5px - вверх);
    4. радиус размытия тени (0 - резкая тень);
    5. растяжение тени (5px - растяжение, -5px - сжатие);
    6. цвет тени.

    Обязательно следует указать только сдвиг по горизонтали и вертикали, все остальные параметры будут приниматься по умолчанию. В этом случае тень будет резкой без размытия и чёрного цвета.

    За счёт комбинаций разных параметров и их значений можно получить широкое разнообразие видов теней. В табл. 1 представлен код и результат, к которому он приводит.

    Табл. 1. Сочетания параметров тени
    Код Результат Описание
    box-shadow: 5px 5px; Резкая тень справа и снизу.
    box-shadow: -5px -5px; Резкая тень слева и сверху.
    box-shadow: 0 0 5px; Размытая тень вокруг элемента.
    box-shadow: 0 0 5px 2px; Расширение тени на 2 пиксела.
    box-shadow: 0 0 5px 2px red; Красное свечение вокруг элемента.
    box-shadow: 0.4em 0.4em 5px rgba(122,122,122,0.5); Полупрозрачная тень.
    box-shadow: inset 0 0 6px; Тень внутри.

    Как видно из таблицы, сдвиг тени не обязательно задавать в пикселах, хотя это и удобно. Цвет тени можно указывать в любом доступном формате, так, для получения полупрозрачной тени подойдёт формат RGBA, такая тень будет хорошо смотреться на любом фоне. В примере 1 показано, как это сделать.

    Пример 1. Тень на фоновом рисунке

    HTML5 CSS3 IE 9+ Cr Op Sa Fx

    Блок с тенью

    Не идти против знамён противника, когда они в полном порядке; не нападать на стан противника, когда он неприступен; это и есть управление изменениями.

    Сунь-цзы, пер. Николай Конрад

    Результат данного примера показан на рис. 2. Тень повторяет скругление уголков блока.

    Рис. 2. Вид тени на фоновом рисунке

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

    Тень также можно добавлять и к псевдоэлементам, это иногда требуется для сложной вёрстки. На рис. 3 показан блок с заголовком, к которому добавлена тень. Чтобы не было никаких линий в месте стыка приходится использовать псевдоэлемент ::after и добавлять тень к нему.

    Рис. 3. Блок с тенью

    В примере 2 показано создание такого блока.

    Пример 2. Блок с тенью

    HTML5 CSS3 IE 9+ Cr Op Sa Fx

    Блок с тенью

    Заголовок

    Содержимое блока

    Тень у элемента может быть не одна, а сразу несколько, их параметры перечисляются через запятую в значении свойства box-shadow . В примере 3 показано добавление двойной тени ко всем изображениям.

    Пример 2. Блок с тенью

    HTML5 CSS3 IE 9+ Cr Op Sa Fx

    Изображение

    Результат данного примера показан на рис. 4.

    Рис. 4. Изображение с двойной тенью

    Первая тень отображается слева от рисунка с радиусом размытия 20px, её размер уменьшен за счёт четвёртого параметра (-20px). Параметры второй тени указываются после запятой, тень отображается справа от рисунка и так же уменьшена для симметрии.

    Обычные тени легко реализовать с помощью box-shadow или text-shadow. Но как быть, если необходимо сделать внутренние тени? В этой статье описывается, как сделать такие тени с помощью всего нескольких строчек кода.

    Синтаксис

    Прежде всего рассмотрим два основных способа реализации теней в CSS.

    box-shadow

    Конструкция box-shadow содержит несколько различных значений:

    Horizontal offset и vertical offset - горизонтальное и вертикальное смещение соответственно. Эти значения указывают, в какую сторону объект будет отбрасывать тень:

    Blur radius и spread radius немного сложнее. В чем их разница? Взглянем на пример с двумя элементами, где значения blur radius отличаются:

    Край тени просто размывается. При различном значении spread radius видим следующее:

    В этом случае видим, что тень рассеивается на большую площадь. Если не указывать значения blur radius и spread radius , то они будут равны 0.

    text-shadow

    Синтаксис очень похож на box-shadow :

    Значения аналогичные, только нет spread-shadow . Пример использования:

    Inset в box-shadow

    Чтобы «перевернуть» тень внутрь объекта, необходимо добавить inset в CSS:

    Разобравшись с основным синтаксисом box-shadow, понять принципы реализации внутренних теней очень легко. Значения все те же, можно добавить цвет (RGB в hex):

    Цвет в формате RGB, альфа-значение отвечает за прозрачность тени:

    Изображения с тенями

    Добавить внутреннюю тень к изображению немного сложнее, чем к обычному div . Для начала вот обычный код картинки:

    Логично предположить, что добавить тень можно так:

    Img { box-shadow: inset 0px 0px 10px rgba(0,0,0,0.5); }

    Но тень не видно:

    Существует несколько способов решить эту проблему, каждый из которых имеет свои плюсы и минусы. Рассмотрим два из них. Первый - это обернуть картинку в обычный div :

    Div { height: 200px; width: 400px; box-shadow: inset 0px 0px 10px rgba(0,0,0,0.9); } img { height: 200px; width: 400px; position: relative; z-index: -2; }

    Все работает, но приходится добавлять немного лишней разметки HTML и CSS. Второй способ - это установить изображение фоном нужного блока:

    Div { height: 200px; width: 400px; background: url(http://lorempixum.com/400/200/transport/2); box-shadow: inset 0px 0px 10px rgba(0,0,0,0.9); }

    Вот, что может получится при использовании внутренних теней:

    Inset в text-shadow

    Для реализации внутренней тени текста простое добавление в код inset не работает:

    Для решения, сначала применим к заголовку h1 установим темный фон и светлую тень:

    H1 { background-color: #565656; color: transparent; text-shadow: 0px 2px 3px rgba(255,255,255,0.5); }

    Вот, что получается:

    Добавляем секретный ингредиент background-clip , который обрезает все, что выходит за пределы текста (на темный фон):

    H1 { background-color: #565656; color: transparent; text-shadow: 0px 2px 3px rgba(255,255,255,0.5); -webkit-background-clip: text; -moz-background-clip: text; background-clip: text; }

    Получилось почти то, что надо. Теперь просто немного затемняем текст (альфа), и итог:

    Сегодня мы узнаем как сделать CSS тени без картинок. После изучения этого урока вам уже не понадобится CSS генератор тени.

    В чем основное достоинство теней, созданных при помощи CSS3, так это в простоте реализации и уменьшении числа запросов к серверу (поскольку мы больше не используем картинки). Чтобы сделать тень на CSS нам понадобится тег div и CSS свойство box-shadow . Вам не понадобится дополнительная разметка, поскольку мы создим псевдо элементы :after и :before , которые поместим за основным объектом (div с классом block ).

    Взгляните на HTML код, для которого мы будем создавать CSS3 тень:

    Содержимое

    Далее вы сможете посмотреть готовые примеры и код, необходимый для их реализации. С целью минимизации текста на странице, мы опустим CSS свойства с браузерными префиксами. Полный код можно увилдеть, нажав на соответствующую примеру ссылку "Пример".

    .block { position:relative; width:40%; padding:1em; margin:2em 10px 4em; background:#fff; border-radius:4px; box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset; } .block:before, .block:after { content:""; position:absolute; z-index:-2; bottom:15px; left:10px; width:50%; height:20%; max-width:300px; box-shadow:0 15px 10px rgba(0, 0, 0, 0.7); transform:rotate(-3deg); } .block:after { right:10px; left:auto; transform:rotate(3deg); }


    .block { position:relative; width:40%; padding:1em; margin:2em 10px 4em; background:#fff; box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset; border:1px solid #efefef; border-radius:0 0 120px 120px / 0 0 6px 6px; } .block:before, .block:after { content:""; position:absolute; z-index:-2; bottom:12px; left:10px; width:50%; height:55%; max-width:200px; box-shadow:0 8px 12px rgba(0, 0, 0, 0.5); transform:skew(-8deg) rotate(-3deg); } .block:after { right:10px; left:auto; transform:skew(8deg) rotate(3deg); }

    С помощью тени можно придать блоку перспективу. Смотреть пример .


    .block { position:relative; width:40%; padding:1em; margin:2em 10px 4em; background:#fff; box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset; } .block:before, .block:after { content:""; position:absolute; z-index:-2; } .block:before { left:80px; bottom:5px; width:50%; height:35%; max-width:200px; box-shadow:-80px 0 8px rgba(0, 0, 0, 0.4); transform:skew(50deg); transform-origin:0 100%; } .block:after { display:none; }

    CSS тень у проподнятого блока. Смотреть пример .


    .block { position:relative; width:40%; padding:1em; margin:2em 10px 4em; background:#fff; box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset; box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset; } .block:before, .block:after { content:""; position:absolute; z-index:-2; }

    Пример CSS3 тени для вертикально согнутого блока. Смотреть пример .


    .block { position:relative; width:40%; padding:1em; margin:2em 10px 4em; background:#fff; box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset; } .block:before, .block:after { content:""; position:absolute; z-index:-2; } .block:before { top:10px; bottom:10px; left:0; right:50%; box-shadow:0 0 15px rgba(0,0,0,0.6); border-radius:10px / 100px; }


    .block { position:relative; width:40%; padding:1em; margin:2em 10px 4em; background:#fff; box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset; } .block:before, .block:after { content:""; position:absolute; z-index:-2; } .block:before { top:10px; bottom:10px; left:0; right:0; box-shadow:0 0 15px rgba(0,0,0,0.6); border-radius:10px / 100px; }

    Пример CSS3 тени для горизонтально согнутого блока. Смотреть пример .


    .block { position:relative; width:40%; padding:1em; margin:2em 10px 4em; background:#fff; box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset; } .block:before, .block:after { content:""; position:absolute; z-index:-2; } .block:before { top:50%; bottom:0px; left:10px; right:10px; box-shadow:0 0 15px rgba(0,0,0,0.6); border-radius:100px / 10px; }


    .block { position:relative; width:40%; padding:1em; margin:2em 10px 4em; background:#fff; box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset; } .block:before, .block:after { content:""; position:absolute; z-index:-2; } .block:before { top:0px; bottom:0px; left:10px; right:10px; box-shadow:0 0 15px rgba(0,0,0,0.6); border-radius:100px / 10px; }

    CSS3 тень для повернутого блока. Смотреть пример .


    .block { position:relative; width:40%; padding:1em; margin:2em 10px 4em; background:#fff; border-radius:4px; box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset; box-shadow:none; transform:rotate(-3deg); } .block > :first-child:before { content:""; position:absolute; z-index:-1; top:0px; bottom:0; left:0; right:0px; background:#fff; box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset; } .block:before, .block:after { content:""; position:absolute; z-index:-2; bottom:15px; left:10px; width:50%; height:20%; max-width:300px; box-shadow:0 15px 10px rgba(0, 0, 0, 0.7); transform:rotate(-3deg); } .block:after { right:10px; left:auto; transform:rotate(3deg); }

    Свойство CSS box-shadow позволяет задать тень элементу html. Используется дизайнерами сайтов довольно часто, чтобы как-то украсить и выделить рамки с текстом, изображения, сделать более читабельным контент.

    Синтаксис CSS box-shadow

    ... box-shadow : X Y R1 R2 color ; ...
    • X - смещение по оси Х (горизонтали)
    • Y - смещение по оси У (вертикали)
    • R1 - размытие (чем больше значение, тем плавне переход)
    • R2 - радиус растяжения (если положительный, то растягивает, отрицательный - сжимает)
    • color - цвет (можно задавать в любом формате: #RGB, название цвета)
    • inset - при наличии этого значения тень будет располагаться внутри блока (элемента)

    Пример 1. HTML рамка с тенью box-shadow без смещения

    Ниже представлен самый простой вариант использования тени свойством CSS box-shadow на странице html, когда она равномерно обтекает всю рамку без смещений.

    Пример №1. Рамка с тенью

    Пример №1. Рамка с тенью

    Пример 2. HTML рамка со смещенной тенью box-shadow

    Практически тот же пример, что и первый, но только со смещением рамки.

    Пример №2. Рамка со смещенной тенью

    На странице преобразуется в следующее

    Пример №2. Рамка со смещенной тенью

    Пример №3. Свечение рамки html

    Реализация тени в виде свечения

    Пример №3. Свечение

    На странице преобразуется в следующее

    Пример №3. Свечение

    Пример 4. Внутреннее свечение границы html

    Свечение, которое направлено внутрь блока и никак не выходит за его пределы. Эффект создается за счет атрибута inset .

    Пример №4. Внутреннее свечение

    На странице преобразуется в следующее

    Пример №4. Внутреннее свечение

    Пример 5. Совмещение теней в html

    Эффект тени можно совмещать через запятую. В таком случае образуется очень интересные результаты. Например, можно сделать разноцветную рамку в стиле 3D.

    Пример №5. Совмещение теней

    На странице преобразуется в следующее

    Пример №5. Совмещение теней

    Примечание: старые браузеры

    IE младше 9 версии не поддерживают box-shadow. Префиксы браузеров для box-shadow

    • -webkit-box-shadow - для Chrome до 10, Safari до 5.1, Android до 4 и iOS до 5
    • -moz-box-shadow - для Firefox до версии 4.0

    То же, что и обновление 3, но с современными правилами css (= less), чтобы не требовалось специального позиционирования на псевдоэлементе.

    #box { background-color: #3D6AA2; width: 160px; height: 90px; position: absolute; top: calc(10% - 10px); left: calc(50% - 80px); } .box-shadow:after { content:""; position:absolute; width:100%; bottom:1px; z-index:-1; transform:scale(.9); box-shadow: 0px 0px 8px 2px #000000; }

    ОБНОВЛЕНИЕ 3

    #box { background-color: #3D6AA2; width: 160px; height: 90px; margin-top: -45px; margin-left: -80px; position: absolute; top: 50%; left: 50%; } .box-shadow:after { content: ""; width: 150px; height: 1px; margin-top: 88px; margin-left: -75px; display: block; position: absolute; left: 50%; z-index: -1; -webkit-box-shadow: 0px 0px 8px 2px #000000; -moz-box-shadow: 0px 0px 8px 2px #000000; box-shadow: 0px 0px 8px 2px #000000; }

    ОБНОВЛЕНИЕ 2

    По-видимому, вы можете сделать это только с дополнительным параметром CSS-тэга box, поскольку все остальные просто указали. Здесь демо:

    Webkit-box-shadow: 0 4px 4px -2px #000000; -moz-box-shadow: 0 4px 4px -2px #000000; box-shadow: 0 4px 4px -2px #000000;

    Это было бы лучшим решением. Дополнительный параметр, который добавляется, описывается как:

    Четвертая длина - это спрэд расстояние. Положительные значения вызывают теневая форма для расширения направления по указанному радиусу. Отрицательные значения вызывают форму тени договориться.

    UPDATE

    То, что я сделал, это создать "теневой элемент", который будет скрываться за фактическим элементом, который вы хотели бы иметь в тени. Я сделал ширину "теневого элемента" ровно менее широкой, чем фактический элемент, в 2 раза превышающей указанную тень; затем я выровнял его правильно.

    #wrapper { width: 84px; position: relative; } #element { background-color: #3D668F; height: 54px; width: 100%; position: relative; z-index: 10; } #shadow { background-color: #3D668F; height: 8px; width: 80px; margin-left: -40px; position: absolute; bottom: 0px; left: 50%; z-index: 5; -webkit-box-shadow: 0px 2px 4px #000000; -moz-box-shadow: 0px 2px 4px #000000; box-shadow: 0px 2px 4px #000000; }

    Оригинальный ответ

    Да, вы можете сделать это с тем же синтаксисом, который вы предоставили. Первое значение контролирует горизонтальное позиционирование, а второе значение контролирует вертикальное позиционирование. Поэтому просто установите первое значение 0px , а второе - произвольное смещение, которое вы хотели бы сделать следующим образом.