2016-04-08 18 views
1

私はチャットHTMLテンプレートを作成しようとしています。しかし、私はメッセージ領域をスクロール可能にするいくつかの問題を抱えています。divで位置を絶対スクロール可能にする

チャットヘッダー:チャットや名前の人のタイトルを持つトップへ

私の構造は次のようです。
チャット入力メッセージ:あなたが書くことができます。
チャットの表示領域:合計の高さ - (チャットヘッダーの高さ+チャットの入力メッセージの高さ)。
メッセージ:最後のメッセージを読むには、高さを増やす必要がありますが、常にチャットの表示領域の下部にある必要があります。

この構造はすべて他のhtml要素と一緒に存在し、フルスクリーンではありません。

enter image description here

私のHTML構造は次のようである:

<div id="chat-1" class="chat-ventana"> 
    <div class="chat-header"> 
     <h4>Header</h4> 
    </div> 
    <div class="chat-mensajes-contenedor"> 
     <div class="chat-mensajes-contenedor-general"> 
      <div class="mensaje-contenedor"> 
       <!-- messages content --> 
      </div> 
     </div> 
    </div> 
    <div class="chat-textarea"> 
     <textarea class="form-control" placeholder="Type your message"></textarea> 
     <a href="#" class="mensaje-enviar"></a> 
    </div> 
</div> 

そして、私のCSSに見えますこれです:

.chat-container { 
    height: 70vh; 
    min-height: 400px; 
} 

.chat-ventana { 
    position: relative; 
    display: inline-block; 
    width: 65%; 
    float: left; 
} 

.chat-ventana, .chat-mensajes-contenedor { 
    height: 100%; 
} 

.chat-mensajes-contenedor, .chat-mensajes-contenedor-general { 
    padding: 15px 15px 20px 15px; 
} 

.chat-header { 
    z-index: 1; 
    position: absolute; 
    top: 0; 
    left: 0; 
    width: 100%; 
} 

.chat-mensajes-contenedor { 
    position: relative; 
    overflow-x: hidden; 
    overflow-y: scroll; 
    height: 400px; 
} 

.chat-mensajes-contenedor-general { 
    position: absolute; 
    bottom: 0; 
    left: 0; 
    width: 100%; 
} 

.chat-ventana, .chat-mensajes-contenedor { 
    height: 100%; 
} 

.chat-mensajes-contenedor { 
    height: calc(100% - 46px); 
} 

.chat-mensajes-contenedor, .chat-mensajes-contenedor-general { 
    padding: 66px 20px 25px 20px; 
} 

.chat-textarea { 
    position: absolute; 
    bottom: 0; 
    left: 0; 
    width: 100%; 
} 
.chat-textarea .form-control { 
    resize: none; 
    height: 46px; 
    padding: 10px 20px; 
} 

私はposition: relative;.chat-mensajes-contenedor-generalを設定した場合、それはscrolleableなるが、私見ますそれを底に置くことはできません。

+1

を教えてくださいfor:https://jsfiddle.net/gLahjk5z/。私があなたの質問を理解しているかどうか完全には分からない。 – theblindprophet

+0

@theblindprophet実際に私はメッセージが常に底にあることが必要です。チャットの自然な振る舞いのように。最後のメッセージは常に可視領域の一番下にあり、上にスクロールします。 –

+0

ああ、テキストがすでに下にスクロールされることを除いて、それはあなたが望むものです。 – theblindprophet

答えて

1

私はあなたが何をしているのか分かります。

そして、あなたは私たちは、あなたが、もちろん同じ最終結果を達成するために(下記の場合にはjQueryを使用して)それの少しを採用することができるのJavaScriptを使用することはできませんと言っていなかったので、それはおそらく明白だが:

[ JSFIDDLE]

function returnScrollHeight() { 
    return this.scrollHeight; 
} 

$('.chat-mensajes-contenedor').scrollTop(returnScrollHeight); 

$('textarea.form-control').on('keyup', function (e) { 
     if (e.ctrlKey && e.keyCode === 13) { 
     $('.mensaje-contenedor').append('<div class="line">' + this.value + '</div>'); 

     $('.chat-mensajes-contenedor').scrollTop(returnScrollHeight); 

     this.value = ''; 
    } 
}); 

私は私が試した短時間での非jsの解決策を考え出すことができませんでした。うまくいけば、誰かが一緒に来て、純粋なHTML/CSSの答えを与えるでしょう。ここで

+0

実際、JQueryは私にとってはうまくいくが、HTML/CSSの答えは素晴らしいだろう!私はHTMLのWebサイトとIonicでこれを実装したいので、WebではJQueryが動作します(Ionicではそれについて非常に新しいことは分かりません)。 あなたのjsfiddleは多くの助けになりますが、1つの質問だけです。会話の始めのようなコンテンツがほとんどない場合はどうすればよいですか?コンテンツはまだウィンドウの上部にあります。 –

+0

.mensaje-contenedorにpadding-topを追加することもできます(この更新されたphiddlを見てください)(https://jsfiddle.net/damo_s/ye199qe1/2/)フレックスボックスではまだ完全に最新ではありませんが、別の答えがより良い選択肢かもしれないことを使用して大丈夫。 –

+0

私はIEをサポートする必要があるので、flexboxはオプションではありません。しかし、ありがとう!この答えは、私が持っていた基本的な問題を解決します。 –

1

はフィドルです:https://jsfiddle.net/gLahjk5z/3/

私はposition: relativeに位置スタイルを変更し、あなたの高さの要素の一部を変更しました。

私はその後、文書準備で実行するために、このjQueryの機能を追加しました:

$(document).ready(function() { 
    var bottom = $(".mensaje-contenedor").height(); 
    $(".chat-mensajes-contenedor").scrollTop(bottom); 
}) 

このCSSのメッセージは常に一番下の使用に表示されるようにするには:これは、あなたが探しているものであれば

.chat-mensajes-contenedor-general { 
    min-height: 100%; 
    display: flex; 
    align-items: center; 
    justify-content: center; 
} 
.mensaje-contenedor { 
    align-self: flex-end; 
} 
+0

私はあなたにjsfiddleを見ました。しかし、もしも 'mensaje-contenedor'の高さよりも内容が少ないのであれば、ただ一つ質問してください。内容は最下位ではありません。例えば、チャットの始まり、例えば2つのメッセージ。私のjsfiddleアップデートを確認してください。https://jsfiddle.net/JMarqz/gLahjk5z/2/ありがとうございます! –

+0

私は私の答えとそれを可能にするjqueryを編集しました。 – theblindprophet

+0

答えをありがとう、私はIEのサポートを与える必要があるため、私は100%フレックスボックスを使用することはありません。しかし、ありがとう、それは私をたくさん助けます。 –

関連する問題