В CSS Tricks есть множество различных форм CSS - Формы CSS, и я особенно озадачен треугольником:
#triangle-up {
width: 0;
height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-bottom: 100px solid red;
}
<div id="triangle-up"></div>
Как и почему это работает?
css
geometry
polygon
css-shapes
Станислав Шабалин
источник
источник
Ответы:
CSS Triangles: трагедия в пяти действиях
Как сказал Алекс , границы одинаковой ширины прилегают друг к другу под углом 45 градусов:
Когда у вас нет верхней границы, это выглядит так:
Тогда вы даете ему ширину 0 ...
... и высота 0 ...
... и, наконец, вы сделаете две боковые границы прозрачными:
Это приводит к треугольнику.
источник
:before
или:after
псевдо-классы.left-border
иright-border
равнобедренным треугольником можно сделать. И когда много треугольников объединены ... jsfiddle.net/zRNgzГраницы используют угловой край, где они пересекаются (угол 45 ° с границами равной ширины, но изменение ширины границ может искажать угол).
Посмотрите на jsFiddle .
Скрывая определенные границы, вы можете получить эффект треугольника (как вы можете видеть выше, делая разные части разными цветами).
transparent
часто используется в качестве цвета края для достижения треугольной формы.источник
Начните с основного квадрата и границ. Каждой границе будет присвоен свой цвет, чтобы мы могли различить их:
что дает вам это :
Но верхняя граница не нужна, поэтому установите ее ширину
0px
. Теперь наша граница снизу200px
сделает наш треугольник высотой 200 пикселей.и мы получим это :
Затем, чтобы скрыть два боковых треугольника, установите цвет границы на прозрачный. Так как верхняя граница была эффективно удалена, мы также можем установить прозрачный цвет верхней границы.
наконец мы получаем это :
источник
There's another way to draw ..
, который оказывается таким же образом :) Хорошее объяснение, хотяДругой подход:
CSS3 треугольники с преобразованием поворота
Треугольную форму довольно легко сделать с помощью этой техники. Для людей, которые предпочитают видеть анимацию, объясняющую, как работает эта техника, вот она:
В противном случае, здесь подробно объясняется в 4 актах (это не трагедия), как сделать равнобедренный прямоугольный треугольник с одним элементом.
<div class="tr"></div>
ШАГ 1: Сделать Div
Просто, просто убедитесь
width = 1.41 x height
. Вы можете использовать любую технику ( см. Здесь ), включая использование процентов и отступа для поддержания соотношения сторон и создания адаптивного треугольника . На следующем изображении div имеет золотисто-желтую рамку.В этот div вставьте псевдоэлемент и задайте ему 100% ширину и высоту родительского элемента. Псевдоэлемент имеет синий фон на следующем изображении.
На данный момент у нас есть этот CSS :
ШАГ 2 : Давайте вращаться
Во-первых, самое важное: определить источник преобразования . Источник по умолчанию находится в центре псевдоэлемента, и он нам нужен внизу слева. Добавив этот CSS к псевдоэлементу:
transform-origin:0 100%;
илиtransform-origin: left bottom;
Теперь мы можем повернуть псевдоэлемент на 45 градусов по часовой стрелке с помощью
transform : rotate(45deg);
На данный момент у нас есть этот CSS :
ШАГ 3: скрыть это
Чтобы скрыть ненужные части псевдоэлемента (все, что переполняет div с желтой рамкой), вам просто нужно установить
overflow:hidden;
контейнер. убрав желтую рамку, вы получите ... ТРЕУГОЛЬНИК ! :DEMO
CSS:
ШАГ 4: идти дальше ...
Как показано в демо , вы можете настроить треугольники:
skewX()
.Зачем использовать эту технику?
Почему бы не использовать эту технику?
источник
skewX
было бы полезно упомянуть, как были получены различные ширины для использования с .Вот анимация в JSFiddle, которую я создал для демонстрации.
Также см. Фрагмент ниже.
Это анимированный GIF из скринкаста
Показать фрагмент кода
Случайная версия
Показать фрагмент кода
Все сразу версия
Показать фрагмент кода
источник
Допустим, у нас есть следующий div:
Теперь измените CSS шаг за шагом, чтобы вы получили четкое представление о том, что происходит вокруг
ШАГ 1: JSfiddle Link:
Это простой div. С очень простым CSS. Так что непрофессионал может понять. Div имеет размеры 150 х 150 пикселей с границей 50 пикселей. Изображение прилагается:
ШАГ 2: JSfiddle Link:
Теперь я просто изменил цвет границы всех четырех сторон. Изображение прилагается.
ШАГ: 3 JSfiddle Ссылка:
Теперь я просто изменил высоту и ширину div с 150 пикселей на ноль. Изображение прикреплено
ШАГ 4: JSfiddle:
Теперь я сделал все границы прозрачными, кроме нижней границы. Изображение прикреплено ниже.
ШАГ 5: JSfiddle Link:
Теперь я просто изменил цвет фона на белый. Изображение прилагается.
Следовательно, мы получили треугольник, в котором мы нуждались.
источник
А теперь что-то совершенно другое ...
Вместо использования трюков css не забывайте о таких простых решениях, как html-сущности:
Результат:
▲
Смотрите: что такое сущности HTML для треугольников вверх и вниз?
источник
Рассмотрим ниже треугольник
Это то, что нам дают:
Почему так получилось? Приведенная ниже диаграмма поясняет размеры, обратите внимание, что 15px был использован для нижней границы и 10px был использован для левой и правой.
Сделать прямоугольный треугольник довольно просто, удалив правую границу.
источник
Сделав еще один шаг вперед, используя css на основе этого, я добавил стрелки к кнопкам «Назад» и «Далее» (да, я знаю, что это не 100% кросс-браузер, но, тем не менее, приятный ход).
источник
Хорошо, этот треугольник будет создан из-за способа, которым границы элементов работают вместе в HTML и CSS ...
Поскольку мы обычно используем границы размером 1 или 2 пикселя, мы никогда не замечаем, что границы образуют углы 45 ° друг к другу с одинаковой шириной, и если ширина изменяется, также изменяется степень угла, запустите код CSS, который я создал ниже:
Затем на следующем шаге у нас нет никакой ширины или высоты, что-то вроде этого:
И теперь мы делаем левую и правую границы невидимыми, чтобы сделать желаемый треугольник, как показано ниже:
Если вы не хотите запускать фрагмент для просмотра шагов, я создал последовательность изображений, чтобы просмотреть все шаги в одном изображении:
источник
Другой подход. С линейным градиентом (для IE только IE 10+). Вы можете использовать любой угол:
Вот jsfiddle
источник
CSS
clip-path
Я чувствую, что этот вопрос упущен;
clip-path
clip-path
будет использовать сам элемент, а не его границы, чтобы вырезать форму, указанную в его параметрах. Он использует очень простую систему координат, основанную на процентах, что делает его редактирование очень простым и означает, что вы можете подобрать его и создать странные и прекрасные формы за считанные минуты.Пример формы треугольника
нижняя сторона
В настоящий момент у него есть существенный недостаток, один из которых заключается в том, что он в значительной степени не поддерживается, он действительно распространяется только на
-webkit-
браузеры и не имеет поддержки в IE и лишь частично в FireFox.Ресурсы
Вот некоторые полезные ресурсы и материалы, которые помогут лучше понять,
clip-path
а также начать создавать свои собственные.clip-path
генераторclip-path
Документация MDNclip-path
Поддержка браузераисточник
Это старый вопрос, но я думаю, что стоит поделиться, как создать стрелку, используя эту технику треугольника.
Шаг 1:
Давайте создадим 2 треугольника, для второго мы будем использовать
:after
псевдокласс и расположим его чуть ниже другого:Шаг 2
Теперь нам просто нужно установить преобладающий цвет границы второго треугольника на тот же цвет фона:
Показать фрагмент кода
Поиграй со всеми стрелками:
http://jsfiddle.net/tomsarduy/r0zksgeu/
источник
SASS (SCSS) треугольник миксин
Я написал это, чтобы было проще (и СУХОЙ) автоматически генерировать треугольник CSS:
пример использования:
Страница детской площадки
Важное примечание:
если треугольник в некоторых браузерах кажется пиксельным , попробуйте один из методов, описанных здесь .
источник
Если вы хотите применить границу к треугольнику, прочитайте это: Создать треугольник с помощью CSS?
Почти все ответы сосредоточены на треугольнике, построенном с использованием рамки, поэтому я собираюсь разработать
linear-gradient
метод (как и началось в ответе @lima_fil ).Использование значения степени как
45°
заставит нас уважать определенное соотношениеheight/width
, чтобы получить желаемый треугольник, и это не будет отзывчивым:Показать фрагмент кода
Вместо того, чтобы делать это, мы должны рассмотреть предопределенные значения направления, такие как
to bottom
,to top
и т. Д. В этом случае мы можем получить любую форму треугольника, сохраняя его отзывчивость.1) Прямоугольный треугольник
Для получения такого треугольника , нам нужно один линейного градиент и-диагональное направление , как
to bottom right
,to top left
,to bottom left
, и т.д.Показать фрагмент кода
2) равнобедренный треугольник
Для этого нам понадобятся 2 линейных градиента, как указано выше, и каждый из них займет половину ширины (или высоты). Как будто мы создаем зеркальное отражение первого треугольника.
Показать фрагмент кода
3) равносторонний треугольник
С этим немного сложно справиться, так как нам нужно поддерживать соотношение между высотой и шириной градиента. У нас будет тот же треугольник, что и выше, но мы усложним вычисление, чтобы преобразовать равнобедренный треугольник в равносторонний.
Чтобы упростить это, мы будем считать, что ширина нашего div известна, а высота достаточно велика, чтобы можно было нарисовать наш треугольник внутри (
height >= width
).У нас есть два градиента,
g1
аg2
синяя линия - это ширина,div
w
и каждый градиент будет иметь 50% (w/2
), и каждая сторона треугольника должна быть равнаw
. Зеленая линия - высота обоих градиентов,hg
и мы можем легко получить формулу ниже:(w/2)² + hg² = w²
--->hg = (sqrt(3)/2) * w
--->hg = 0.866 * w
Мы можем положиться на то
calc()
, чтобы сделать наш расчет и получить нужный результат:Показать фрагмент кода
Другой способ - контролировать высоту div и сохранять синтаксис градиента легким:
Показать фрагмент кода
4) Случайный треугольник
Чтобы получить случайный треугольник, это легко, так как нам просто нужно удалить условие 50% каждого из них, НО мы должны сохранить два условия (оба должны иметь одинаковую высоту, а сумма ширины должна составлять 100%).
Показать фрагмент кода
Но что, если мы хотим определить значение для каждой стороны? Нам просто нужно сделать расчет еще раз!
Давайте определим
hg1
иhg2
как высоту нашего градиента (оба равны красной линии) тогдаwg1
иwg2
как ширину нашего градиента (wg1 + wg2 = a
). Я не буду вдаваться в подробности расчетов, но в конце мы получим:Теперь мы достигли предела CSS, так как даже с этим
calc()
мы не сможем реализовать это, поэтому нам просто нужно собрать конечный результат вручную и использовать его как фиксированный размер:Показать фрагмент кода
бонус
Мы не должны забывать, что мы также можем применять вращение и / или наклон, и у нас есть больше возможностей, чтобы получить больше треугольника:
Показать фрагмент кода
И, конечно, мы должны иметь в виду решение SVG, которое может быть более подходящим в некоторых ситуациях:
Показать фрагмент кода
источник
вот еще одна скрипка:
https://jsfiddle.net/qdhvdb17/
источник
Другие уже объяснили это хорошо. Позвольте мне дать вам анимацию, которая объяснит это быстро: http://codepen.io/chriscoyier/pen/lotjh
Вот код, с которым вы можете поиграть и изучить концепции.
HTML:
CSS:
Поиграй с этим и посмотри что получится. Установите высоту и ширину на ноль. Затем удалите верхнюю границу и сделайте левый и правый прозрачным, или просто посмотрите на код ниже, чтобы сделать треугольник CSS:
источник
Если вы хотите , чтобы играть с
border-size
,width
иheight
увидеть , как те могут создавать различные формы, попробуйте следующее:источник
Попробуй это:-
источник
Я знаю, что это старый, но я хотел бы добавить к этому обсуждению, что есть по крайней мере 5 различных методов для создания треугольника, используя только HTML и CSS.
borders
linear-gradient
conic-gradient
transform
иoverflow
clip-path
Я думаю, что все было рассмотрено здесь, кроме метода 3, с использованием
conic-gradient
, поэтому я поделюсь этим здесь:источник