Центр Треугольника в нижней части Div

Я пытаюсь иметь треугольник/стрелу внизу моего героя, но он не реагирует и не работает на мобильном телефоне очень хорошо, так как треугольник плавает вправо и больше не центрируется.

Как я могу всегда удерживать треугольник в абсолютном центре в нижней части 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;
}
+50
источник поделиться
5 ответов

Не можете ли вы установить 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;
}
+108
источник

Вы можете использовать следующий css, чтобы создать выравнивание по центру в стиле position: absolute:

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

С CSS, имеющим только left: 50%, мы получим следующий эффект:

Изображение слева: только свойство 50%

При объединении left: 50% с transform: translate(-50%) мы будем иметь следующее:

Изображение с преобразованием: перевести (-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>
+17
источник

Проверьте это:

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')
}
+6
источник

Вы также можете использовать "calc" для 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;
}
+1
источник

Я знаю, что это не прямой ответ на ваш вопрос, но вы также можете рассмотреть возможность использования clip-path, как в этом вопросе: fooobar.com/questions/7147345/....

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос