11

因此,我一直在网上尝试几种不同的方法,但无法使任何工作。

我有一个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

任何帮助将不胜感激。谢谢。

4

1 回答 1

4

这个问题让我忙了一段时间,这似乎是只用 CSS 做的一件非常困难的事情。我设法实现了你想要的效果(在元素周围有边框的纸张翻转),但它需要大量的 CSS,我不知道你想走多远。我应用border-radius到右上角并使用三角形重叠边界半径。这并没有覆盖整个border radius,所以我用 aspan形成 2 个形状来覆盖剩余的间隙。

看看这个小提琴的结果,欢迎任何改进

http://jsfiddle.net/EnVnW/

代码:

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

于 2013-06-24T09:23:39.697 回答