Сделать текстовое содержимое дочернего элемента div НЕ расширяющим ширину его родительского элемента с фиксированным позиционированием

0

Я работаю над всплывающим окном. Его структура очень проста и выглядит следующим образом:

<div class = "popup">
    <div class = "upper">
        <img src = "http://www.tapeta-mis-galazki-koala.na-pulpit.com/pokaz_obrazek.php?adres=mis-galazki-koala&rozdzielczosc=128x128" />
    </div>
    <div class = "description">This is a very interesting description of what you can see above.</div>
</div>

со стилями

.popup
{
    position: fixed;
    left: 50px; 
    top: 50px;
    border: 1px solid;
    background: #fff;
    padding: 10px;
    box-shadow: 0 0 5px #000;
}
.popup .upper {
    min-width: 100px;
    min-height: 100px;
    border: 1px solid;
    padding: 5px;
    display: inline-block;
}
.popup .upper img {
    display: block;
}

и вот скрипка с применяемым кодом.

Как вы можете видеть, div.popup позиционируется как фиксированный для body.

Я хочу добиться того, чтобы div.description НЕ расширял свою родительскую ширину div.popup когда он содержит много текста, вместо этого он должен обертывать текст, который должен быть многострочным, и иметь ширину div.popup. Ширина div.popup должна определяться шириной div.upper и ее содержимым. Другими словами, я хочу иметь ширину div.description AT MOST ширины div.upper, независимо от ее (текстового содержимого div.description).

РЕДАКТИРОВАТЬ

Там эта небольшая проблема: содержимое изображения не является статическим и может быть динамически изменено, поэтому ширина не является постоянной.

Можно ли даже добиться этого с помощью CSS?

  • 0
    похоже, что вы хотите выяснить ширину image затем добавить эту ширину к фиксированному элементу .popup
  • 0
    Это именно то, что я забыл упомянуть: содержание изображения и его ширина могут варьироваться :(
Теги:

3 ответа

3
Лучший ответ

http://jsfiddle.net/de6fr/1/ - базовый пример того, как исправить


Вы в основном используете всплывающее окно в качестве контейнера, а это означает, что если вы хотите сохранить его ширину, то на что вы должны работать. Я использовал свойство max-width с .popup следующим образом:

.popup {
    position: fixed;
    left: 50px; 
    top: 50px;
    border: 1px solid;
    background: #fff;
    padding: 10px;
    box-shadow: 0 0 5px #000;
    display: table;
    width: 1px;
}
.popup > div { 
    display: table-row;
}

.popup .upper {
    min-width: 100px;
    min-height: 100px;
    border: 1px solid;
    padding: 5px;
}
.popup .upper img {
    display: block;
}

Обновление - гибкий

http://jsfiddle.net/de6fr/4/

Исправление для гибкости заключается в использовании CSS-хака, который в основном изменяет характер элемента на table

Характер CSS (каскадные таблицы стилей) означает, что довольно сложно получить родительский DIV, чтобы взять размер дочернего div без каких-либо сумасшедших идей. Однако ничего не мешает "таблице" с действительно малой шириной делать это, как в этом коде:

.popup
{
    position: fixed;
    left: 50px; 
    top: 50px;
    border: 1px solid;
    background: #fff;
    padding: 10px;
    box-shadow: 0 0 5px #000;
    display: table;
    width: 1px;
}
.popup .upper {
    min-width: 100px;
    min-height: 100px;
    border: 1px solid;
    padding: 5px;
    display: table-row;
}
.popup .upper img {
    display: block;
}
.popup .description {
    display: table-row;
}
  • 0
    Это было бы очень признательно, так как я забыл о самой важной вещи, которую я только что добавил в свой вопрос с правкой. Я надеюсь, что все еще как-то возможно заставить работать так, как я хочу.
  • 0
    Позвольте мне работать над этим для вас!
Показать ещё 4 комментария
0

Вы не определили ширину для фиксированного элемента, поэтому добавьте некоторую ширину к вашему фиексированному элементу

.popup
{
    position: fixed;
    left: 50px; 
    top: 50px;
    border: 1px solid;
    background: #fff;
    padding: 10px;
    box-shadow: 0 0 5px #000;
    width: 100%;
}

вот демонстрация

0

Добавьте свойство CSS в свой всплывающий класс и укажите его ширину

.popup
{
    position: fixed;
    left: 50px; 
    top: 50px;
    border: 1px solid;
    background: #fff;
    padding: 10px;
    box-shadow: 0 0 5px #000;
    overflow:scroll;
    width:400px;
}
  • 0
    Свитки не убеждают меня, так как должны выглядеть элегантно. И вот что я забыл сказать, это то, что изображение динамично.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню