Chat Screen

์žฌ์šฐยท2023๋…„ 6์›” 25์ผ
0

์ฝ”์ฝ”์•„ํ†ก

๋ชฉ๋ก ๋ณด๊ธฐ
10/11

๐Ÿ˜‚์ฒ˜์Œ์— ํ—ค๋” ๋ถ€๋ถ„์— '๋ฐ•๋ณด์˜' ํ…์ŠคํŠธ๊ฐ€ ํ™”๋ฉด ์ค‘์•™์— ์žˆ์ง€์•Š๋‹ค. ์ด๋ฅผ ์กฐ์ •ํ•ด๋ณผ๊ฒƒ์ด๋‹ค.




1. ๋จผ์ € ๊ฐ ์ปฌ๋Ÿผ(<,๋ฐ•๋ณด์˜,๋‹๋ณด๊ธฐ)์˜ ๋„ˆ๋น„๋ฅผ ์ „์ฒดํ™”๋ฉด๋Œ€๋น„ 33%๋กœ ์„ค์ •ํ•œ๋‹ค.

.alt-header__column {
  width: 33%;
}


  1. ์ œ์ผ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ์ปฌ๋Ÿผ(๋‹๋ณด๊ธฐ)์— display:flex๋ฅผ ์ ์šฉํ•˜๊ณ  justify-contents: flex-end ๋ฅผ ํ†ตํ•ด ์˜ค๋ฅธ์ชฝ ๋์œผ๋กœ ์œ„์น˜์‹œํ‚จ๋‹ค.
.alt-header__column:last-child {
  margin-left: auto; 
  display: flex;
  justify-content: flex-end;
}



3. ๋‘๋ฒˆ์งธ์ปฌ๋Ÿผ(๋ฐ•๋ณด์˜)์— text-align:center๋ฅผ ์ ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ๊ฐ€ ์ค‘์•™์— ์˜ค๊ฒŒํ•œ๋‹ค.

.alt-header__column:nth-child(2) {
  text-align: center;
}

๐Ÿ˜Š์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ชจ๋“  ์—ด์ด ๊ฐ™์€ ๋„ˆ๋น„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.





์ƒํƒœ๋ฐ”์™€ ํ—ค๋”์— ๋ฐฐ๊ฒฝ์ƒ‰์„ ์ ์šฉํ•˜๋‹ˆ ์ƒํƒœ๋ฐ”๊ฐ€ ๊ฐ€๋ ค์ง€๋Š” ์ ์„ ํ•ด๊ฒฐํ•ด๋ณด์ž. ์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ํ—ค๋”๊ฐ€ ์ƒํƒœ๋ฐ”๋ฅผ ๊ฐ€๋ฆฌ๊ณ ์žˆ๋‹ค.

๐Ÿ’กz-index๋ผ๋Š” ์†์„ฑ์œผ๋กœ ํ•ด๊ฒฐํ• ์ˆ˜์žˆ๋‹ค.

  • z-index๋Š” layer๊ฐ™์€๊ฒƒ์ด๋‹ค. ์ฆ‰ layer์˜ ์ˆœ์„œ(์š”์†Œ์˜ ์ˆœ์„œ)๊ฐ€ ๋ช‡๋ฒˆ์งธ์ธ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • z-index์˜ ๊ฐ’์ด ์ž‘์„์ˆ˜๋ก layer๊ฐ€ ๋’ค์— ์œ„์น˜ํ•œ๋‹ค. z-index ์†์„ฑ์˜ ๊ธฐ๋ณธ๊ฐ’์€ 0์ด๋‹ค.
  • display ์ž‘์—…์„ ํ•˜๊ฑฐ๋‚˜, position์ด ๊ณ ์ •๋˜์–ด์žˆ์œผ๋ฉด layer๋ฅผ ๊ฐ–๊ฒŒ๋œ๋‹ค.์ ˆ๋Œ€์ ์ธ ์œ„์น˜(absolute position)๋‚˜ ๊ณ ์ •๋œ ์œ„์น˜(fixed position)์— ๋Œ€ํ•ด์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ.
    -> ์—ฌ๊ธฐ์—์„  ์ƒํƒœ๋ฐ”์™€ ํ—ค๋”์˜ position์ด fixed๋ผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
#char-screen .status-bar {
  z-index: 2;
}

#chat-screen .alt-header {
  z-index: 1;
}
  • .status-bar์—๋Š” z-index: 2;๋ฅผ ์ฃผ๊ณ , .alt-header์—๋Š” z-index: 1;์„ ์ค˜์„œ ์ƒํƒœ๋ฐ”๋ฅผ ํ—ค๋” ์œ„๋กœ ์˜ฌ๋ฆฌ๋ฉด ๋จ!

