2016-06-21 2 views
0

У меня есть красивые материальные карты, содержащие сообщения. Они находятся в бесконечной прокрутке. Желаемое поведение заключается в том, что они будут отображать полное сообщение после нажатия кнопки «больше», поскольку сообщения имеют тенденцию быть очень длинными. Прошив такое поведение, я пытался изменить свое приложение, чтобы отображать сообщения в полной мере все время, но у меня возникают проблемы с получением карт divs, чтобы получить уровень выше 457 пикселей, и я не могу понять, почему.Управление высотой div

Пройдя через отладчик Chrome, я вижу, что высота карты составляет 457 пикселей, но она всегда серая, указывая, что она достигает этой высоты из другого места. Я хотел бы сделать карту такой же высокой, как и ее содержимое.

Вот что я получил:

<div *ngFor="let message of messages"> 
    <div class="event card" style="margin-left: 65px; width: 550px;"> 
     <div class="card-header inlineblock" style="text-overflow: ellipses;"> 
      <div class="card-date text-caption" style="float: right;">{{message.date}}</div> 
      <div class="text-title">{{message.subject | titlecase}}</div> 
     </div> 
     <div class="message inlineblock text-body"> 
      <div style="text-overflow: ellipses; white-space: pre-wrap; height: auto;">{{message['email-body']}}</div> 
    </div> 
    <div> 
     <hr style="margin: 20px 0 20px 0;"/> 
     <span class="text-button" style="padding-left: 20px;">More</span> 
    </div> 
</div> 

Это моя самая простая карта. Вот все CSS, который отметил:

.event { 
    border-radius: 2px; 
    background-color: white; 
    margin: 15px 0 0 0; 
    padding-bottom: 20px; 
    } 

.card { 
    border-radius: 2px; 
    transition: box-shadow .25s; 
    background-color: white; 
    margin: .5rem 0 1rem 0; 
    width: 100%; 
    justify-content: center; 
    box-shadow: 0 2px 10px 0 rgba(0,0,0,.16), 0 2px 5px 0 rgba(0,0,0,.26) 
    } 

.card-header { 
    width: 100%; 
    border-top-left-radius: 2px; 
    border-top-right-radius: 2px; 
    padding: 8px 20px; 
    } 

.inlineblock { 
    display: inline-block; 
    } 

.card-date { 
    float: right; 
    } 

.text-caption { 
    font-size: 12px; 
    font-weight: 400; 
    line-height: 32px; 
    opacity: .54; 
    margin: 0 0 0 0 !important; 
    } 

.text-title { 
    font-size: 20px; 
    font-weight: 600; 
    line-height: 44px; 
    opacity: .87; 
    margin: 0 0 0 0 !important; 
    } 

.message { 
    display: block; 
    display: -webkit-box; 
    padding: 15px 20px 0 20px; 
    -webkit-line-clamp: 10; 
    -webkit-box-orient: vertical; 
    overflow: hidden; 
    text-overflow: ellipsis; 
    } 

.text-body { 
    font-size: 14px; 
    font-weight: 400; 
    line-height: 25px; 
    opacity: .87; 
    margin: 0 0 0 0 !important; 
    } 

text-button: { 
    font-size: 14px; 
    text-transform: uppercase; 
    font-weight: 600; 
    line-height: 32px; 
    opacity: .87; 
    margin: 0 0 0 0 !important; 
    } 

Ничего там меня поражает как порождение высоты, так что я проверил уровень выше.

Это завернутые в другой шаблон HTML:

<div class="feed-container"> 
    <div class="feed-scroll"> 
     <messages></messages> 
    </div> 
</div> 

Со следующим соответствующим CSS:

.feed-container { 
    width: 630px; 
    overflow: hidden; 
    } 

.feed-scroll { 
    min-height: 400px; 
    width: 650px; 
    height: 100%; 
    overflow-y: auto; 
    overflow-x: hidden; 
    padding-left: 10px; 
    padding-right: 10px; 
    } 

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

По-прежнему меня ничто не мешает, поскольку карты ограничены по высоте, поэтому полное сообщение не отображается. Если я укажу высоту div или его родителя, текст просто переполнит карту. Карта не растет, чтобы соответствовать ей.

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

На самом высоком DIV:

* { 
box-sizing: border-box; 
} 

div { 
    display: block; 
} 

body { 
    font-family: 'Roboto', arial, sans-serif; 
    font-weight: 400; 
    color: #212121; 
} 

На <div class="event card style="margin-left: 65px; width: 550px;">, это то же самое, что и выше для *, div и body.

На <div class="card-header inlineblock" style="text-overflow: ellipsis;"> и <div class="card-date text-caption" style="float: right;"> и <div class="text-title">, это то же самое, что и выше для *, div и body.

Таким образом, это не похоже на заголовок, который несет ответственность.

<div class="message inlineblock text-body"> и <div style="text-overflow: ellipsis; white-space: pre-wrap; height: auto;"> не наследуют дополнительные классы, кроме *, div и body.

<hr/> действительно наследует несколько стилей, но ни один из них не будет контролировать высоту.

<span> для кнопки также наследует одни и те же глобальные классы.

Итак, на данный момент я очень смущен, почему моя карта не станет выше. Я не вижу ничего сдерживающего его, но независимо от того, насколько высокий я устанавливаю его явно, он не достигнет уровня выше 457 пикселей.

Любые мысли о том, почему?

Элемент {{message['email-body']}} просто переполняется в многоточие, несмотря ни на что. Кажется, я не могу сделать divs выше.

ответ

1

Вы пробовали использовать функцию calc

* { 
    /* So 100% means 100% */ 
    box-sizing: border-box; 
} 
html, body { 
    /* Make the body to be as tall as browser window */ 
    height: 100%; 
    background: #ccc; 
    padding: 20px; 
} 
body { 
    padding: 20px; 
    background: white; 
} 
.area-one { 
    /* With the body as tall as the browser window 
    this will be too */ 
    height: 100%; 
} 
.area-one h2 { 
    height: 50px; 
    line-height: 50px; 
} 
.content { 
    /* Subtract the header size */ 
    height: calc(100% - 50px); 
    overflow: auto; 
} 
Смежные вопросы