Скрыть часть изображения css

Спрятать часть изображения средствами CSS

Третий день бьюсь, ничего не получается. Уже весь http://www.w3.org/TR/CSS21/ вдоль и поперёк прочитал.

Требуется средствами CSS, да так, чтобы во всех основных браузерах работало, вот такую конструкцию:

привести к виду, показанному слева:

, где зелёным показано собственно изображение, а заштрихована его невидимая часть. Эта невидимость должна достигаться средствами CSS. Допускается также некоторое количество «обвески» из HTML.

Пока что я научился делать только то, что показано справа, но это очевидно:

img background-color: #e0e0e0;
border: 1px solid #cccccc;
padding: 5px;
>

Размер изображения считать заранее неизвестным. Однако, если без этого совсем никак, буду требуемые циферки вытаскивать через PHP — с этими данными достаточно просто указать height: . и overflow: hidden; . Но очень не хотелось бы — это лишняя нагрузка на сервер, и не будет работать, скажем, в ЖЖ.

JavaScript, в общем, также возможен, однако крайне нежелателен по тем же (и некоторым другим) причинам.

Использовать как-то совсем кисло (слишком много наворотов, дополнительные страницы надо делать, размеры картинки вытаскивать и т.д.), хотя с ним, конечно, всё получится.

Если сделать невидимую область снизу невозможно, пусть она будет с любой другой стороны, да хоть со всех четырёх — это не принципиально.

Поясню, для чего это нужно; авось, ещё кому-нибудь пригодится. Надоело портить публикуемые снимки «водяными знаками», а как-то обозначать авторство, по крайней мере, для честных людей, надо. Поэтому хочу к каждой картинке приделывать снизу полосу с копирайтом, но при отображении в браузере в составе страницы эту полосу скрывать. А рамка нужна из эстетических соображений; можно и без неё, если она чем-то мешает. Вставить всё в ещё один несложно.

UPD: Всем спасибо, решение найдено. См. комменты.

Источник

3 простых и быстрых техники CSS для обрезки картинок

18.01.2010 11.02.2014 по 2Web 100 636

В этой статье мы расскажем вам о 3 быстрых и простых методах CSS, которые вы cможете использовать, чтобы показать только часть картинки на вашей страничке.

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

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

Техника 1 — использование отрицательных полей (Negative Margins)

Посмотреть пример
По этой технике картинку необходимо поместить в родительский элемент, в нашем случае, это параграф (тэг

Читайте также:  Birthday Reminders for August

) . Родительский абзац должен быть плавающим(floating) элементом (или с заданной шириной). Эта техника не будет работать на элементах с атрибутом «в полную ширину» (full width).

Затем мы задаем отрицательные поля для всех четырех сторон: верх( top ), право( right ), низ( bottom ) и лево( left ). Отрицательные поля определяют: насколько срезано в каждом направлении наше изображение, находящееся в родителе(параграфе). Получаем только часть от первоначальной картинки — обрезок. Затем, когда мы заменяем родительское свойство overflow на hidden , мы скрываем поля, которые находятся за нашим обрезком. Цель достигнута. Вам, правда, придется повозиться со значениями, чтобы по-настоящему почувствовать, как это работает.

Итак, HTML выглядит примерно так:

Источник

Как спрятать часть картинки, а остальную часть сделать фоном?

Всем привет!
Вообщем есть лого и оно заходит на меню, вот скриншот prntscr.com/29ctr7
И получается что мы не можем кликнуть на нижнюю область двух кнопок. Можно как-то спрятать часть лого, а оставшуюся часть сделать фоном для верхнего меню?

1. отрезать полголовы и разместить отдельной картинкой поверх меню.
2. сделать меню двуслойным — снизу фон, сверху текст, между ними — картинка

justasinner

Зависит от верстки. Можно задать позицию логотипа абсолютную и поставить z-index меньше чем у блока меню.

justasinner

спрятать нет сложности prntscr.com/29cz4h а вот как вернуть пропавшую часть лого, если фон у меню полоска в 1px?

