Я создаю рейтинговую шкалу с фиксированной шириной N. Каждая ставка имеет значение, которое отображается внутри соответствующего блока и описания.
Моя проблема в том, что описание и относительный значок не выравниваются по центру под div, а начинаются слева.
<div class = "card card-accent-primary">
<div class = "card-header text-left">
Rating values
</div>
<div class = "card-body">
<div class = "col-12 mt-2 mb-1 p-buttonset valore-rating-display justify-content-center">
<div *ngFor = "let scala of scalaRating; let i=index" style = "width: 5rem">
<div>
<button pButton type = "button" label = "{{scala.valoreRating}}" class = "p-button-outlined cursor-default"
[class.rounded-left] = "i == 0" [class.rounded-right] = "i == (scalaRating.length - 1)"
style = "background-color: {{scala.codColoreValRating}}; color: black; width: 5rem">
</button>
</div>
<div *ngIf = "rating == scala.valoreRating" class = "position-relative">
<i class = "fa fa-caret-up font-weight-bold font-xxlarge"></i>
<div class = "position-absolute" style = "word-wrap: break-word; left: -1rem">{{scala.descrizioneValRating}}</div>
</div>
</div>
</div>
</div>
</div>
Я хочу, чтобы значок и описание располагались в центре, как на изображении (я отметил красным цветом позицию желания):
Вот пример кода:
https://stackblitz.com/edit/angular-a3akxa?file=src/app/app.component.html






Я предлагаю использовать flex для этого, например https://codepen.io/jayu/pen/gObPVgj
<div class = "demo-solution demo-solution--flexbox">
<img width = "100" height = "50" src = "http://placehold.it/100x50" alt = "" />
<span>Alignment using flexbox</span>
</div>
.demo-problem, .demo-solution {
font-size: 3em;
}
.demo-solution--flexbox {
display: flex;
align-items: center;
margin:auto;
img {
margin: 10px;
padding: 10px;
transition: margin 300ms;
}
}
Просто добавьте это в app.component.css:
.fa-caret-up {
display: flex;
justify-content: center;
}
Наслаждаться! :)
Небольшое объяснение:
Блин, я думал это только иконка, извините
решение без гибкого макета:
text-align: center; к родительскому div значка (относительно позиции)left: 50%;transform: translate(-50%, 0); к разделу описания, чтобы реализовать выравнивание по центру.
например: <div _ngcontent-ghu-c0 = "" class = "position-absolute" style = "word-wrap: break-word;left: 50%;transform: translate(-50%, 0);position: absolute;">F - RISCHIO MEDIO</div>.
Убедитесь, что класс, относящийся к положению, имеет стиль position:relative;..box {
text-align:center;
}
h3 {
padding-top: 60px;
margin:0;
}
.line {
display:inline-block;
width: 50px;
margin:auto;
background-color: #f1f1f1;
position: relative;
}
.fCell {
text-align:center;
}
.desc {
white-space: nowrap;
}
.doCenter {
position: absolute;
left:50%;
transform: translate(-50%, 0);
color: red;
} <div class = "box">
<h3>Original:</h3>
<div class = "line">
<div class = "fCell">F</div>
<div class = "desc">hello world!</div>
</div>
<h3>use left/transform to center long size text:</h3>
<div class = "line">
<div class = "fCell">F</div>
<div class = "desc doCenter">left/transform to center</div>
</div>
<h3>use left/transform to center small size text:</h3>
<div class = "line">
<div class = "fCell">F</div>
<div class = "desc doCenter">f</div>
</div>
</div>Риск для текстового описания заключается в том, что если я применю левые 50% для более короткого текста, он не будет выравниваться по центру, а будет выравниваться по левому краю. Это не моя цель
@travis_911 более короткий текст описания тоже работает, он НЕ основан на длине текста. Я добавил несколько примеров кодов для вас.
<div *ngFor = "let scala of scalaRating; let i=index" class = "wrapper">
<button ...></button>
<ng-container *ngIf = "rating == scala.valoreRating" >
<i class = "..."></i>
<div style = "word-wrap: break-word;">{{scala.descrizioneValRating}}
</div>
</ng-container>
</div>
уникальный класс: обертка (и забудьте position:absolute, margin-left.... :)
.wrapper{
width:5rem;
display:flex;
flex-direction: column;
justify-content:flex-start;
align-items:center;
}
Посмотрите, как <i> и <div>{{scala.descriptineValRatting}}</div> имеют того же «родителя», что и <button>
это фантастическое решение! Вы правы, мне нужно добавить уникальную оболочку класса. Просто небольшое пояснение, почему столбец flex-direction?
Я хочу, чтобы три «дива» шли сверху вниз, а не слева направо, см., например. по этой ссылке
ок спасибо большое.! буду читать и изучать
Но текст еще не выровнен