Подтвердить что ты не робот

CSS только сложенный угол Div

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

У меня есть div, который должен быть шириной жидкости, и его высота также должна быть переменной.

Развертывание сидит поверх фонового изображения, выполненного в виде плитки. Он имеет 1px border вокруг него.

Мне нужно, чтобы нижний правый край div складывался, как лист бумаги.

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

Я пробовал этот метод, но для этого требуется сплошной цвет фона. У меня есть повторяющееся изображение.

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

background:
    linear-gradient(45deg,  rgba(255,0,0,0.4), rgba(255,0,0,0.4)),
    linear-gradient(135deg, rgba(255,0,0,0.4), rgba(255,0,0,0.4)),
    linear-gradient(225deg, transparent 10px,  rgba(255,0,0,0.4)
background-size: 14px 14px, 50% 100%, 50% 50%, 50% 50%;
background-position: 100% 0, 0 0, 100% 100%, 100% 0;
background-repeat: no-repeat;

//then an :after pseudo class to create the corner fold

Любая помощь будет принята с благодарностью. Спасибо.

4b9b3361

Ответ 1

Этот вопрос заставлял меня работать в течение некоторого времени, это, по-видимому, очень сложно сделать только с CSS. Мне удалось добиться эффекта (бумага перевернулась с рамкой вокруг элемента), которую вы хотели, но для этого требуется много CSS, и я не знаю, как далеко вы хотите идти. Я применил border-radius в верхнем правом углу и использовал треугольник для перекрытия радиуса границы. Это не покрывало всего border radius, поэтому я использовал span для формирования 2 фигур для наложения оставшегося промежутка.

Посмотрите на эту скрипку для результата, любые улучшения приветствуются

http://jsfiddle.net/EnVnW/

CODE:

body {
    background: #444 url('http://leaverou.me/ft2010/img/darker_wood.jpg') bottom;
}

.arrow_box {
    color:red;
    position: relative;
    background: #88b7d5;
    border: 4px solid #c2e1f5;
    height:400px;
    border-radius:0 300px 0 0; /* here we give the box a round corner on the top right side */
}

.arrow_box:after, .arrow_box:before { /* we create 2 triangles in the top right corner, one for the border and one for the filling */
    -ms-transform:rotate(-135deg); /* rotate to make the triangle have the right angle */
    -webkit-transform:rotate(-135deg); 
     transform:rotate(-135deg);
    bottom: 100%;
    border: solid transparent;
    content: " ";
    height: 0;
    width: 0;
    position: absolute;
    top:42px;
    right:-20px;
}

/* here we position the triangles in the top right corner */
.arrow_box:after {
    border-color: rgba(200, 265, 0, 0);
    border-bottom-color: #00b7d5;
    border-width: 100px;
    left: 100%;
    margin-left: -240px;
}
.arrow_box:before {
    border-color: rgba(194, 225, 245, 0);
    border-bottom-color: #c2e1f5;
    border-width: 105px;
    left: 100%;
    top:39px;
    margin-left: -245px;
}

/* we still have a massive gap next to the triangle, so we fill it up with 2 rectangles. One on the left side of the triangle and one on the bottom side of the triangle, we also will give them a border to finish the line around the element */
.arrow_box span {
    border-top: 4px solid #c2e1f5;
    position:absolute;
    width:150px;
    height:140px;
    background-color:black;
    right:140px;
    top:-4px;
    background: #88b7d5;
}

.arrow_box span:after {
    border-right: 4px solid #c2e1f5;  
    content: "";
    position:absolute;
    width:150px;
    height:150px;
    background: #88b7d5;
    left:140px;
    top:140px;
}

С CSS4 это будет намного легче сделать, здесь вы можете прочитать об этом;

http://dev.w3.org/csswg/css-backgrounds-4/#border-corner-shape