Css triangle generator

Посмотрим реализацию благодаря свойству transform. Меняя угол зрения perspective и угол наклона rotateY, получаем такую вот равнобедренную трапецию. Содержимое в ней, как видите, также наклоняется.

Если изменить rotateX на rotateY, параллельные стороны (основания трапеции) будут вертикальны. Фактически rotate кружит элемент. Поэтому, чтобы найти нужное положение, обязательно попробуйте поменять значения в теге style в пунктирном поле. Оно динамически изменяемо.

P.S. мне не ведомо почему это так криво отображается в Хроме. Почему даже IE справляется с задачей на ура.

наверх ↑

8 комментариев:

Анонимный
А где картиночки-примеры? С ними было бы интереснее 🙂 Однако, спасибо в любом случае!)
NMitra
Какие картиночки-примеры?
Анонимный
Наталья, огромное спасибо за эту информацию! Несколько раз искал подобное, но тщетно, а сейчас очень кстати, пригодится для оформления шапки блога.
NMitra
Рассчитывайте пространство так, чтобы уместился весь текст без искажения, потому что поддержка браузерами ограничена. Опера вообще не поддерживает perspective, В Хроме какая-то несуразица. Можно опустить -webkit- и показывать элемент только в IE и Мозиле. Это временная мера, совсем недавно и градиенты браузеры создавали по своему. По хорошему нужно все значения transform посмотреть. Например, rotate() — это не тоже самое что rotateX() и rotateY()

Я тоже одно время искала такое решение, но не нашла. Вообще не могла понять откуда вырисовывается трапеция, получался только параллелограмм.

Анонимный
А если для каждого браузера указать, тоже не получается? Хотя, кому я задаю этот вопрос, Вы наверняка протестили эти варианты. Спасибо, Наташа!
NMitra
Опера не поддерживает perspective ни с префиксом, ни без. Её как браузер забросили.

Она — это Хром, да и то, не полностью перешедший. Да, я полюбопытствовала на результат )

Космо Мизраил Горыныч
Если надо просто нарисовать однородную трапецию без содержимого внутри неё, можно воспользоваться прозрачными границами:
#trapezoid {
border-bottom: 100px solid red;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
height: 0;
width: 100px;
}
случайно найдено на css-tricks.com. Я таким же способом пилю стрелочки и всякие хвостики для менюшек, хлебных крошек, облачек и прочего.
NMitra
Верно и поддержка лучше. Только не совсем понятно что с такой трапецией делать. Интереснее будет:

#trapezoid {
border-corner-shape: bevel;
border-radius: 30px 30px 0px 0px;
}

К сожалению, border-corner-shape ещё не поддерживается.

Каждая демонстрация использует clip-path из CSS, но в разметке также содержится встроенный SVG с классом clip-svg, который просто сбрасывает ширину и высоту SVG до 0. Вы также можете удалить этот класс и задать атрибуты width и height непосредственно в разметке SVG.

Пример 1: Обрезка изображений разными многоугольниками

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

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

Примечание. Изображения в этой демонстрации адаптивные. Используя хорошее решение для адаптивных изображений img { max-width: 100%; height: auto; }, а также адаптивные обтравочные контуры через CSS и SVG, мы делаем наши многоугольники прекрасно масштабируемыми.

Данная демонстрация является результатом упражнения для понимания построения координат при создании многоугольников. В демонстрации ниже я добавила несколько фигур, которые вы можете использовать в своих проектов. При наведении на каждое изображение вы увидите соотношение сторон исходного изображения.

Ничто не сравнится с исключительным инструментом Clippy для визуализации фигур — графическим интерфейсом от Беннетта Фели. Координаты всех существующих фигур представлены в процентах, также есть возможность добавления собственного многоугольника. Вы можете использовать Clippy для создания обрезанных фигур и своего SVG на их основе для лучшей поддержки в браузерах.

See the Pen Clip-path: Polygon shapes by webref (@webref) on CodePen.

Пример 2: Анимация базовых фигур через transition

Наведите курсор на фиолетовый шестиугольник и он превратится в восьмиугольник.

Однако заданного эффекта перехода не произойдёт.

See the Pen Clip-path: shape transition: Part 1 by webref (@webref) on CodePen.

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

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

Вот описание шестиугольника с шестью парами координатных точек:

А это описание шестиугольника с восемью парами координат, первые две из которых были дублированы:

