CSS:如何在div的右侧添加倾斜边缘,具有完整的浏览器交叉兼容性?

时间:2016-12-29 21:52:44

标签: css

我希望在我的div上获得倾斜的边缘。我遇到的问题是我发现完成此操作的简单代码不是跨浏览器兼容的。事实上,它只在Chrome中显示。

任何人都可以建议如何执行以下操作,以便它适用于所有浏览器:

clip-path:polygon(0 0, 70% 0, 100% 100%, 0 100%);

这种效果会实现:

Desired slant

这是我的整个CSS代码:

.my-slanted-div {
    position:absolute;
    bottom:0;
    left:0;
    width:100px;
    padding:10px 10px;
    background-color:#eee;
    font-size:20px;
    clip-path:polygon(0 0, 70% 0, 100% 100%, 0 100%);
}

任何人都可以帮助我吗?

6 个答案:

答案 0 :(得分:3)

你也可以扭曲伪元素,如下所示:



.my-slanted-div {
    position:absolute;
    bottom:40px;
    left:0;
    width:80px;
    padding:10px 10px;
    background-color:red;
    font-size:20px;
   
  
   
}
.my-slanted-div:after {
  width:50px;
  background:red;
  position:absolute;
  height:100%;
 
  content:' ';
  right:-22px;
  top:0;
transform: skew(45deg);
}

<div class="my-slanted-div">
TEXT
</div>
&#13;
&#13;
&#13;

P.S。改变角度,玩价值......以获得理想的结果......

编辑:上下文中的演示 - &gt; https://jsfiddle.net/Lbwj40mg/2/

答案 1 :(得分:1)

最有可能的是SVG缩放以始终适合其文本,这是一种简单快捷的方法;如果你必须使用CSS,那么你可以随时:

  • 将渐变设置为从颜色到透明的div,以便它占据div的大部分,并且颜色的转换是突然的,并且不像普通渐变看起来那样平滑。

  • 创建另一个div并使用边框创建一个三角形来触摸另一个主矩形div,例如:

    .triangle { width: 0; height: 0; border-style: solid; border-width: 200px 200px 0 0; border-color: #fff transparent transparent transparent; }

答案 2 :(得分:1)

这应该可以使用边框。

<div id="container">
  <p id="text">Hello</p>
  <div id="slanted"></div>
</div>

#container {
  position: relative;
  height: 200px;
  width: 200px;
  background:url(http://placehold.it/200x200);
}

#text {
  position: absolute;
  bottom: 15px;
  left: 10px;
  z-index: 1;
  margin: 0;
}

#slanted {
  position: absolute;
  bottom: 0;
  left: 0;
  height: 0;
  width: 0;
  border-left: 75px solid #dedede;
  border-right: 50px solid transparent;
  border-bottom: 50px solid #dedede;
}

jsfiddle

答案 3 :(得分:1)

我已经通过以下方式使其工作:在和之前:你需要更新宽度,高度和行高以适应你想要的标签大小;矩形必须与:before和:after位的高度相同才能看起来干净。

.box {
  background: red;
  width: 200px;
  position: relative;
  height: 100px;
  line-height: 100px;
  text-align: center;
  margin-left: 50px;
  color: white;
  font-size: 21px;
  font-family: arial, sans-serif;
}
.box:after {
  position: absolute;
  right: -50px;
  content: '';
  width: 0;
  height: 0;
  border-left: 50px solid transparent;
  border-right: 50px solid transparent;
  border-bottom: 100px solid red;
}
.box:before {
  position: absolute;
  left: -50px;
  content: '';
  width: 0;
  height: 0;
  border-left: 50px solid transparent;
  border-right: 50px solid transparent;
  border-bottom: 100px solid red;
}
<div class="box">
Text in the box
</div>

答案 4 :(得分:1)

这是一种使用transform的方法:只需旋转即可添加到列表中。非常讨厌,因为你必须使用像素进行对齐,并为不同屏幕尺寸的@media规则制作一些条目。但它应该是相当跨浏览器友好(但可能不是歌剧迷你)

body {
  background-color: #333;
}
.container {
  position: absolute; /* needs a position, relative is fine. abolsute just for this example */
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: 400px;
  height: 200px;
  background-color: #ccc;
  overflow: hidden; /* required */
}

.salutations {
  position: absolute;
  bottom: 0;
  left: 0;
  padding: 0 10px 0 15px;
  background-color: #fcfcfc;
  height: 50px;
  line-height: 50px; /* match height to vertically center text */
  font-size: 30px;

}
.salutations::before {
  content: '';
  position: absolute;
  top: 21px; /* play with this for alignment */
  right: -36px; /* play with this for alignment */
  height: 40px; width: 70px; /* may need to adjust these depending on container size */
  background-color: #fcfcfc;
  transform: rotate(60deg); /* to adjust angle */
  z-index: -1; /* puts the pseudo element ::before below .salutations */
}
<div class="container">
 <div class="salutations">Hello</div>
</div>

P.S。可能要调整一两个像素,我的眼睛很难受。

浏览器兼容性

transform: rotate

pseudo elements (::before)

<强>小提琴

https://jsfiddle.net/Hastig/wy5bjxg3/

答案 5 :(得分:0)

使用css可以生成一个采用三角形形状的元素。 Css技巧有post

通过使.slanted类位置本身相对,我们可以使用绝对定位将生成的内容定位在倾斜div的右侧。 它会花些时间来获得你想要的完美结果,但这只是一个例子。

&#13;
&#13;
.slanted{
  background: #007bff;
  color: #fff;
  position: relative;
  display:inline-block;
  font-size: 20px;
  height: 25px;
  padding: 2px 4px;
 }
.slanted::after {
  content: " ";
  display: block;
  width: 0;
  height: 0;
  border-style: solid;
  border-width: 29px 0 0 20px;
  border-color: transparent transparent transparent #007bff;
  position: absolute;
  top: 0;
  right: -20px;
}
&#13;
<div class="slanted">Hello</div>
&#13;
&#13;
&#13;