我试图在我的英雄的底部有一个三角形/箭头,但它没有响应,并且在移动设备上不能很好地工作,因为三角形漂浮到右边并且不再是绝对居中。
我怎样才能将三角形始终保持在div底部的绝对中心?
此处的示例代码:
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;
}
答案 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%
,我们会有以下效果:
将left: 50%
与transform: 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>
答案 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。