нарисуйте угловую сторону / параллелограмм с помощью CSS
нужно нарисовать угловые стороны меню как
внутренним содержанием могут быть некоторые метки или ссылки.
3 ответов
как насчет использования CSS3 transform skew
?
.shape {
width: 200px;
height: 50px;
-webkit-transform: skew(30deg);
-moz-transform: skew(30deg);
transform: skew(30deg);
background: #000;
margin: 20px;
}
нечего тут объяснять, это просто div
элемент, который я исказил 30deg
что приведет к форме, которую вы ожидали.
Примечание: это свойство CSS3, поэтому старые браузеры, а также IE испортят ваши вещи, убедитесь, что вы используете С помощью CSS3 пирог.
другой способ достичь этого - используя :after
и :before
псевдо и CSS треугольники вместе с content
собственность.
демо 2 (сохраненные красные треугольники для демонстрационных целей)
демо 3 (Цвет Изменен)
демо 4 (как вы прокомментировали, вам нужно использовать top: 0;
на :before
и :after
псевдо, потому что, когда вы добавляете текст, он будет сдвигать оба треугольника сверху. Так inorder, чтобы предотвратите это, используйте top: 0;
)
здесь я использую простой div
элемент и размещение 2 CSS треугольников, которые являются positioned absolute
в контейнер. Это более совместимо, чем выше, если вы собираетесь для решения не CSS3, вы можете выбрать это. Убедитесь, что вы используете display: block;
на :before
а также :after
. И, конечно, вы можете объединить общие стили, но я сохранил оба отдельно, чтобы вы могли легко настроить их отдельно.
.shape {
width: 200px;
height: 50px;
background: #000;
margin: 50px;
position: relative;
}
.shape:before {
display: block;
content: "";
height: 0;
width: 0;
border: 25px solid #f00;
border-bottom: 25px solid transparent;
border-left: 25px solid transparent;
position: absolute;
left: -50px;
}
.shape:after {
display: block;
content: "";
height: 0;
width: 0;
border: 25px solid #f00;
border-top: 25px solid transparent;
border-right: 25px solid transparent;
position: absolute;
right: -50px;
}
HTML-код
<div class="shape">
<div class="text">
text goes here
</div>
</div>
в CSS
.shape {
width: 200px;
height: 30px;
-webkit-transform: skew(30deg);
-moz-transform: skew(30deg);
transform: skew(30deg);
background: #000;
margin: 20px;
color:#fff;
}
.text{
width: 150px;
height: 30px;
margin:0px auto;
-webkit-transform: skew(-30deg);
-moz-transform: skew(-30deg);
transform: skew(-30deg);
color:#fff;
}
одна из основных проблем, которую я имею с использованием треугольных границ, заключается в том, что нет простого способа иметь несколько треугольников с разными цветами, даже используя javascript [потому что JS не может получить доступ к псевдо-элементам :до и :после], альтернативой является то, что я использую 3 divs, выравниваю их должным образом и даю им все тот же цвет и т. д... Слишком много хлопот.
на лучшие способ использования transform: skew()
для новых браузеров.
но нужно иметь в виду, что это преобразует в каждом элементе внутри этого div, а также. Таким образом, текст в строке меню также будет искажен. Чтобы противостоять этому, добавьте обратный наклон на внутреннем div, как это:
.menu-container {
...
transform: skewX(30deg);
...
}
.menu-inner {
...
transform: skewX(-30deg);
...
}
весело экспериментировать... :)