могу честно сказать что ничем хорошим это не закончится.
да, есть несколько способов это сделать не разрезая картинку, но я даже не хочу их описывать — это долго и ненадежно.
если бы строитель был расположен хотя бы слева.
. и если Вы захотите сделать drop-down меню, снова будут проблемы.

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

Войдите, чтобы написать ответ

Как сделать адаптивную grid сетку?

Как передать строку, сформированную при помощи JS, в Livewire?

Источник

Маскирование в CSS

В компьютерной графике отсечение и маскирование — это две наиболее используемые операции. Обе они визуально скрывают часть элемента. Если вы ранее работали с SVG или HTML Canvas, то эти операции для вас, скорее всего, уже не новы. Отсечение определяет область элемента которая будет видна, всё остальное за пределами этой области не отображается и получается «отрезанным». При маскировании изображение маски объединяется с элементом, влияя на его альфа-канал. Части маскированного элемента получаются полностью или частично прозрачными. Новая спецификация CSS Masking направлена на объединение этих двух операций в мире HTML.

Отсечение в CSS 2.1

В CSS 2.1 уже определено свойство clip , оно ограничено прямоугольной областью через функцию rect() которая принимает четыре аргумента расстояния для верхнего, правого, нижнего и левого краёв. Раздражающий момент: свойство clip применяется исключительно к абсолютно позиционированным элементам и просто игнорируется для других элементов.

Свойство clip также ограничено отдельными элементами SVG. Это одна из причин, почему в спецификацию SVG добавлено свойство clip-path пригодное для маскирования в CSS.

Свойство clip-path

Свойство clip-path может применяться ко всем элементам HTML, графическим элементам и контейнерам SVG. Свойство либо ссылается на элемент , либо на одну из базовых фигур представленных в CSS Exclusions.

Читайте также:  Php post запрос cookie

Элемент берёт любой графический элемент из SVG и использует его в качестве области отсечения. Графическими элементами в SVG являются , , , , , и . также позволяет комбинировать несколько графических элементов. Объединение всех фигур затем используется как область отсечения. Следующий пример демонстрирует использование :

Базовые фигуры с другой стороны не требуют какой-либо разметки SVG. Они были добавлены к clip-path , чтобы предоставить удобные универсальные функции для простых операций отрезания.

  • inset( [ round ]?) определяет прямоугольник похожий на фунцию rect() у свойства clip . В параметрах указывается смещение верхней, правой, нижней и левой сторон. Функция также имеет необязательный радиус скругления с синтаксисом как у свойства border-radius .
  • circle(? [ at ]?) определяет простой круг с необязательным радиусом. Кроме того, необязательный параметр положения задаёт центральную точку окружности. имеет тот же синтаксис, что и свойство background-position .
  • ellipse( ? [ at ]?) определяет эллипс с горизонтальным и необязательным вертикальным радиусом, а также центральной точки на основе синтаксиса свойства background-position .
  • polygon( , , . ) определяет многоугольник основываясь на списке координат.

Ключевые слова вроде content-box , border-box , margin-box могут использоваться в сочетании с базовыми фигурами для изменения положения и размера указанного пути отсечения. Если ключевые слова применяются без базовых фигур, то они сами действуют как пути отсечения с учётом свойства border-radius . CSS разметка может выглядеть как в следующем примере:

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

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

  • List Item 1
  • List Item 2
  • List Item 3
  • List Item 4
  • List Item 5
  • List Item 6
  • List Item 7
  • List Item 8
  • List Item 9

Прокрутите список для просмотра эффекта.

Обратите внимание, что clip-path (а также clip ) действует на все характеристики элемента, включая фон, границы и механизм прокрутки.

Анимация clip-path

Базовые фигуры и содержимое элемента может быть анимировано. Следующий пример показывает анимацию фигуры в виде звезды.

Вот исходный код для анимации базовой фигуры:

img:hover < clip-path: polygon(0px 208px, 146.5px 207px, 147px 141.2px, . ); animate: star 3s; >@keyframes star < 0% < clip-path: polygon(0px 208px, 146.5px 207px, 147px 141.2px, . ); >, 100% < clip-path: polygon(0px 208px, 146.5px 207px, 147px 141.2px, . ); >>

