Динамически изменяемая высота элемента div в зависимости от содержимого - PullRequest
3 голосов
/ 05 марта 2009

Я работаю над Facebook-подобной панелью инструментов для моего сайта.

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

Я пытаюсь выяснить, как заставить всплывающий элемент div расти на основе содержимого, которое помещает туда вызов AJAX.

Например, когда пользователь нажимает «Избранное онлайн (4)», я показываю всплывающий элемент div с фиксированной высотой и «Загрузка ...». Как только контент загрузится, я бы хотел измерить высоту элемента div в зависимости от того, какой контент был возвращен.

Я могу сделать это, рассчитав высоту каждого элемента * количество элементов, но это не очень элегантно.

Есть ли способ сделать это с помощью JavaScript или CSS? (примечание: также использовать JQuery).

Спасибо.

JavaScript:

    function favoritesOnlineClick()
{
    $('#favoritesOnlinePopUp').toggle();
    $('#onlineStatusPopUp').hide(); 
    if ($('#favoritesOnlinePopUp').css('display') == 'block') { loadFavoritesOnlineListing(); } 
}

CSS и HTML:

    #toolbar
{
    background:url('/_assets/img/toolbar.gif') repeat-x;
    height:25px;
    position:fixed;
    bottom:0px;
    width:100%;
    left:0px;
    z-index:100;
    font-size:0.8em;
}
#toolbar #popUpTitleBar
{
    background:#606060;
    height:18px;
    border-bottom:1px solid #000000;
}
#toolbar #popUpTitle
{
    float:left;
    padding-left:4px;
}
#toolbar #popUpAction
{
    float:right;
    padding-right:4px;
}
#toolbar #popUpAction a
{
    color:#f0f0f0;
    font-weight:bold;
    text-decoration:none;
}
#toolbar #popUpLoading
{
    padding-top:6px;
}
#toolbar #favoritesOnline
{
    float:left;
    height:21px;
    width:160px;
    padding-top:4px;
    border-right:1px solid #606060;
    text-align:center;
}
#toolbar #favoritesOnline .favoritesOnlineIcon
{
    padding-right:5px;
}
#toolbar #favoritesOnlinePopUp
{
    display:block;
    border:1px solid #000000;
    width:191px;
    background:#2b2b2b;
    float:left;
    position:absolute;
    left:-1px;
    top:-501px; /*auto;*/
    height:500px;/*auto;*/
    overflow:auto;
}
#toolbar #favoritesOnlineListing
{
    font-size:12px;
}
<div id="toolbar">
    <div id="favoritesOnline" style=" <?php if ($onlinestatus == -1) { echo "display:none;"; } ?> ">
       <img class="favoritesOnlineIcon" src="/_assets/img/icons/favorite-small.gif" /><a href="javascript:favoritesOnlineClick();">Favorites Online (<span id="favoritesOnlineCount"><?php echo $favonlinecount; ?></span>)</a>
        <div id="favoritesOnlinePopUp">
            <div id="popUpTitleBar">
                <div id="popUpTitle">Favorites Online</div>
                <div id="popUpAction"><a href="javascript:closeFavoritesOnline();">x</a></div>
            </div>     
            <div id="favoritesOnlineListing">
             <!-- Favorites online content goes here -->
            </div>
        </div>
    </div>
</div>

Ответы [ 3 ]

4 голосов
/ 05 марта 2009

Возможно, вы могли бы удалить свойство height (убедитесь, что оно не установлено в CSS) и позволить DIV расширяться по высоте.

2 голосов
/ 05 марта 2009

Сделайте это плавающим элементом и не используйте очищающий элемент после него.

1 голос
/ 18 декабря 2013

Вы должны удалить свойство CSS height: 25px на панели инструментов, содержимое будет расширять контейнер. Кроме того, теги селектора идентификаторов уникальны, и вы можете указать их непосредственно, не ссылаясь на предка:

НЕПРАВИЛЬНО:

 #toolbar #popUpAction  { /*some css */ }

 #toolbar #popUpAction a  { /*some css */ }

ПРАВИЛЬНО:

 #popUpAction  { /*some css */ }

 #popUpAction a  { /*some css */ }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...