63

我试图在我的英雄底部有一个三角形/箭头,但它没有响应并且在移动设备上不能很好地工作,因为三角形向右浮动并且不再绝对居中。

如何始终将三角形定位在 div 底部的绝对中心?

这里的示例代码:

http://jsfiddle.net/SxKr5/1/

HTML:

<div class="hero"></div>

CSS:

.hero {     
    position:relative;
    background-color:#e15915;
    height:320px !important;
    width:100% !important;


}


.hero:after,
.hero:after {
    z-index: -1;
    position: absolute;
    top: 98.1%;
    left: 70%;
    margin-left: -25%;
    content: '';
    width: 0;
    height: 0;
    border-top: solid 50px #e15915;
    border-left: solid 50px transparent;
    border-right: solid 50px transparent;
}
4

5 回答 5

134

你不能设置left50%然后margin-left设置-25px为考虑它的宽度:http: //jsfiddle.net/9AbYc/

.hero:after {
    content:'';
    position: absolute;
    top: 100%;
    left: 50%;
    margin-left: -50px;
    width: 0;
    height: 0;
    border-top: solid 50px #e15915;
    border-left: solid 50px transparent;
    border-right: solid 50px transparent;
}

或者如果您需要可变宽度,您可以使用:http: //jsfiddle.net/9AbYc/1/

.hero:after {
    content:'';
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    margin: 0 auto;
    width: 0;
    height: 0;
    border-top: solid 50px #e15915;
    border-left: solid 50px transparent;
    border-right: solid 50px transparent;
}
于 2013-11-01T00:52:38.220 回答
23

您可以使用以下 css 使元素居中对齐,样式为position: absolute

.element {
  transform: translateX(-50%);
  position: absolute;
  left: 50%;
}

只有CSSleft: 50%我们将​​有以下效果:

左图:仅 50% 财产

结合我们将有以下内容left: 50%transform: translate(-50%)

带有变换的图像: translate(-50%) 以及

.hero { 	
  background-color: #e15915;
  position: relative;
  height: 320px;
  width: 100%;
}


.hero:after {
  border-right: solid 50px transparent;
  border-left: solid 50px transparent;
  border-top: solid 50px #e15915;
  transform: translateX(-50%);
  position: absolute;
  z-index: -1;
  content: '';
  top: 100%;
  left: 50%;
  height: 0;
  width: 0;
}
<div class="hero">

</div>

于 2016-12-26T07:56:44.353 回答
7

检查这个:

http://jsfiddle.net/SxKr5/3/

.hero1
{
    width: 90%;
    height: 200px;
    margin: auto;
    background-color: #e15915;
}

.hero2
{
    width: 0px;
    height: 0px;
    border-style: solid;
    margin: auto;
    border-width: 90px 58px 0 58px;
    border-color: #e15915 transparent transparent transparent;
    line-height: 0px;
    _border-color: #e15915 #000000 #000000 #000000;
    _filter: progid:DXImageTransform.Microsoft.Chroma(color='#000000')
}
于 2013-11-01T01:00:21.600 回答
2

您还可以使用 CSS“计算”来获得相同的效果,而不是使用负边距或变换属性(如果您想将这些属性用于其他任何事情)。

.hero:after,
.hero:after {
    z-index: -1;
    position: absolute;
    top: 98.1%;
    left: calc(50% - 25px);
    content: '';
    width: 0;
    height: 0;
    border-top: solid 50px #e15915;
    border-left: solid 50px transparent;
    border-right: solid 50px transparent;
}
于 2017-12-31T17:46:48.043 回答
1

我知道这不是您问题的直接答案,但您也可以考虑使用剪辑路径,如以下问题所示:https ://stackoverflow.com/a/18208889/23341 。

于 2019-09-21T12:07:50.307 回答