@belyaevcyrill

Как задать ширину родителю, если дочерний элемент абсолютный?

Не получается сделать так, чтобы блок .wrapper принимал ширину элемента .child.

Есть такая вёрстка:
<div class="parent">
    <div class="wrapper">
        <div class="child">
            <span>Привет!</span>
         </div>
    </div>
</div>


И такие стили:
.parent {
    position: relative;
    height: 200px;
    background: rgba(34,34,234,.3)
}

.wrapper {
    position: relative;
    display: inline-block;
    height: 100%;
    background: rgba(34,234,234,.3)
}

.child {
    position: absolute;
    top: 50%;
    display: block;
    transform: translateY(-50%);
    background: rgba(134,234,134,.6)
}


Как видите, решил центрировать .child внутри .parent по вертикали. По вертикали всё центруется. Но как сделать, чтобы блок .wrapper имел такую же ширину, как и .child?

Вот код на кодпене.

.wrapper имеет display:inline-block. Это важно. Менять нельзя.
  • Вопрос задан
  • 3548 просмотров
Решения вопроса 2
Ankhena
@Ankhena Куратор тега CSS
Нежно люблю верстку
Флексами
https://codepen.io/anon/pen/EvNeRP
Может, у вас картина сложнее, но на данный момент перебор оберток.
Ответ написан
Stalker_RED
@Stalker_RED
Без костылей никак. Лучше пересмотреть свой подход и переверстать.
Элемент с position:absolute выпадает из потока (flow) и не занимает места в родителе.

Костыль: при помощи js получить width у абсолютного элемента и установить его в parent.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Exploding
@Exploding
wtf?
По-моему вот оно!
Как в старом анекдоте: " И сказал Иисус мальчику: -Брось костыли и иди..."
.parent {
    position: relative;
    height: 200px;
    background: #008000;
}

.wrapper {
    position: relative;
    display: inline-block;
	text-align:center;
    height: auto;
    left: 50%;
    top: 50%;
	max-width: 50%;
    transform: translateX(-50%) translateY(-50%);
    background: #00f;
}

.child {
    display: block;
    background: rgba(255, 255, 255, 0.44);
	width:auto;
}

"... и мальчик бросил и пошел...
- А чем болел?
- Насморком.
- А костыли зачем?
- Дедушке нес..."
Ответ написан
@Nimo_tsi
Troubleshooter
задать для .wrapper margin: 0; padding: 0.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы