2016-09-29 5 views
0

Я работаю с чатом ui из этого Codepen https://codepen.io/Momciloo/pen/bEdbxY. Содержимое в левой боковой панели прокручивается после того, как я добавил overflow:auto и установил высоту для прокрутки div. Кажется, я не могу прокрутить, чтобы работать над секцией чата в правом углу. Мне хотелось бы, чтобы пузыри чата прокручивались как в поле ввода, так и в поле .top. Моим первым решением было установить height и overflow-y:scroll, но пузыри чата переполняют ui. Я добавил фрагмент ниже. Любые солитоны?Прокрутка переполнения под верхним и нижним divs

$('.chat[data-chat=person2]').addClass('active-chat'); 
 
$('.person[data-chat=person2]').addClass('active'); 
 

 
$('.left .person').mousedown(function(){ 
 
    if ($(this).hasClass('.active')) { 
 
     return false; 
 
    } else { 
 
     var findChat = $(this).attr('data-chat'); 
 
     var personName = $(this).find('.name').text(); 
 
     $('.right .top .name').html(personName); 
 
     $('.chat').removeClass('active-chat'); 
 
     $('.left .person').removeClass('active'); 
 
     $(this).addClass('active'); 
 
     $('.chat[data-chat = '+findChat+']').addClass('active-chat'); 
 
    } 
 
});
@import url(https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,600); 
 
*, *:before, *:after { 
 
    box-sizing: border-box; 
 
} 
 

 
body { 
 
    background-color: #f8f8f8; 
 
    -webkit-font-smoothing: antialiased; 
 
    -moz-osx-font-smoothing: grayscale; 
 
    text-rendering: optimizeLegibility; 
 
    font-family: 'Source Sans Pro', sans-serif; 
 
    font-weight: 400; 
 
    background-image: url("http://s17.postimg.org/fr01hfe33/image.jpg"); 
 
    background-size: cover; 
 
    background-repeat: none; 
 
} 
 

 
.wrapper { 
 
    position: relative; 
 
    left: 50%; 
 
    width: 100%; 
 
    height: 540px; 
 
    -webkit-transform: translate(-50%, 0); 
 
      transform: translate(-50%, 0); 
 
      overflow:hidden; 
 
} 
 

 
.container { 
 
    position: absolute; 
 
    top: 50%; 
 
    left: 50%; 
 
    width: 100%; 
 
    height: 100%; 
 
    background-color: #fff; 
 
    -webkit-transform: translate(-50%, -50%); 
 
      transform: translate(-50%, -50%); 
 
} 
 
.container .left { 
 
    float: left; 
 
    width: 37.6%; 
 
    height: 100%; 
 
    border: 1px solid #e6e6e6; 
 
    background-color: #fff; 
 
} 
 
.container .left .top { 
 
    position: relative; 
 
    width: 100%; 
 
    height: 96px; 
 
    padding: 29px; 
 
} 
 
.container .left .top:after { 
 
    position: absolute; 
 
    bottom: 0; 
 
    left: 50%; 
 
    display: block; 
 
    width: 80%; 
 
    height: 1px; 
 
    content: ''; 
 
    background-color: #e6e6e6; 
 
    -webkit-transform: translate(-50%, 0); 
 
      transform: translate(-50%, 0); 
 
} 
 
.container .left input { 
 
    float: left; 
 
    width: 188px; 
 
    height: 42px; 
 
    padding: 0 15px; 
 
    border: 1px solid #e6e6e6; 
 
    background-color: #eceff1; 
 
    border-radius: 21px; 
 
    font-family: 'Source Sans Pro', sans-serif; 
 
    font-weight: 400; 
 
} 
 
.container .left input:focus { 
 
    outline: none; 
 
} 
 
.container .left a.search { 
 
    display: block; 
 
    float: left; 
 
    width: 42px; 
 
    height: 42px; 
 
    margin-left: 10px; 
 
    border: 1px solid #e6e6e6; 
 
    background-color: #00b0ff; 
 
    background-image: url("http://s11.postimg.org/dpuahewmn/name_type.png"); 
 
    background-repeat: no-repeat; 
 
    background-position: top 12px left 14px; 
 
    border-radius: 50%; 
 
} 
 
.container .left .people { 
 
    margin-left: -1px; 
 
    border-right: 1px solid #e6e6e6; 
 
    border-left: 1px solid #e6e6e6; 
 
    width: calc(100% + 2px); 
 
    height:440px; 
 
    overflow-y:auto; 
 
    overflow-x: hidden; 
 
} 
 
.container .left .people .person { 
 
    position: relative; 
 
    width: 100%; 
 
    padding: 12px 10% 16px; 
 
    cursor: pointer; 
 
    background-color: #fff; 
 
} 
 
.container .left .people .person:after { 
 
    position: absolute; 
 
    bottom: 0; 
 
    left: 50%; 
 
    display: block; 
 
    width: 80%; 
 
    height: 1px; 
 
    content: ''; 
 
    background-color: #e6e6e6; 
 
    -webkit-transform: translate(-50%, 0); 
 
      transform: translate(-50%, 0); 
 
} 
 
.container .left .people .person img { 
 
    float: left; 
 
    width: 40px; 
 
    height: 40px; 
 
    margin-right: 12px; 
 
    border-radius: 50%; 
 
} 
 
.container .left .people .person .name { 
 
    font-size: 14px; 
 
    line-height: 22px; 
 
    color: #1a1a1a; 
 
    font-family: 'Source Sans Pro', sans-serif; 
 
    font-weight: 600; 
 
} 
 
.container .left .people .person .time { 
 
    font-size: 14px; 
 
    position: absolute; 
 
    top: 16px; 
 
    right: 10%; 
 
    padding: 0 0 5px 5px; 
 
    color: #999; 
 
    background-color: #fff; 
 
} 
 
.container .left .people .person .preview { 
 
    font-size: 14px; 
 
    display: inline-block; 
 
    overflow: hidden !important; 
 
    width: 70%; 
 
    white-space: nowrap; 
 
    text-overflow: ellipsis; 
 
    color: #999; 
 
} 
 
.container .left .people .person.active, .container .left .people .person:hover { 
 
    margin-top: -1px; 
 
    margin-left: -1px; 
 
    padding-top: 13px; 
 
    border: 0; 
 
    background-color: #00b0ff; 
 
    width: calc(100% + 2px); 
 
    padding-left: calc(10% + 1px); 
 
} 
 
.container .left .people .person.active span, .container .left .people .person:hover span { 
 
    color: #fff; 
 
    background: transparent; 
 
} 
 
.container .left .people .person.active:after, .container .left .people .person:hover:after { 
 
    display: none; 
 
} 
 
.container .right { 
 
    position: relative; 
 
    float: left; 
 
    width: 62.4%; 
 
    height: 100%; 
 
} 
 
.container .right .top { 
 
    width: 100%; 
 
    height: 47px; 
 
    padding: 15px 29px; 
 
    background-color: #eceff1; 
 
} 
 
.container .right .chat { 
 
    height:437px; 
 
    overflow-y: scroll; 
 
} 
 

 
.container .right .top span { 
 
    font-size: 15px; 
 
    color: #999; 
 
} 
 
.container .right .top span .name { 
 
    color: #1a1a1a; 
 
    font-family: 'Source Sans Pro', sans-serif; 
 
    font-weight: 600; 
 
} 
 
.container .right .chat { 
 
    position: relative; 
 
    display: none; 
 
    overflow: hidden; 
 
    padding: 0 35px 92px; 
 
    border-width: 1px 1px 1px 0; 
 
    border-style: solid; 
 
    border-color: #e6e6e6; 
 
    height: calc(100% - 48px); 
 
    -webkit-box-pack: end; 
 
    -webkit-justify-content: flex-end; 
 
     -ms-flex-pack: end; 
 
      justify-content: flex-end; 
 
    -webkit-box-orient: vertical; 
 
    -webkit-box-direction: normal; 
 
    -webkit-flex-direction: column; 
 
     -ms-flex-direction: column; 
 
      flex-direction: column; 
 
} 
 