Маскирование

Вторая операция после отсечения — это маскирование. Изображение маски используется в качестве своего рода «цветной сетки», которая фильтрует визуальные части элемента. В следующих абзацах я поясню разницу между двумя видами масок: маска по яркости и альфа-маска.

Маска по яркости

В маске по яркости вначале изображение маски преобразуется в чёрно-белое изображение (если оно ещё не такое). «Светлые» части маски сильнее маскируют элемент в том же месте. К примеру, чёрный цвет означает полную прозрачность, белый полную непрозрачность, а серые оттенки означают частичную прозрачность элемента.

Альфа-маска

Альфа-маска использует тот же принцип, что и маска по яркости. Разница между ними только в альфа-канале изображения. Чем меньше уровень прозрачности маски, тем больше виден элемент в той же точке.

Читайте также:  Javascript получение всех ссылок

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

Спецификация CSS Masking описывает два универсальных свойства для маскирования: mask и mask-border .

Свойство mask

Свойство mask сочетает в себе изображение маски и ссылку на маску.

Первый способ заключается в использовании свойств mask-image , mask-repeat , mask-position , mask-clip , mask-origin и mask-size , которые определяются подобно частям background вроде background-image . Как и для background-image можно определить несколько исходников маски, каждый из них представляет собой изображение описанное в CSS3 Images. Все исходники маски будут объединены в единое изображение маски, далее оно используется чтобы замаскировать элемент и его содержимое, как описано выше. Изображение может быть в любом растровом формате вроде JPG или PNG, а также SVG или градиентом CSS. Приведённый выше пример с маской может быть просто реализован с помощью следующего кода:

Если исходник маски должен быть растянут до размера содержимого, то просто используйте универсальное свойство mask как для фона, словно вы имеете дело со свойством background .

Вторым способом является ссылка на элемент , который описан в SVG 1.1. Элемент берёт любой графический элемент, а также группу элементов из SVG и использует их для создания изображения маски.

В итоге это выглядит как такое изображение.

Свойство mask-border

Свойство mask-border позволяет разделить изображение маски на 9 фрагментов: четыре уголка, четыре края и средняя часть. Эти части могут разрезаться, масштабироваться и растягиваться разными способами в соответствии с размером маски. Свойство заимствует функциональность из border-image и обеспечивает эффективное маскирование краёв и углов содержимого. Следующий пример демонстрирует поведение свойства:

Следующее изображение применяется в качестве изображения маски и разделено на девять частей:

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

Поддержка браузерами

Интересным моментом является поддержка в браузерах. Когда дело доходит до конкретной реализации всё становится довольно сложным.

Все браузеры поддерживают clip согласно спецификации. Все браузеры поддерживают свойства mask и clip-path для элементов SVG согласно спецификации SVG 1.1. Но только один браузер позволяет применять эти свойства для HTML-элементов: Firefox (вроде как). Рассмотрим подробнее.

Свойства clip-path и mask со ссылкой на , а также элемент работают в Firefox изначально без всяких префиксов. С другой стороны, mask-image , mask-border и связанные с ними свойства не поддерживаются вообще. Базовые фигуры для отсечения тоже не работают.

Blink и браузеры основанные на WebKit вроде Chrome и Safari поддерживают mask-image и mask-border (только они называются -webkit-mask-box-image в обоих случаях) и связанные с ними свойства. Все они пишутся с префиксами и могут применяться к элементам HTML. Ночные сборки обоих браузеров уже поддерживают свойство -webkit-clip-path для базовых фигур и ссылки на элемент . WebKit дополнительно поддерживает ключевое слово box-sizing .

Если вы хотите попробовать отсечение и маскирование, то используйте свойства как с префиксом, так и без него. Свойство без префикса должно ссылаться на или в настоящее время.

     

Будьте осторожны, другие браузеры ещё не понимают маскирование и отсечение для элементов HTML.

Источник

Оцените статью