Теперь переход при трансформации фигур будет плавным, как видно в демонстрации ниже.

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

Имейте в виду, что некоторые люди обсуждают устаревшие SMIL в Chrome и Chromium и уделяют особое внимание внедрению Web Animations API, который, к сожалению, находится на стадии рабочего проекта.

В демонстрации ниже (фоновое изображение предоставлено morgueFile), вы можете видеть, как мы анимировали точки многоугольника между событиями mouseover и mouseout в течение 0,2 секунд. Присмотритесь к тегу <animate> в разметке SVG.

See the Pen Clip-path: shape transition: Part 2 by Karen Menezes (@imohkay) on CodePen.

Пример 3. Добавление рамки к обрезанному объекту

Для сокращения рассказа — границы, контуры и тени, которые лежат за пределами области отсечения, удаляются.

Мне было немного грустно от этого, и я поспрашивала членов W3C по рабочей группе CSS. Однако вывод в том, что нет способа сделать это при использовании базовых фигур. Дирк Шульцe так ответил на мой вопрос: «Да, все операции рисования с элементом отсекаются. Сюда входят контуры и границы».

Смотрите демонстрацию ниже. Наведите указатель на ромбоид с неполной рамкой, чтобы увидеть исходную, необрезанную версию с целой рамкой.

See the Pen Clip-path: Borders by Karen Menezes (@imohkay) on CodePen.

Конечно, мы всегда можем использовать приём, к которому я наконец пришла, и получить рамку с помощью генерируемого содержимого.

В демонстрации ниже создаётся копия элемента через псевдоэлемент ::after и затем он позиционируется абсолютно. Это создаёт иллюзию рамки, позволяя нам моделировать интересные эффекты, такие как градиентная рамка на втором восьмиугольнике и внутренняя тень через фильтр CSS на третьем (не очень изящно, но функционально). Обратите внимание, что фильтры CSS в настоящее время работают только в Firefox и в браузерах WebKit и Blink.

See the Pen Clip-path: Border simulation by Karen Menezes (@imohkay) on CodePen.

Пример 4: Использование clip-path для создания ромбовидной сетки

Ниже приведено изображение, которое будем использовать.

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

Фактический размер изображения составляет 600×600 пикселей. Так что начнём с четырех пустых <div> по 300 пикселей каждый и применим к ним одно и то же фоновое изображение. Затем добавим родителя размером 604 пикселя и скомпонуем изображения с помощью inline-block.

Теперь изменим значение свойства background-position для каждого изображения на top, left, right и bottom, соответственно.

Обрежем каждый блок в виде ромба и наложим абсолютно позиционированный слой с некоторым текстом на каждое из нижних трёх изображений.

Теперь переместим изображения по рядам — второе и третье изображения в один ряд, а первое и четвертое в отдельные ряды.

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

See the Pen Clip-path: Diamond grid by Karen Menezes (@imohkay) on CodePen.

Во время работы над этой демонстрацией я заметила ошибку в Chrome, связанную с событиями указателя, они отправлялись за пределами области отсечения, что нарушает спецификацию: «По умолчанию события указателя не должны отправляться за пределами обрезанной (невидимой) области». Я сообщила о данной ошибке. Проблема с этой демонстрацией была решена с помощью свойства pointer-events со значением none для класса overlay. В качестве альтернативы вы можете применить то же самое значение clip-path к overlay для обхода проблемы.

Из-за отрицательных margin эта демонстрация будет выглядеть странно в браузерах, которые не поддерживают clip-path. Так что желательно использовать какую-то проверку перед применением margin (но сама я с этим не экспериментировала) или @supports, хотя не рекомендовала бы последнее в рабочем коде.

Пример 5. Создание фиктивной страницы профиля на шестиугольниках

Наша финальная страница должна выглядеть так:

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

Значения clip-path для шестиугольника могут быть получены с одной из демонстраций выше или с помощью инструмента Clippy.

Первый шестиугольник использует фоновое изображение (потому что мы смешиваем тусклый бордовый цвет с фоном с помощью свойства background-blend-mode). Используя генерируемое содержимое, абсолютно позиционированный элемент обрезается до бордового треугольника, его вы можете видеть снизу. Он исчезает при наведении.

Для второго шестиугольника со словом «work» просто задан тёмно-серый фон, который меняется при наведении.

Третий шестиугольник содержит градиентную рамку, аналогичную той, что показана в демонстрации при создании рамок на clip-path.