.container .right .chat.active-chat { 
 
    display: block; 
 
    display: -webkit-box; 
 
    display: -webkit-flex; 
 
    display: -ms-flexbox; 
 
    display: flex; 
 
} 
 
.container .right .chat.active-chat .bubble { 
 
    -webkit-transition-timing-function: cubic-bezier(0.4, -0.04, 1, 1); 
 
    transition-timing-function: cubic-bezier(0.4, -0.04, 1, 1); 
 
} 
 
.container .right .chat.active-chat .bubble:nth-of-type(1) { 
 
    -webkit-animation-duration: 0.15s; 
 
    animation-duration: 0.15s; 
 
} 
 
.container .right .chat.active-chat .bubble:nth-of-type(2) { 
 
    -webkit-animation-duration: 0.3s; 
 
    animation-duration: 0.3s; 
 
} 
 
.container .right .chat.active-chat .bubble:nth-of-type(3) { 
 
    -webkit-animation-duration: 0.45s; 
 
    animation-duration: 0.45s; 
 
} 
 
.container .right .chat.active-chat .bubble:nth-of-type(4) { 
 
    -webkit-animation-duration: 0.6s; 
 
    animation-duration: 0.6s; 
 
} 
 
.container .right .chat.active-chat .bubble:nth-of-type(5) { 
 
    -webkit-animation-duration: 0.75s; 
 
    animation-duration: 0.75s; 
 
} 
 
.container .right .chat.active-chat .bubble:nth-of-type(6) { 
 
    -webkit-animation-duration: 0.9s; 
 
    animation-duration: 0.9s; 
 
} 
 
.container .right .chat.active-chat .bubble:nth-of-type(7) { 
 
    -webkit-animation-duration: 1.05s; 
 
    animation-duration: 1.05s; 
 
} 
 
.container .right .chat.active-chat .bubble:nth-of-type(8) { 
 
    -webkit-animation-duration: 1.2s; 
 
    animation-duration: 1.2s; 
 
} 
 
.container .right .chat.active-chat .bubble:nth-of-type(9) { 
 
    -webkit-animation-duration: 1.35s; 
 
    animation-duration: 1.35s; 
 
} 
 
.container .right .chat.active-chat .bubble:nth-of-type(10) { 
 
    -webkit-animation-duration: 1.5s; 
 
    animation-duration: 1.5s; 
 
} 
 
.container .right .write { 
 
    position: absolute; 
 
    bottom: 29px; 
 
    left: 30px; 
 
    height: 42px; 
 
    padding-left: 8px; 
 
    border: 1px solid #e6e6e6; 
 
    background-color: #eceff1; 
 
    width: calc(100% - 58px); 
 
    border-radius: 5px; 
 
} 
 
.container .right .write input { 
 
    font-size: 16px; 
 
    float: left; 
 
    width: 347px; 
 
    height: 40px; 
 
    padding: 0 10px; 
 
    color: #1a1a1a; 
 
    border: 0; 
 
    outline: none; 
 
    background-color: #eceff1; 
 
    font-family: 'Source Sans Pro', sans-serif; 
 
    font-weight: 400; 
 
} 
 
.container .right .write .write-link.attach:before { 
 
    display: inline-block; 
 
    float: left; 
 
    width: 20px; 
 
    height: 42px; 
 
    content: ''; 
 
    background-image: url("http://s1.postimg.org/s5gfy283f/attachemnt.png"); 
 
    background-repeat: no-repeat; 
 
    background-position: center; 
 
} 
 
