Ответ 1
Иллюзия этого возможна: http://jsfiddle.net/2hCrw/4/
Протестировано: IE 9, 10, Firefox, Chrome, Safari на ПК и iPad.
-
::before
и::after
псевдоэлементы перекошены для обеспечения каждой стороны треугольника. - Обертка, используемая для обрезания перекошенных псевдоэлементов. Вы можете избежать этого, используя внешний контейнер в качестве оболочки.
- Элементы все еще могут быть оформлены с помощью границ, теней и т.д.
- Все, что внизу, будет отображаться правильно.
Демо с границами и тени: http://jsfiddle.net/2hCrw/8/
В этой демонстрации также добавлена настройка для iPad с сетчаткой, чтобы предотвратить разрыв между элементом и псевдоэлементами (вызванными отбрасыванием тени или подпиксельной обработкой).
<div id="wrapper">
<div id="test">test</div>
</div>
#wrapper {
overflow: hidden;
height: 116px;
}
#test {
height: 100px;
background-color: #ccc;
position: relative;
}
#test::before {
content:"";
position: absolute;
left: -8px;
width: 50%;
height: 16px;
top: 100px;
background-color: #ccc;
-webkit-transform: skew(-40deg);
-moz-transform: skew(-40deg);
-o-transform: skew(-40deg);
-ms-transform: skew(-40deg);
transform: skew(-40deg);
}
#test::after {
content:"";
position: absolute;
right: -8px;
width: 50%;
height: 16px;
top: 100px;
background-color: #ccc;
-webkit-transform: skew(40deg);
-moz-transform: skew(40deg);
-o-transform: skew(40deg);
-ms-transform: skew(40deg);
transform: skew(40deg);
}
В качестве альтернативы вы можете использовать прозрачное изображение и "расширить" элемент над ним с помощью псевдоэлементов. Я ответил на аналогичный вопрос в отношении круга, отрезанного от элемента, и показывал варианты поддержки до IE7 (а также будущие варианты истинного отсечения/маскирования в CSS).