Как создать форму треугольника в верхнем правом углу другого div, чтобы выглядеть разделенным по границе

Я хочу создать форму, как на этой картинке:

shape

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

Должен ли я "вырезать" левый div, чтобы он оставался серой границей и выглядел отделенным от зеленого треугольника?

Есть ли идеи, как это сделать?

РЕДАКТИРОВАТЬ:

  1. Я использую фиксированную навигационную панель на странице, поэтому, когда я прокручиваю, если div - позиция: абсолютная, панель навигации идет за div.
  2. пространство между зеленым треугольником и остальным div должно быть прозрачным, потому что я использую изображение в качестве фона страницы

Ответ 1

Я бы предложил, учитывая следующую наценку:

#box {
    width: 10em;
    height: 6em;
    border: 4px solid #ccc;
    background-color: #fff;
    position: relative;
}

#box::before,
#box::after {
    content: '';
    position: absolute;
    top: 0;
    right: 0;
    border-color: transparent;
    border-style: solid;
}

#box::before {
    border-width: 1.5em;
    border-right-color: #ccc;
    border-top-color: #ccc;
}

#box::after {
    border-radius: 0.4em;
    border-width: 1.35em;
    border-right-color: #0c0;
    border-top-color: #0c0;
}
<div id="box"></div>

Ответ 2

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

HTML

<div class="container">
    <div class="inner-triangle"></div>
    <div class="outer-triangle"></div>
</div>

CSS

.container{
    border: 2px solid gray;
    position: relative;
    height: 100px;
}

.inner-triangle{
    border-left: 20px solid transparent;
    border-right: 20px solid green;
    border-bottom: 20px solid transparent;
    height: 0;
    width: 0;
    position: absolute;
    right: 0px;
    z-index: 2;
}

.outer-triangle{
    border-left: 22px solid transparent;
    border-right: 22px solid gray;
    border-bottom: 22px solid transparent;
    height: 0;
    width: 0;
    position: absolute;
    right: 0px;
    z-index: 1;
}

JS Fiddle: http://jsfiddle.net/u8euZ/1

Ответ 3

Вы можете использовать псевдо-элемент rotate в сочетании с overflow:hidden для родителя.

Отсюда вы можете позиционировать псевдо в верхнем правом position:absolute используя position:absolute и вы должны быть хорошими!

div {
  height: 250px;
  width: 300px;
  background: lightgray;
  border-radius: 10px;
  border: 5px solid dimgray;
  position: relative;
  overflow: hidden;
  margin: 30px auto;
}
div:before {
  content: "";
  position: absolute;
  top: -60px;
  right: -60px;
  height: 100px;
  width: 100px;
  background: green;
  border: 5px solid dimgray;
  transform: rotate(45deg);
}

/***********FOR DEMO ONLY*******************/


html, body {
    margin:0;
    padding:0;height:100%;
    vertical-align:top;overflow:hidden;
    background: rgb(79, 79, 79);
    background: -moz-radial-gradient(center, ellipse cover, rgba(79, 79, 79, 1) 0%, rgba(34, 34, 34, 1) 100%);
    background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, rgba(79, 79, 79, 1)), color-stop(100%, rgba(34, 34, 34, 1)));
    background: -webkit-radial-gradient(center, ellipse cover, rgba(79, 79, 79, 1) 0%, rgba(34, 34, 34, 1) 100%);
    background: -o-radial-gradient(center, ellipse cover, rgba(79, 79, 79, 1) 0%, rgba(34, 34, 34, 1) 100%);
    background: -ms-radial-gradient(center, ellipse cover, rgba(79, 79, 79, 1) 0%, rgba(34, 34, 34, 1) 100%);
    background: radial-gradient(ellipse at center, rgba(79, 79, 79, 1) 0%, rgba(34, 34, 34, 1) 100%);
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#4f4f4f', endColorstr='#222222', GradientType=1);
}
<div></div>