.container .right .write .write-link.smiley:before { 
 
    display: inline-block; 
 
    float: left; 
 
    width: 20px; 
 
    height: 42px; 
 
    content: ''; 
 
    background-image: url("http://s14.postimg.org/q2ug83h7h/smiley.png"); 
 
    background-repeat: no-repeat; 
 
    background-position: center; 
 
} 
 
.container .right .write .write-link.send:before { 
 
    display: inline-block; 
 
    float: left; 
 
    width: 20px; 
 
    height: 42px; 
 
    margin-left: 11px; 
 
    content: ''; 
 
    background-image: url("http://s30.postimg.org/nz9dho0pp/send.png"); 
 
    background-repeat: no-repeat; 
 
    background-position: center; 
 
} 
 
.container .right .bubble { 
 
    font-size: 16px; 
 
    position: relative; 
 
    display: inline-block; 
 
    clear: both; 
 
    margin-bottom: 8px; 
 
    padding: 13px 14px; 
 
    vertical-align: top; 
 
    border-radius: 5px; 
 
} 
 
.container .right .bubble:before { 
 
    position: absolute; 
 
    top: 19px; 
 
    display: block; 
 
    width: 8px; 
 
    height: 6px; 
 
    content: '\00a0'; 
 
    -webkit-transform: rotate(29deg) skew(-35deg); 
 
      transform: rotate(29deg) skew(-35deg); 
 
} 
 
.container .right .bubble.you { 
 
    float: left; 
 
    color: #fff; 
 
    background-color: #00b0ff; 
 
    -webkit-align-self: flex-start; 
 
     -ms-flex-item-align: start; 
 
      align-self: flex-start; 
 
    -webkit-animation-name: slideFromLeft; 
 
    animation-name: slideFromLeft; 
 
} 
 
.container .right .bubble.you:before { 
 
    left: -3px; 
 
    background-color: #00b0ff; 
 
} 
 
.container .right .bubble.me { 
 
    float: right; 
 
    color: #1a1a1a; 
 
    background-color: #eceff1; 
 
    -webkit-align-self: flex-end; 
 
     -ms-flex-item-align: end; 
 
      align-self: flex-end; 
 
    -webkit-animation-name: slideFromRight; 
 
    animation-name: slideFromRight; 
 
} 
 
.container .right .bubble.me:before { 
 
    right: -3px; 
 
    background-color: #eceff1; 
 
} 
 
.container .right .conversation-start { 
 
    position: relative; 
 
    width: 100%; 
 
    margin-bottom: 27px; 
 
    text-align: center; 
 
} 
 
.container .right .conversation-start span { 
 
    font-size: 14px; 
 
    display: inline-block; 
 
    color: #999; 
 
} 
 
.container .right .conversation-start span:before, .container .right .conversation-start span:after { 
 
    position: absolute; 
 
    top: 10px; 
 
    display: inline-block; 
 
    width: 30%; 
 
    height: 1px; 
 
    content: ''; 
 
    background-color: #e6e6e6; 
 
} 
 
.container .right .conversation-start span:before { 
 
    left: 0; 
 
} 
 
.container .right .conversation-start span:after { 
 
    right: 0; 
 
} 
 

 
@keyframes slideFromLeft { 
 
    0% { 
 
    margin-left: -200px; 
 
    opacity: 0; 
 
    } 
 
    100% { 
 
    margin-left: 0; 
 
    opacity: 1; 
 
    } 
 
} 
 
@-webkit-keyframes slideFromLeft { 
 
    0% { 
 
    margin-left: -200px; 
 
    opacity: 0; 
 
    } 
 
    100% { 
 
    margin-left: 0; 
 
    opacity: 1; 
 
    } 
 
} 
 
@keyframes slideFromRight { 
 
    0% { 
 
    margin-right: -200px; 
 
    opacity: 0; 
 
    } 
 
    100% { 
 
    margin-right: 0; 
 
    opacity: 1; 
 
    } 
 
} 
 
@-webkit-keyframes slideFromRight { 
 
    0% { 
 
    margin-right: -200px; 
 
    opacity: 0; 
 
    } 
 
    100% { 
 
    margin-right: 0; 
 
    opacity: 1; 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script> 
 
<div class="wrapper"> 
 
    <div class="container"> 
 
     <div class="left"> 
 
      <div class="top"> 
 
       <input type="text" /> 
 
       <a href="javascript:;" class="search"></a> 
 
      </div> 
 
      <ul class="people"> 
 
       <li class="person" data-chat="person1"> 
 
        <img src="http://s13.postimg.org/ih41k9tqr/img1.jpg" alt="" /> 
 
        <span class="name">Thomas Bangalter</span> 
 
        <span class="time">2:09 PM</span> 
 
        <span class="preview">I was wondering...</span> 
 
       </li> 
 
       <li class="person" data-chat="person2"> 
 
        <img src="http://s3.postimg.org/yf86x7z1r/img2.jpg" alt="" /> 
 
        <span class="name">Dog Woofson</span> 
 
        <span class="time">1:44 PM</span> 
 
        <span class="preview">I've forgotten how it felt before</span> 
 
       </li> 
 
       <li class="person" data-chat="person3"> 
 
        <img src="http://s3.postimg.org/h9q4sm433/img3.jpg" alt="" /> 
 
        <span class="name">Louis CK</span> 
 
        <span class="time">2:09 PM</span> 
 
        <span class="preview">But we’re probably gonna need a new carpet.</span> 
 
       </li> 
 
       <li class="person" data-chat="person4"> 
 
        <img src="http://s3.postimg.org/quect8isv/img4.jpg" alt="" /> 
 
        <span class="name">Bo Jackson</span> 
 
        <span class="time">2:09 PM</span> 
 
        <span class="preview">It’s not that bad...</span> 
 
       </li> 
 
       <li class="person" data-chat="person5"> 
 
        <img src="http://s16.postimg.org/ete1l89z5/img5.jpg" alt="" /> 
 
        <span class="name">Michael Jordan</span> 
 
        <span class="time">2:09 PM</span> 
 
        <span class="preview">Wasup for the third time like is 
 
you bling </span> 
 
       </li> 
 
       <li class="person" data-chat="person6"> 
 
        <img src="http://s30.postimg.org/kwi7e42rh/img6.jpg" alt="" /> 
 
        <span class="name">Drake</span> 
 
        <span class="time">2:09 PM</span> 
 
        <span class="preview">howdoyoudoaspace</span> 
 
       </li> 
 
      </ul> 
 
     </div> 
 
     <div class="right"> 
 
      <div class="top"><span>To: <span class="name">Dog Woofson</span></span></div> 
 
      <div class="chat" data-chat="person1"> 
 
       <div class="conversation-start"> 
 
        <span>Today, 6:48 AM</span> 
 
       </div> 
 
       <div class="bubble you"> 
 
        Hello, 
 
       </div> 
 
       <div class="bubble you"> 
 
        it's me. 
 
       </div> 
 
       <div class="bubble you"> 
 
        I was wondering... 
 
       </div> 
 
      </div> 
 
      <div class="chat" data-chat="person2"> 
 
       <div class="conversation-start"> 
 
        <span>Today, 5:38 PM</span> 
 
       </div> 
 
       <div class="bubble you"> 
 
        Hello, can you hear me? 
 
       </div> 
 
       <div class="bubble you"> 
 
        I'm in California dreaming 
 
       </div> 
 
       <div class="bubble me"> 
 
        ... about who we used to be. 
 
       </div> 
 
       <div class="bubble me"> 
 
        Are you serious? 
 
       </div> 
 
       <div class="bubble you"> 
 
        When we were younger and free... 
 
       </div> 
 
       <div class="bubble you"> 
 
        I've forgotten how it felt before 
 
       </div> 
 
      </div> 
 
      <div class="chat" data-chat="person3"> 
 
       <div class="conversation-start"> 
 
        <span>Today, 3:38 AM</span> 
 
       </div> 
 
       <div class="bubble you"> 
 
        Hey human! 
 
       </div> 
 
       <div class="bubble you"> 
 
        mm... Someone took a t in the hallway. 
 
       </div> 
 
       <div class="bubble me"> 
 
        ... what. 
 
       </div> 
 
       <div class="bubble me"> 
 
        Are you serious? 
 
       </div> 
 
       <div class="bubble you"> 
 
        I mean... 
 
       </div> 
 
       <div class="bubble you"> 
 
        It’s not that bad... 
 
       </div> 
 
       <div class="bubble you"> 
 
        But we’re probably gonna need a new carpet. 
 
       </div> 
 
      </div> 
 
      <div class="chat" data-chat="person4"> 
 
       <div class="conversation-start"> 
 
        <span>Yesterday, 4:20 PM</span> 
 
       </div> 
 
       <div class="bubble me"> 
 
        Hey human! 
 
       </div> 
 
       <div class="bubble me"> 
 
        Umm... Someone took a shit in the hallway. 
 
       </div> 
 
       <div class="bubble you"> 
 
        ... what. 
 
       </div> 
 
       <div class="bubble you"> 
 
        Are you serious? 
 
       </div> 
 
       <div class="bubble me"> 
 
        I mean... 
 
       </div> 
 
       <div class="bubble me"> 
 
        It’s not that bad... 
 
       </div> 
 
      </div> 
 
      <div class="chat" data-chat="person5"> 
 
       <div class="conversation-start"> 
 
        <span>Today, 6:28 AM</span> 
 
       </div> 
 
       <div class="bubble you"> 
 
        Wasup 
 
       </div> 
 
       <div class="bubble you"> 
 
        Wasup 
 
       </div> 
 
       <div class="bubble you"> 
 
        Wasup for the third time like is <br />you 
 
       </div> 
 

 
      </div> 
 
      <div class="chat" data-chat="person6"> 
 
       <div class="conversation-start"> 
 
        <span>Monday, 1:27 PM</span> 
 
       </div> 
 
       <div class="bubble you"> 
 
        So, how's your new phone? 
 
       </div> 
 
       <div class="bubble you"> 
 
        You finally have a smartphone :D 
 
       </div> 
 
       <div class="bubble me"> 
 
        Drake? 
 
       </div> 
 
       <div class="bubble me"> 
 
        Why aren't you answering? 
 
       </div> 
 
       <div class="bubble you"> 
 
        howdoyoudoaspace 
 
       </div> 
 
      </div> 
 
      <div class="write"> 
 
       <a href="javascript:;" class="write-link attach"></a> 
 
       <input type="text" /> 
 
       <a href="javascript:;" class="write-link smiley"></a> 
 
       <a href="javascript:;" class="write-link send"></a> 
 
      </div> 
 
     </div> 
 
    </div> 
 
</div>

ответ

1

просто удалите дисплей прогибается от вашего .container .right .chat.active и добавить обертку-DIV, содержащий все пузырьки. Эта оболочка будет иметь высоту и переполнение-y: авто.

.conversation-wrapper { 
    height: 400px; 
    overflow: hidden; 
    overflow-y: auto; 
} 

проверить это codepen https://codepen.io/anon/pen/wzqpoO PS: Я сделал изменения только для случая «Томаса Bangalter» в вашем примере. Вы должны настроить свойства css, чтобы они соответствовали вашим целям.

0

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

.container .right .chat { 
    justify-content : flex-end; 
} 

Но при размещении пузырьков внизу возникает следующая проблема. Я думаю, вы можете решить это, установив flex-direction как reverse-reverse. Возможно, вам нужно разместить контент в обратном порядке.

.container .right .chat { 
    justify-content : initial; 
    flex-direction: column-reverse; 
} 
Смежные вопросы