๐Ÿ˜Š๐Ÿ˜Š ๊ทธ๋Ÿผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์ƒ์ ์œผ๋กœ ๋…ธ์ถœ๋œ๋‹ค.








<main class="main-screen main-chat">
      <div class="chat__timestamp">Sunday, June 26, 2023</div>
</main>
.chat__timestamp {
  color: white;
  background-color: #92a4b2;
  padding: 15px 15px;
  border-radius: 25px;
}
  • ์ด๋ ‡๊ฒŒ๋งŒ ์ž‘์„ฑํ•˜๋ฉด timestamp box๊ฐ€ ์˜†์œผ๋กœ ๊ธธ๊ฒŒ ๋…ธ์ถœ๋œ๋‹ค.



.main-chat {
  display:flex; 
}
  • ๋ถ€๋ชจ์— display:flex๋ฅผ ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค.



.main-chat {
 display: flex;
 flex-direction: column;
}
  • flex-direction: column; ์„ ์ฃผ๋ฉด ์ด๋ ‡๊ฒŒ ๋œ๋‹ค. align-items:center; ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.



.main-chat {
  margin-top: 150px;
  display: flex;
  flex-direction: column;
  align-items: center;
}
  • ์ •๋ฆฌํ•˜์ž๋ฉด, div๋Š” block์ด๋ผ์„œ ์–‘ ์˜†์œผ๋กœ ๊ธด๋ฐ, display:flex;๋ฅผ ํ•˜๋ฉด div๊ฐ€ ๊ธ€์žํฌ๊ธฐ์— ๋งž์ถฐ์„œ ์ค„์–ด๋“ ๋‹ค. ์ฆ‰ content์˜ width๋งŒํผ ๊ฐ€๋กœ๊ฐ€ ์ค„์–ด๋“ ๋‹ค. ํ•˜์ง€๋งŒ flex-direction:column; ์„ ํ•˜๋ฉด content์˜ height๋งŒํผ ์„ธ๋กœ๊ฐ€ ์ค„์–ด๋“ ๋‹ค. ์—ฌ๊ธฐ์— align-items:center; ๋ฅผ ์ฃผ๊ฒŒ๋˜๋ฉด ๋‹ค์‹œ content์˜ width๋งŒํผ ๊ฐ€๋กœ๊ฐ€ ์ค„์–ด๋“ ๋‹ค.
  • ์ฆ‰, flex-direction:column์„ ํ•ด์„œ ์„ธ๋กœ๋กœ ์š”์†Œ๋“ค์ด ๋ฐฐ์—ด๋˜๊ฒŒ ํ•˜๋˜, timestamp๋ฅผ ์ค‘์•™ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ align-items๋ฅผ ํ™œ์šฉํ•˜๋Š”๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ˆ˜ํ‰์ด ๋œ ์„ธ๋กœ์ถ•(Cross Axis)์„ ๊ธฐ์ค€์œผ๋กœ ์ค‘์•™์ •๋ ฌ(align-itmes: center)ํ•˜๋ฉด ๊ฐ€์šด๋ฐ์— ์˜จ๋‹ค.



๋˜ ๋‹ค๋ฅธ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž.

  • .main-chat{ }์— display:flex๋งŒ ์ฃผ๊ฒŒ๋˜๋ฉด
    .chat__timestamp์™€ .message-row๋Š” ๊ฐ๊ฐ ์˜†์œผ๋กœ ๋‚˜๋ž€ํžˆ ์ •๋ ฌ๋œ๋‹ค.


  • ๊ทธ๋ž˜์„œ flex-direction: column;์„ ์ฃผ๋ฉด ์„ธ๋กœ๋กœ ์ •๋ ฌ๋œ๋‹ค.



  • ๊ทธ๋ฆฌ๊ณ  ์ˆ˜ํ‰์ด ๋œ ์„ธ๋กœ์ถ•(Cross Axis)์„ ๊ธฐ์ค€์œผ๋กœ ์ค‘์•™์ •๋ ฌ(align-itmes: center)ํ•˜๋ฉด ๊ฐ€์šด๋ฐ์— ์˜จ๋‹ค.


  • ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ box์˜ ์‚ฌ์ด์ฆˆ๋ฅผ .message-row { width: 100%; }๋ฅผ ์ฃผ์–ด์„œ ๋ถ€๋ชจ์˜ ๋„ˆ๋น„์™€ ๋™์ผํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.



  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ •๋ ฌ๋จ




