Выровнять текст и значок по центру div

Я создаю рейтинговую шкалу с фиксированной шириной 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

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
90
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я предлагаю использовать 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;
}

Наслаждаться! :)

Небольшое объяснение:

  • Не хотел добавлять больше классов
  • Display flex отлично подходит для центрирования контента
  • Если вы хотите узнать больше о display: flex, попробуйте это: https://flexbox.buildwithreact.com

Но текст еще не выровнен

travis_911 10.11.2022 08:40

Блин, я думал это только иконка, извините

richlira 12.11.2022 23:08

решение без гибкого макета:

  1. икона. добавить text-align: center; к родительскому div значка (относительно позиции)
  2. описание добавьте 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 10.11.2022 08:47

@travis_911 более короткий текст описания тоже работает, он НЕ основан на длине текста. Я добавил несколько примеров кодов для вас.

CQLI 11.11.2022 02:40
Ответ принят как подходящий
    <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>

Ваш разветвленный stackblitz

это фантастическое решение! Вы правы, мне нужно добавить уникальную оболочку класса. Просто небольшое пояснение, почему столбец flex-direction?

travis_911 10.11.2022 09:09

Я хочу, чтобы три «дива» шли сверху вниз, а не слева направо, см., например. по этой ссылке

Eliseo 10.11.2022 09:11

ок спасибо большое.! буду читать и изучать

travis_911 10.11.2022 09:13

Другие вопросы по теме