Div底部的中心三角形

时间:2013-11-01 00:39:30

标签: css html5 css3 css-shapes

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

我怎样才能将三角形始终保持在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;
}

5 个答案:

答案 0 :(得分:106)

您不能将left设置为50%,然后将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;
}

答案 1 :(得分:15)

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

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

如果CSS只有left: 50%,我们会有以下效果:

Image with left: 50% property only

left: 50%transform: translate(-50%)合并后,我们会有以下内容:

Image with transform: translate(-50%) as well

.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>

答案 2 :(得分:6)

检查一下:

<强> 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')
}

答案 3 :(得分:0)

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

.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;
}

答案 4 :(得分:0)

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