flex-direction: row-reverse์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

  • ์—ฌ๊ธฐ์„œ๋Š” .message__info{ } ๊ฐ€ flex container์ด๋‹ค.
    flex์˜ ์ž์‹๋“ค์—๊ฒŒ๋Š” order์ด๋ผ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค. ์š”์†Œ์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

.message-row--own .message__bubble {
  order: 1;
}

.message-row--own .message__time {
  order: 0;
}
  • ์ด๋ ‡๊ฒŒ ์ฃผ๊ฒŒ๋˜๋ฉด ๋‘ ์š”์†Œ์˜ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€๋‹ค. order๊ฐ€ ์ž‘์„์ˆ˜๋ก ๋จผ์ €์ธ๊ฒƒ์ด๋‹ค.

==> ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ๋„ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ƒฅ flex-direction :row-reverse ๋ผ๊ณ  ์ฃผ๋ฉด๋œ๋‹ค. ๊ธฐ๋Šฅ์€ ๋™์ผํ•˜๋‹ค.





์ด์ œ, ์ž…๋ ฅ ๋ถ€๋ถ„์„ ๋งŒ๋“ค์–ด ๋ณผ๊ฒƒ์ด๋‹ค.

.
.
.
<form class="reply">
      <div class="reply__column">
        <i class="fas fa-plus-square"></i>
      </div>
      <div class="reply__column">
        <input type="text" placeholder="Write a Message" />
        <i class="far fa-smile"></i>
        <i class="fas fa-arrow-up"></i>
      </div>
</form>
.
.
.




.reply {
  position: fixed;
  bottom: 0;
  width: 100%;
}

๊ทธ ๋‹ค์Œ์€ ์ž…๋ ฅ ๋ถ€๋ถ„์„ ๋งจ๋ฐ‘์œผ๋กœ ๋‚ด๋ฆฐ๋‹ค.




.reply {
  position: fixed;
  bottom: 0;
  width: 100%;
  background-color: white;
  display: flex;
  justify-content: space-between;
  padding: 5px 15px;
  align-items: center;
}

์ด๋ ‡๊ฒŒ ์ผ๋‹จ ํ•ด์ฃผ๋ฉด ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋œ๋‹ค.




์—ฌ๊ธฐ์„œ, <input>์— width: 100%๋ฅผ ์ฃผ๋ ค๊ณ ํ•˜๋Š”๋ฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถ€๋ชจ์š”์†Œ๊ฐ€ <body>๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋ถ€๋ชจ์š”์†Œ๊ฐ€ width๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” <input>์˜ ๋ถ€๋ชจ์š”์†Œ์ธ <div class="reply__column">๊ฐ€ width๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์ฃผ๋ฉด ์•„๋ž˜ ๊ทธ๋ฆผ ์ฒ˜๋Ÿผ ๋œ๋‹ค.

<input>, <i>์€ ๋ชจ๋‘ ์ธ๋ผ์ธ ์š”์†Œ๋ผ์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์˜†์— ๋‹ค๋ฅธ ์ธ๋ผ์ธ ์š”์†Œ๊ฐ€ ์™€์•ผํ•˜๋Š”๋ฐ, input์š”์†Œ์— width๋ฅผ 100%์คฌ๊ธฐ๋•Œ๋ฌธ์— <input>์š”์†Œ๊ฐ€ ๋„ˆ๋น„๋ฅผ ๋ชจ๋‘ ์ฐจ์ง€ํ•˜๊ฒŒ๋œ๋‹ค. ๊ทธ๋ž˜์„œ <i>์š”์†Œ๋Š” ๋‹ค์Œ ์ค„์— ๋ฐฐ์น˜๋œ๋‹ค.



๊ทธ ๋‹ค์Œ์—, ๋‘ ์•„์ด์ฝ˜์„ absolute๋กœ ๋งŒ๋“ค๊ฒƒ์ด๋‹ค. ์•„์ด์ฝ˜์„ top,bottom,left,right์„ ํ†ตํ•ด input์œ„์— ์˜ฌ๋ฆด๊ฒƒ์ด๋‹ค.
๊ทธ๋Ÿฌ๋ ค๋ฉด ์ผ๋‹จ <div class="reply__column">์€ position:relative ๊ฐ€ ๋˜์•ผํ•œ๋‹ค.

.reply .reply__column:last-child {
  width: 90%;
  position: relative;
}

0๊ฐœ์˜ ๋Œ“๊ธ€