Смежные div с угловыми границами?

Я хочу создать два div, которые плавают слева друг от друга, но с наклонной угловой границей, разделяющей их. Я прикрепил картинку, чтобы продемонстрировать, что я имею в виду.

Кто-нибудь знает, возможно ли что-то подобное с помощью CSS (я думаю, отсекая содержимое с помощью overflow: hidden)

смежный div с наклонной стороной

Эти div должны содержать изображения, обрезанные границей, вот пример:

divs с изображениями и наклонными смежными сторонами


person Mark    schedule 12.05.2012    source источник
comment
Какие браузеры вам нужно поддерживать? Вам нужна поддержка старых версий IE?   -  person thirtydot    schedule 13.05.2012
comment
@thirtydot не нужно поддерживать старый IE :)   -  person Mark    schedule 13.05.2012


Ответы (3)


Попробуй это

.left, .right {
  position: relative;
  height: 100px;
  width: 200px;
  background: #000;
  float: left;
}

.left:after {
  content: '';
  line-height: 0;
  font-size: 0;
  width: 0;
  height: 0;
  border-top: 100px solid #000;
  border-bottom: 50px solid transparent;
  border-left: 0px solid transparent;
  border-right: 50px solid transparent;
  position: absolute;
  top: 0;
  right: -50px;
}

.right {
  margin-left: 60px;
  width: 100px;
}

.right:before {
  content: '';
  line-height: 0;
  font-size: 0;
  width: 0;
  height: 0;
  border-top: 50px solid transparent;
  border-bottom: 100px solid #000;
  border-left: 50px solid transparent;
  border-right: 0px solid #000;
  position: absolute;
  top: -50px;
  left: -50px;
}
<div class="left"> </div>
<div class="right"> </div>


ОБНОВИТЬ с изображениями

.left, .right {
    background: #000 url('http://lorempixel.com/300/100');
    position: relative;
    height: 100px;
    width: 250px;
    float: left;
}

.left:after {
    content: '';
    line-height: 0;
    font-size: 0;
    width: 0;
    height: 0;
    border-top: 50px solid transparent;
    border-bottom: 100px solid #fff;
    border-left: 30px solid transparent;
    border-right: 0 solid #fff;
    position: absolute;
    top: -50px;
    right: 0;
}

.right {
    background: #000 url('http://lorempixel.com/200/100');
    width: 150px;
}

.right:before {
    content: '';
    line-height: 0;
    font-size: 0;
    width: 0;
    height: 0;
    border-top: 100px solid #fff;
    border-bottom: 50px solid transparent;
    border-left: 0px solid transparent;
    border-right: 30px solid transparent;
    position: absolute;
    top: 0;
    left: 0;
}
<div class="left"> </div>
<div class="right"> </div>

person Zoltan Toth    schedule 13.05.2012
comment
выглядит хорошо, но есть один нюанс. Я действительно хочу, чтобы в div было изображение, которое будет обрезано угловым полем. Когда я добавляю фотографию в ваш код, она не поддерживает угол :( - person Mark; 13.05.2012
comment
этого не было в требованиях :) - person Zoltan Toth; 13.05.2012
comment
вы правы, я обновил исходный пост, чтобы лучше описать то, что я искал. Спасибо за попытку! - person Mark; 13.05.2012
comment
Это наркоман. Отличная работа - person Blaine Kasten; 26.08.2014
comment
Это здорово, но как отредактировать этот код, чтобы он работал с плавной высотой? Итак, если левый div имеет 2 абзаца текста (длина которых может меняться), как вы гарантируете, что угол остается на 100% высоте? В настоящее время это не так. - person egr103; 23.02.2016

Все решения до сих пор зависят от наличия действительно толстой угловой границы для разделения фотографий.

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

Вот CodePen http://cdpn.io/azvsA, но суть в следующем:

.container {
  border-right: 10px solid white;
  overflow: hidden;
  transform (skewX(-20deg));
}

.image {
  transform (skewX(20deg));
}
person Jeff Lupinski    schedule 31.03.2014
comment
у этого есть недостаток, заключающийся в том, что левая сторона и правая внешняя сторона также расположены под углом, см. imgur.com/a/3gYE3s5 - person TeaTime; 20.02.2020

Вы можете написать так:

.left, .right {
    background: #000 url('http://lorempixel.com/300/100');
    position: relative;
    height: 100px;
    width: 250px;
    float: left;
}
.left{
    z-index:1;
}
.parent{
    overflow:hidden;
}

.right {
    background: #000 url('http://lorempixel.com/200/100');
    width: 150px;
}
.left:after{
    content:'';
    position:absolute;
    border-right:20px solid #fff;
    top:-25px;
    bottom:-10px;
    left:0;
    right:-10px;
    -moz-transform:rotate(10deg);
    -webkit-transform:rotate(10deg);
}

Проверьте это http://jsfiddle.net/EJxFg/4/.

person sandeep    schedule 13.05.2012