之前我曾尝试过问过这个问题,认为使用图像直接达到这一点会更快,但我遇到了麻烦,因为jobworths没有正确地阅读我的问题,并指责我打码为我实际上没有添加任何代码。
所以,这是代码和问题。下面显示了四个框,在拱形设计中展开,但它需要长边,每个框的顶部和底部稍微弯曲,我尝试使用变换:透视(XXpx); [大大增加以查看此示例中是否有任何明显的变化],添加到转换属性中,但它似乎没有给我任何回馈。
任何帮助都会受到赞赏,即使它是“我认为不可能”会有所帮助。我已经在这几个月里接受了这个,我需要继续我的生活......
#boxCap {
position:absolute;
left:80px;
top:20px;
margin: 30px;
padding:40px;
background-color: #EFA7EA;
border-radius: 15px;
border: solid #fff;
width: 150px;
height: 30px;
text-align: center;
font-size: x-large;
color: #fff;
transform-origin: left bottom;
transform: rotate(15deg) skewX(-30deg) skewY(10deg) perspective(40px);
box-shadow: 0 0 15px grey;
}
#boxCIA {
position:absolute;
left:345px;
top:140px;
margin: 30px;
padding:40px;
background-color: #EFA7EA;
border-radius: 15px;
border: solid #fff;
width: 150px;
height: 30px;
text-align: center;
font-size: x-large;
color: #fff;
transform-origin: left bottom;
transform: rotate(6deg) skewX(-10deg) skewY(5deg) perspective(40px);
box-shadow: 0 0 15px grey;
}
#boxCase {
position:absolute;
left:640px;
top:140px;
margin: 30px;
padding:40px;
background-color: #EFA7EA;
border-radius: 15px;
border: solid #fff;
width: 150px;
height: 30px;
text-align: center;
font-size: x-large;
color: #fff;
transform-origin: right bottom;
transform: rotate(-6deg) skewX(10deg) skewY(-5deg) perspective(40px);
box-shadow: 0 0 15px grey;
}
#boxDVD {
position:absolute;
left:900px;
top:20px;
margin: 30px;
padding:40px;
background-color: #EFA7EA;
border-radius: 15px;
border: solid #fff;
width: 150px;
height: 30px;
text-align: center;
font-size: x-large;
color: #fff;
transform-origin: right bottom;
transform: rotate(-15deg) skewX(30deg) skewY(-10deg) perspective(40px);
box-shadow: 0 0 15px grey;
}
<head>
<link rel="stylesheet" href="skew.css" />
</head>
<body>
<div id="boxCap">
Capabilities
</div>
<div id="boxCIA">
Cap in Action
</div>
<div id="boxCase">
Case Studies
</div>
<div id="boxDVD">
DVD
</div>
</body>
答案 0 :(得分:1)
这就是我所谓的SVG火车速成课程!
一旦我弄清楚如何处理SVG,我会再次使用动画和悬停位,除非有人想要插入;)
sizeInPts
答案 1 :(得分:0)
在mozilla border-radius页面https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius上,他们有这个小提琴:
http://jsfiddle.net/Tripad/qnGKj/4/
其中显示带有弯曲边框的框。使用它给出了下面的代码。
#boxCap {
position:absolute;
left:80px;
top:20px;
margin: 30px;
padding:40px;
background-color: #EFA7EA;
border-radius: 50%/15px 15px 25px 25px;
border: solid #fff;
width: 150px;
height: 30px;
text-align: center;
font-size: x-large;
color: #fff;
transform-origin: left bottom;
transform: rotate(15deg) skewX(-30deg) skewY(10deg) perspective(40px);
box-shadow: 0 0 15px grey;
}
#boxCIA {
position:absolute;
left:345px;
top:140px;
margin: 30px;
padding:40px;
background-color: #EFA7EA;
border-radius: 50%/15px 15px 25px 25px;
border: solid #fff;
width: 150px;
height: 30px;
text-align: center;
font-size: x-large;
color: #fff;
transform-origin: left bottom;
transform: rotate(6deg) skewX(-10deg) skewY(5deg) perspective(40px);
box-shadow: 0 0 15px grey;
}
#boxCase {
position:absolute;
left:640px;
top:140px;
margin: 30px;
padding:40px;
background-color: #EFA7EA;
border-radius: 50%/15px 15px 25px 25px;
border: solid #fff;
width: 150px;
height: 30px;
text-align: center;
font-size: x-large;
color: #fff;
transform-origin: right bottom;
transform: rotate(-6deg) skewX(10deg) skewY(-5deg) perspective(40px);
box-shadow: 0 0 15px grey;
}
#boxDVD {
position:absolute;
left:900px;
top:20px;
margin: 30px;
padding:40px;
background-color: #EFA7EA;
border-radius: 50%/15px 15px 25px 25px;
border: solid #fff;
width: 150px;
height: 30px;
text-align: center;
font-size: x-large;
color: #fff;
transform-origin: right bottom;
transform: rotate(-15deg) skewX(30deg) skewY(-10deg) perspective(40px);
box-shadow: 0 0 15px grey;
}
&#13;
<head>
<link rel="stylesheet" href="skew.css" />
</head>
<body>
<div id="boxCap">
Capabilities
</div>
<div id="boxCIA">
Cap in Action
</div>
<div id="boxCase">
Case Studies
</div>
<div id="boxDVD">
DVD
</div>
</body>
&#13;
答案 2 :(得分:0)
部分答案:
您可以使用具有足够大半径的背景径向渐变来伪造弯曲边框。这不是你想要的,但确实相当接近。
我不建议使用它。使文本包装正常工作是一件痛苦的事情,如果你被告知稍后改变元素的大小,那将是一件噩梦。 CSS真的不适合这个。
.curved {
width: 200px;
height: 75px;
background: radial-gradient(circle 1200px at 50% -600px, transparent 630px, red 630px, red 710px, transparent 710px);
padding: 30px;
font-size: 30px;
text-align: center;
}
<div class='curved'>Text</div>
<div class='curved'>Longer text to wrap</div>
答案 3 :(得分:0)
这是一次尝试,使用border-radius
沿每个框的底部实现曲率,然后重叠每个元素顶部的伪元素,这些元素具有相同的形状,只是更大,以采取相似的方式弯曲切出每个盒子的顶部。然后我们只在每个方框的左上角和右上角添加一个更典型的border-radius
来完成外观。
这种方法的优点是文本包装不是真正的问题,因为Gerrit0提到的是他的解决方案的问题。你可以将这些盒子的大小调整到你想要的大小,你应该得到相同的结果(当然也要调整容器的大小)。
我将pointer-events: none
添加到伪元素中,因此伪元素相当大,因此您没有任何不需要的schenenagins。尽管如此,如果你的页面背景中有一个图像或渐变,这可能不会很好地工作,因为我们依靠伪元素与背景颜色相同,以便看起来不可见。
另一个限制是你不能真正做边框,因为顶部边框必须作为伪元素的border-bottom
(因为它们覆盖了div的顶部),但伪更宽比实际的div,所以它看起来不正确。
弯曲文本本身我没有理由,因为它非常复杂,但你可以read about that on CSS Tricks。
正如其他人所说,SVG可能是最简单的解决方案。
.wrapper {
width: 680px;
margin: 0 auto;
display: flex;
justify-content: space-around;
margin-top: 50px;
}
.card {
width: 150px;
height: 80px;
background-color: rgb(243,153,167);
color: rgb(243,243,244);
font-family: Arial;
font-size: 1.33em;
display: flex;
padding: 10px;
box-sizing: border-box;
border-bottom-right-radius: 50% 25%;
border-bottom-left-radius: 50% 25%;
border-top-right-radius: 25%;
border-top-left-radius: 25%;
position: relative;
}
.card::before {
content: "";
display: block;
position: absolute;
top: -85%;
left: -15%;
width: 130%;
height: 100%;
background-color: white; /* same color as your page's background color */
border-bottom-right-radius: 50% 25%;
border-bottom-left-radius: 50% 25%;
pointer-events: none;
}
.card:nth-child(1) {
transform: rotateZ(20deg) translateY(-20%);
}
.card:nth-child(2) {
transform: rotateZ(5deg) translateY(35%);
}
.card:nth-child(3) {
transform: rotateZ(-5deg) translateY(35%);
}
.card:nth-child(4) {
transform: rotateZ(-20deg) translateY(-20%);
}
.card span {
display: block;
margin: auto;
text-align: center;
}
<div class="wrapper">
<div class="card"><span>Capabilities</span></div>
<div class="card"><span>Capabilities in Action</span></div>
<div class="card"><span>Case Studies</span></div>
<div class="card"><span>DVD</span></div>
</div>