Как центрировать текст внутри: перед псевдо-элементом?
у меня есть такой код:
span {
border-radius: 50%;
background-color: #d8d9dd;
border: 6px solid #262c40;
width: 25px;
height: 25px;
margin: 30px 0 0 40px;
display: block;
}
span:before {
content: attr(data-value);
position: relative;
white-space: pre;
display: inline;
top: -27px;
left: -29px;
width: 200px;
text-align: center;
}
<span data-value="November 2016"></span>
<span data-value="May 2016"></span>
Как я могу центрировать текст внутри: перед псевдо-элементом, чтобы быть в середине промежутка? Возможно ли это?
5 ответов
лучше всего было бы позиция на before псевдо элемент абсолютно в отношении span используя популярный центрируя метод:
top: 0;
left: 50%;
transform: translate(-50%, -25px);
обратите внимание, что-25px смещает текст над кругами (который имеет высоту 25px) - см. демонстрацию ниже:
span {
border-radius: 50%;
background-color: #d8d9dd;
border: 6px solid #262c40;
width: 25px;
height: 25px;
margin: 30px 0 0 40px;
display: block;
position:relative;
}
span:before {
content: attr(data-value);
position: absolute;
white-space: pre;
display: inline;
top: 0;
left: 50%;
transform: translate(-50%, -25px);
}
<span data-value="November 2016"></span>
<span data-value="May 2016"></span>С MDN:
[в
:beforeпсевдо-элемент] встроен по умолчанию
предоставление встроенных элементов a width ничего не делает, поэтому вам нужно стиль его как display: block (или inline-block если это более уместно). Также оказывается, что вам нужно настроить left стоимостью примерно -88px чтобы текст был центрирован по кругу.
span {
border-radius: 50%;
background-color: #d8d9dd;
border: 6px solid #262c40;
width: 25px;
height: 25px;
margin: 30px 0 0 40px;
display: block;
}
span:before {
content: attr(data-value);
position: relative;
white-space: pre;
display: inline;
top: -27px;
left: -88px;
width: 200px;
text-align: center;
display: block;
}
<span data-value="November 2016"></span>
<span data-value="May 2016"></span>я рекомендую не использовать отрицательные переводы. Это может оказаться за пределами окна просмотра, если вы не сделаете это достаточно осторожно.
кроме того, вы не должны вставлять содержимое с псевдоэлементами. Псевдо-элементы должны использоваться только для стилизации. Вот так:
body {
display: inline-block;
}
span {
display: block;
text-align: center;
}
span:after {
content: '';
border-radius: 50%;
background-color: #d8d9dd;
border: 6px solid #262c40;
width: 25px;
height: 25px;
margin: 10px auto 30px;
display: block;
}
<span>November 2016</span>
<span>May 2016</span>
текст внутри промежутка центрируется из-за text-align: center.
круг псевдо-элемента центрирован из-за margin-left: auto и margin-right: auto.
Я был избит до этого, но вот мое решение:
span {
border-radius: 50%;
background-color: #d8d9dd;
border: 6px solid #262c40;
width: 25px;
height: 25px;
margin: 30px 0 0 40px;
display: block;
}
span:before {
content: attr(data-value);
position: relative;
white-space: pre;
display: inline-block;
top: -27px;
left: -50px;
width: 125px;
text-align: center;
}
изменения должны использовать inline-block дисплей :before стиль и настроить left и width текста.
добавить display:inline-block; и добавить margin-left:-87px. где 87px, полученные от
100px(50% из всей ширины 200px)-13px (50% из ширины 25px пяди)
span {
border-radius: 50%;
background-color: #d8d9dd;
border: 6px solid #262c40;
width: 25px;
height: 25px;
margin: 30px 0 0 40px;
display: block;
}
span:before {
content: attr(data-value);
position: relative;
white-space: pre;
display: inline-block;
top: -27px;/*
left: -29px;*/
margin-left: -87px;
width: 200px;
text-align: center;
}
<span data-value="November 2016"></span>
<span data-value="May 2016"></span>