Шестиугольники вертикально выстраиваются на маленьких экранах и выравниваются по центру на больших. Я использовала комбинацию display: table, абсолютного позиционирования и трансформации. Конечно, вы можете воспользоваться flexbox, float или чем-то ещё, что заставит вашу лодку плавать.

Вот заключительная демонстрация.

See the Pen Clip-path: Hexagon shapes for dummy profile page by Karen Menezes (@imohkay) on CodePen.

Я обнаружила ошибку с clip-path при создании этой демонстрации. Изменение значения opacity в сочетании с переходом CSS вызывает мерцание и артефакты на странице. Помните об этом, если используете clip-path для прогрессивного улучшения дизайна.

Также имеется другая ошибка с clip-path и свойством backface-visibility, когда оно задано как hidden.

Эта ошибка задокументирована в Chromium и мне удалось воспроизвести её, используя синтаксис базовых фигур в Chrome под Linux. Имейте это в виду, если используете clip-path для создания классного трёхмерного разворота или чего-нибудь, что использует трёхмерную трансформацию CSS.

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

Благодаря clip-path вы можете значительно изменить внешний вид страницы, не беспокоясь о старых браузерах, где страница будет изящно деградировать. Если вы решите использовать clip-path для улучшения дизайна, следите за спецификацией, поскольку она продвигается к статусу «Рекомендация».

Автор и редакторы

Автор: Карен Менезес

Последнее изменение: 08.09.2017

Редакторы: Влад Мержевич

Internet Explorer Chrome Opera Safari Firefox Android iOS
9.0+ 4.0+ 11.60+ 5.0+ 4.0+ 2.1+ 2.0+

Задача

Превратить изображения в круг и добавить вокруг них рамку.

Решение

Для скругления уголков у элементов в CSS3 предназначено свойство border-radius, значением которого выступает радиус закругления. Если взять квадратное изображение и добавить к нему это свойство, то мы получим уже не квадратное, а круглое изображение. В качестве значения следует задать половину ширины рисунка. Правда, можно поступить и проще и значением указать заведомо большое число, превышающее размеры изображения. Так мы в любом случае получим круглую картинку и сможем применять стиль к изображениям разного размера.

Плюсом использования border-radius является то, что мы можем добавлять в стилях к элементу рамку, тень и она будет повторять контур. В примере 1 показано создание круглых изображений, для чего вводится класс round, с тенью и рамкой.

Пример 1. Круглые изображения

HTML5CSS3IECrOpSaFx

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

Рис. 1. Круглые изображения

Браузеры Chrome и Safari некорректно отображают скруглённые уголки, что выглядит довольно некрасиво (рис. 2).

Рис. 2. Рамка в браузере Chrome

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

В примере 2 показан изменённый стиль, решающий проблему в Chrome с обрамлением.

Пример 2. Рамка из тени

HTML5CSS3IECrOpSaFx

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

Рис. 3. Рамка в браузере Chrome

