Вопрос по html, css, css3, css-shapes – Как создать форму треугольника в верхнем правом углу другого элемента div, чтобы он выглядел разделенным границей

26

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

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

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

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

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

Я использую фиксированную панель навигации на странице, поэтому, когда я прокручиваю, если div это позиция: абсолютная, панель навигации идет позади div.пространство между зеленым треугольником и остальной частью div должно быть прозрачным, потому что я использую изображение в качестве фона страницы
я знаю, как создать треугольник, я создал его, но я не знаю, как сделать так, чтобы он выглядел отделенным от левого div (и оставил div, чтобы сохранить его серую рамку) Ian J
Проверь этоcss-tricks.com/snippets/css/css-triangle Vivek Vikranth

Ваш Ответ

3   ответа
42

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

<div id="box"></div>

CSS:

#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;
}

JS Fiddle demo.

Ну, кажется, это не работает должным образом :( 1. Граница между зеленым треугольником и белым квадратом не может совпадать с фоном тела (изображением) страницы, поэтому она не выглядит отдельной. 2. Я установил панель навигации на страница, поэтому, когда я прокручиваю вниз панель навигации, идет за этим div :( Ian J
I думать что явноz-index (настройка навигации выше, чем уdiv и треугольник) должны решить первую часть требований, добавленных к вашему вопросу; Что касается прозрачности, которая вам нужна (предположительно вместо серой границы?), я не думаю, что пока есть какой-либо способ решить эту проблему. Я боюсь, что я не могу разработать этот ответ, чтобы он вам пригодился = ( David Thomas
@DavidThomas вы можете объяснить, как это работает? CodyBugstein
это оно. Спасибо :) Ian J
Добро пожаловать, спасибовы! знак равно David Thomas
4

элемент 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

Отличное решение! Я использовал ваш код, чтобы создать красивый верхний правый угол, чтобы выделить некоторые элементы. Спасибо, что поделился. Fel
1

overflow:hidden на родителя.

Отсюда вы можете расположить псевдо в верхнем правом углу, используя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>

Похожие вопросы