Как я могу получить половину значения максимальной ширины содержимого?

Я показываю всплывающую подсказку и хочу, чтобы она располагалась по центру родительского элемента, независимо от ее длины.

Я думал, что, возможно, я мог бы использовать calc() с max-content, но, видимо, это не так.

*[tooltip] {
    position: relative;
    &:hover {
        &:after {
            content: attr(tooltip);
            display: block;
            position: absolute;
            transform: translateX(-50%);
            background: rgba(0, 0, 0, 0.8);
            color: white;
            padding: 6px 12px;
            border-radius: 4px;
            position: absolute;
            top: 50px;
            left: 0px;
            width: max-content;
            font-weight:bold;
            font-size:0.9em;
            text-align:center;
            margin-left: calc(max-content / 2);
        }
    }
}

Я всегда могу использовать 100% в качестве ширины, но тогда это всегда будет ширина родительского элемента, и иногда это слишком мало, а иногда слишком много; поэтому я использую max-content.

<div tooltip = "Hello World">Hover me.</div>

Как я могу решить эту дилемму без использования JS?

Обновлено:

Вот изображение того, как это должно выглядеть.

Как я могу получить половину значения максимальной ширины содержимого?

Независимо от того, сколько текста во всплывающей подсказке, он всегда должен располагаться по центру. Если я использую подход 100% ширины, он останется посередине, но всегда будет иметь одинаковую ширину, в результате чего слова будут разбиты на новые строки.

При использовании max-content ширина всегда отличается от других всплывающих подсказок, поэтому мне становится трудно центрировать ее.

Можете ли вы предоставить некоторую структуру html или картинку того, как она должна выглядеть. Описание не очень четкое-

Domenik Reitzner 16.08.2018 17:38

Отредактировал вопрос @DomenikReitzner

P. Nick 16.08.2018 17:44

Не могу поверить, что не подумал об этом! Спасибо @Paulie_D

P. Nick 16.08.2018 17:45
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в 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. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
0
3
920
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Использование transform

  *[tooltip] {
        position: relative;
        &:hover {
            &:after {
                content: attr(tooltip);
                display: block;
                position: absolute;
                background: rgba(0, 0, 0, 0.8);
                color: white;
                padding: 6px 12px;
                border-radius: 4px;
                position: absolute;
                top: 50px;
                /* this */
                left:50%; 
                transform:translateX(-50%);

                width: max-content;
                font-weight:bold;
                font-size:0.9em;
                text-align:center;
             }
        }
    }

Конечно, это так ... codepen.io/Paulie-D/pen/vaqRqv Он центрируется по ширине родительского элемента ...

Paulie_D 16.08.2018 17:55
display: inline-block; отсутствовал в вашем исходном ответе :)
hcs 16.08.2018 17:58

Это не обязательно .... существенный часть центрирования - это left:50% и transform

Paulie_D 16.08.2018 18:04

Проверьте написанную мной ручку. Затем проверьте тот, который вы разместили.

hcs 16.08.2018 18:27

Вот способ

.parent {
  display: inline-block;
}

*[tooltip] {
  position: relative;
}

*[tooltip]:hover:after {
  content: attr(tooltip);
  background: rgba(0, 0, 0, 0.8);
  color: white;
  padding: 6px 12px;
  border-radius: 4px;
  display: table-cell;
  position: absolute;
  overflow: hidden;
  white-space: nowrap;
  left:50%; 
  transform:translateX(-50%);
}
<div tooltip = "Hello World" class = "parent">Hover me.</div>

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