Заметьте, что изображения теперь плотно прилегают друг к другу, для добавления пространства между ними примените свойство margin.

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

  • Одноцветный блок с закругленными углами без рамок

    Самое простое. Сначала нужно сделать 4 картинки с уголками: t-l.gif(top-left), t-r.gif(top-right), b-r.gif(bottom-right), b-l.gif(bottom-left). Дальше всё элементарно.
    HTML:

    <div class=»corners»><div><div><div>
         Содержание блока
    </div></div></div></div>

    CSS:

    .corners {
         background: #666 url(t-l.gif) top left no-repeat;
    }
    .corners div {
         background: url(t-r.gif) top right no-repeat;
    }
    .corners div div {
         background: url(b-r.gif) bottom right no-repeat;
    }
    .corners div div div {
         background: url(b-l.gif) bottom left no-repeat;
    }

    Вот как это выглядит(при изменении размера окна выглядит особо хорошо):

    блок без рамки со скругленными углами 

  • Блок с закругленными углами и сплошной рамкой

    Картинки: t-l.gif, t-r.gif, b-r.gif, b-l.gif.
    HTML:

    <div class=»corners»><div><div><div><div>
         Содержание блока
    </div></div></div></div></div>

    CSS:

    .corners {
          background: #666;
          border: 3px solid #999;
    }
    .corners div {
          background: url(t-l.gif) top left no-repeat;
          position: relative;
          margin: -3px; /* значение указываем равным толщине рамки */
    }
    .corners div div {
          background: url(t-r.gif) top right no-repeat;
          margin: 0px;
    }
    .corners div div div {
          background: url(b-r.gif) bottom right no-repeat;
    }
    .corners div div div div {
          background: url(b-l.gif) bottom left no-repeat;
    }

    Вот как это выглядит(при изменении размера окна выглядит особо хорошо):

    блок с закругленными углами и сплошной рамкой

  • Блок с закругленными углами и сложной художественной рамкой

    Картинки: t-l.gif, t-r.gif, b-r.gif, b-l.gif — всё те же уголки. Рамки также будем вставлять бэкграундами: t.gif(top), r.gif(right), b.gif(bottom), l.gif(left),
    HTML:

    <div class=»borders»><div><div><div><div><div><div><div>
         Содержание блока
    </div></div></div></div></div></div></div></div>

    CSS:

    .borders {
         background: #666 url(t.gif) top repeat-x;
    }
    .borders div {
          background: url(r.gif) right repeat-y;
    }
    .borders div div {
          background: url(b.gif) bottom repeat-x;
    }
    .borders div div div {
         background: url(l.gif) left repeat-y;
    }
    .borders div div div div {
          background: url(t-l.gif) top left no-repeat;
    }
    .borders div div div div div {
          background: url(t-r.gif) top right no-repeat;
    }
    .borders div div div div div div {
          background: url(b-r.gif) bottom right no-repeat;
    }
    .borders div div div div div div div {
          background: url(b-l.gif) bottom left no-repeat;
    }

    Вот как это выглядит:

    блок с закругленными углами и сложной художественной рамкой

  • P.S. На данный момент вышеописанные методы создания закруглённых рамок и уголков являются оптимальными, так как поддерживаются всеми популярными браузерами. В будущем (надеюсь, скором), все популярные браузеры будут поддерживать CSS-свойство border-radius, позволяющее делать закруглённые уголки для любого блока всего одной строчкой в CSS-файле и одним элементом HTML. К сожалению, пока что это только в перспективе.

     

    Треугольник Рэйки

    Эта методика подходит для работы с ситуациями практикующим второй и третьей ступеней Рэйки.

    На первой ступени нет еще инструментов — символов Рэйки.

    Эту технику мне передала мой первый Мастер Рэйки. Благодарность тебе, Леночка. Работает — замечательно. Делюсь с вами, дорогие мои практикующие Рэйки. Пробуйте, задавайте вопросы, если что-то непонятно.

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

    Методика:

    1. На белом нелинованном листе бумаге, на песке, воображаемыми линиями на столе или полу необходимо нарисовать равносторонний треугольник.

    2. Над верхней вершиной треугольника напишите «Высшее Благо Всех».

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

    4. Под правым нижним углом напишите свою просьбу или пожелание, сформулированное по особым правилам.

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

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

    Внимание! Прежде чем делать Треугольник Рэйки, очень важно осознать, готовы ли вы к любому исходу ситуации, готовы ли вы принять тот результат, который будет?

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

    После того как все углы подписаны, заключите треугольник в круг. Круг — это целостность, совершенство, полнота. Но никак не ограничение (как меня кто-то спрашивал из учеников недавно).

    Выполнение техники «Треугольник Рэйки»

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

    2. Изобразите в верхнем углу треугольника 3 символ и произнесите его мантру 3 раза.

    3. В левом нижнем углу треугольника изобразите 1 символ, произнесите его мантру 3 раза.

    4. В правом нижнем углу треугольник изобразите 2 символ, с произнесите его мантру 3 раза.

    Символы рисуйте внутри треугольника, или рисуя последовательно – пишущим предметом (при выполнении на бумаге, песке), ладонью, лучом из третьего глаза или так, как вас обучил Мастер на семинаре.

    5. Давайте Рэйки по 5 минут – в верхний (Высшее Благо Всех), левый нижний (Фамилия, Имя человека, для которого делается треугольник, или «Я», если делается для себя), правый нижний угол, и в центр треугольника (Благоприятное разрешение ситуации).

    6. Затем сложите листочек с треугольником и порвите его на мелкие кусочки или сотрите Треугольник Рэйки с песка, или развейте воображаемый треугольник со стола или с пола.

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

    У вас могут быть разные ощущения, наблюдения при выполнении треугольника. Копите свой собственный опыт, нарабатывайте свою статистику, систему символов.

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

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

    Ведана

     

    Добавить комментарий

    Закрыть меню