Hello Kitty Eyes Shut
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป ์›น/๐Ÿ“Œ ์›น ๊ธฐ์ดˆ

[์›น ๊ธฐ์ดˆ] ๊ฐ„๋‹จํ•œ ์ฑ„ํŒ…์ฐฝ ๋งŒ๋“ค๊ธฐ ์‹ค์Šต

๋ฐ˜์‘ํ˜•

 

 

 

 

 

์ง€๊ธˆ๊นŒ์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณธ HTML๊ณผ CSS ๊ธฐ์ดˆ๋ฅผ ํ™œ์šฉํ•ด์„œ

๊ฐ„๋‹จํ•œ ์ฑ„ํŒ…์ฐฝ UI๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋Š”๋ฐ,

์ด๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

 

๐Ÿงฑ ์ „๋ฐ˜์ ์ธ HTML ๊ตฌ์กฐ

<!DOCTYPE html>
<html>
    <head>
        <title>์ฑ„ํŒ…์ฐฝ ๋งŒ๋“ค๊ธฐ ์—ฐ์Šต</title>
        <style> ... </style>
    </head>
    <body>
        <div class="chat">
            <div class="message friend">
                ...
            </div>
            <div class="message me">
                ...
            </div>
            <div class="message friend">
                ...
            </div>
            <div class="message me">
                ...
            </div>
        </div>
    </body>
</html>

 

1๏ธโƒฃ <!DOCTYPE html>

๋จผ์ € ์ด ๋ฌธ์„œ๋Š” HTML5 ๋ฌธ์„œ์ž„์„ ์„ ์–ธํ•ด์ค€๋‹ค.

 

2๏ธโƒฃ <html> ... </html>

HTML ๋ฌธ์„œ ์ „์ฒด๋ฅผ ๊ฐ์‹ธ์ค€๋‹ค.

 

3๏ธโƒฃ <head> ... </head>

๋ฌธ์„œ ์ •๋ณด๋ฅผ ์„ค์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ,

title ํƒœ๊ทธ ์•ˆ์—๋Š” ํƒญ ์ œ๋ชฉ์— ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ๊ตฌ๋ฅผ ์„ค์ •ํ•ด์ฃผ๊ณ ,

style ํƒœ๊ทธ ์•ˆ์—๋Š” ์ง์ ‘ CSS ์Šคํƒ€์ผ๋“ค์„ ์ž‘์„ฑํ•ด์ค€๋‹ค.

 

4๏ธโƒฃ <body> ... </body>

์šฐ๋ฆฌ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹ค์ œ๋กœ ๋ณด๊ฒŒ ๋˜๋Š” ์›น ํŽ˜์ด์ง€ ๋‚ด์šฉ์— ๋Œ€ํ•œ ๊ฒƒ์œผ๋กœ,

chat ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์ „์ฒด ์ฑ„ํŒ… UI๋ฅผ ๊ฐ์‹ธ์ฃผ๊ณ ,

๋‚ด๋ถ€๋Š” ๊ฐ๊ฐ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” message ํด๋ž˜์Šค๋“ค๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

 

 

๐Ÿ“ฉ chat ํด๋ž˜์Šค ๋‚ด๋ถ€ ๊ตฌ์กฐ

        <div class="chat">
            <div class="message friend">
                <div class="message-info">์†Œ์—ฐ</div>
                <p class="message-body">์˜ค๋Š˜ ๋ฐ”๋น ?</p>
                <time class="message-time">์˜ค์ „ 11:18</time>
            </div>
            <div class="message me">
                <p class="message-body">์•„๋‹ˆ ์™œ?</p>
                <time class="message-time">์˜ค์ „ 11:23</time>
            </div>
            <div class="message friend">
                <div class="message-info">์†Œ์—ฐ</div>
                <p class="message-body">๊ทธ๋ƒฅ ์‹ฌ์‹ฌํ•ด์„œ..</p>
                <time class="message-time">์˜ค์ „ 11:24</time>
            </div>
            <div class="message me">
                <p class="message-body">๊ทธ๋Ÿผ ๊ฐ™์ด ์ ์‹ฌ ๋จน์ž !!</p>
                <time class="message-time">์˜ค์ „ 11:27</time>
            </div>
        </div>

 

๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ์‚ฌ๋žŒ์ด ๋‚˜์ธ์ง€ ์ƒ๋Œ€๋ฐฉ์ธ์ง€,

์ง€๊ธˆ ํ‘œ์‹œํ•˜๋Š” ์ •๋ณด๊ฐ€ ์ƒ๋Œ€๋ฐฉ์˜ ์ด๋ฆ„์— ๋Œ€ํ•œ ๊ฒƒ์ธ์ง€,

๋ณธ๋ฌธ ํ…์ŠคํŠธ ๋‚ด์šฉ์ธ์ง€, ๋ณด๋‚ธ ์‹œ๊ฐ์ธ์ง€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด

๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค ์ด๋ฆ„๋“ค์„ ๋ถ™์—ฌ์ค€๋‹ค.

 

1๏ธโƒฃ me | friend

๋ณด๋‚ธ ์‚ฌ๋žŒ์ด ๋‚˜์ธ์ง€ ์ƒ๋Œ€๋ฐฉ์ธ์ง€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค

 

2๏ธโƒฃ message-info

๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ ์ƒ๋Œ€๋ฐฉ์˜ ์ •๋ณด์ž„์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค

 

3๏ธโƒฃ message-body

๋ฉ”์‹œ์ง€์˜ ํ…์ŠคํŠธ ๋‚ด์šฉ์ž„์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค

 

4๏ธโƒฃ message-time

๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ ์‹œ๊ฐ์ž„์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค

 

 

๐ŸŽจ style ํƒœ๊ทธ ์•ˆ CSS ์†์„ฑ

๐Ÿงพ ์ „์ฒด ํŽ˜์ด์ง€ ์Šคํƒ€์ผ ์„ค์ •

body {
    font-family: 'Arial', sans-serif;
    margin: 0;
    padding: 0;
    background-color: aliceblue;
}

 

1๏ธโƒฃ font-family๋ฅผ ํ†ตํ•ด ๊ธ€๊ผด ์„ค์ •

Arial ํฐํŠธ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ์ ์šฉํ•˜๊ณ ,

๋งŒ์•ฝ ์ด ํฐํŠธ๊ฐ€ ์—†๋‹ค๋ฉด sans-serif ํฐํŠธ๋กœ ์„ค์ •ํ•œ๋‹ค.

(๊ฐ€์žฅ ์šฐ์„ ์ ์œผ๋กœ ์ ์šฉ๋˜๊ธธ ์›ํ•˜๋Š” ํฐํŠธ๋ฅผ ๊ฐ€์žฅ ์™ผ์ชฝ์— ํ‘œ๊ธฐํ•œ๋‹ค.)

 

2๏ธโƒฃ margin์„ ํ†ตํ•ด ์™ธ๋ถ€ ์—ฌ๋ฐฑ ์„ค์ •

0์œผ๋กœ ์ฃผ์–ด ์™ธ๋ถ€ ์—ฌ๋ฐฑ์„ ์—†์• ์ค€๋‹ค.

 

3๏ธโƒฃ padding์„ ํ†ตํ•ด ๋‚ด๋ถ€ ์—ฌ๋ฐฑ ์„ค์ •

0์œผ๋กœ ์ฃผ์–ด ๋‚ด๋ถ€ ์—ฌ๋ฐฑ์„ ์—†์• ์ค€๋‹ค.

 

4๏ธโƒฃ background-color ์„ค์ •

๋ฐฐ๊ฒฝ ์ƒ‰์ƒ์„ ์›ํ•˜๋Š” ์ƒ‰์ƒ์œผ๋กœ ์„ค์ •ํ•ด์ค€๋‹ค.

 

 

๐Ÿ“ฆ ์ฑ„ํŒ… ๋ฐ•์Šค ์Šคํƒ€์ผ ์„ค์ •

.chat {
    width: 100%;
    max-width: 300px;
    margin: auto;
    padding: 20px;
    background-color: #fdefff;
}

 

1๏ธโƒฃ width ์„ค์ •

100%๋กœ ์„ค์ •ํ•ด์„œ ๋ฐ˜์‘ํ˜•์œผ๋กœ ๋„ˆ๋น„๋ฅผ ๊ฝ‰ ์ฑ„์šฐ๋„๋ก ํ•œ๋‹ค.

 

2๏ธโƒฃ max-width ์„ค์ •

์ตœ๋Œ€ ๋„ˆ๋น„๋ฅผ 300px๋กœ ์ œํ•œํ•œ๋‹ค.

 

3๏ธโƒฃ margin์œผ๋กœ ์ •๋ ฌ

auto๋กœ ํ•˜์—ฌ ๊ฐ€์šด๋ฐ ์ •๋ ฌ ๋˜๋„๋ก ํ•œ๋‹ค.

 

4๏ธโƒฃ padding ์„ค์ •

์•ˆ์ชฝ ์—ฌ๋ฐฑ์„ 20px๋กœ ์„ค์ •ํ•œ๋‹ค.

 

5๏ธโƒฃ background-color ์„ค์ •

์ฑ„ํŒ…์ฐฝ์˜ ๋ฐฐ๊ฒฝ ์ƒ‰์ƒ์„ ์›ํ•˜๋Š” ์ƒ‰์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.

 

 

๐Ÿงฑ ๋ฉ”์‹œ์ง€ ๋ฐ•์Šค ๊ณตํ†ต ์„ค์ •

.message {
    display: flex;
    flex-direction: column;
    margin-bottom: 10px;
}

 

1๏ธโƒฃ display + flex-direction ์„ค์ •

display๋ฅผ flex๋กœ ํ•˜๊ณ ,

flex-direction์„ column์œผ๋กœ ์„ค์ •ํ•ด์„œ

์„ธ๋กœ๋กœ ์Œ“๋Š” ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

 

2๏ธโƒฃ margin-bottom ์„ค์ •

10px๋กœ ์„ค์ •ํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ํ’์„  ์‚ฌ์ด์‚ฌ์ด์— ๊ฐ„๊ฒฉ์„ ์ค€๋‹ค.

 

 

๐Ÿ• ๋ฉ”์‹œ์ง€ ์ด๋ฆ„ ๋ฐ ์‹œ๊ฐ„ ๊ด€๋ จ ์„ค์ •

.message-info {
    font-size: 0.85em;
    color: rgb(104, 104, 104);
}
.message-time {
    font-size: 0.75em;
    color: rgb(104, 104, 104);
}

 

1๏ธโƒฃ font-size ์„ค์ •

์ด๋ฆ„๊ณผ ์‹œ๊ฐ์„ ํ‘œ์‹œํ•  ํฐํŠธ ์‚ฌ์ด์ฆˆ๋ฅผ ์„ค์ •ํ•ด์ค€๋‹ค.

 

2๏ธโƒฃ color ์„ค์ •

๊ธ€์ž ํฌ๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์ƒ‰์ƒ์œผ๋กœ ์„ค์ •ํ•ด์ค€๋‹ค.

 

 

๐Ÿ’ฌ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ ์Šคํƒ€์ผ

.message-body {
    max-width: 80%;
    padding: 10px;
    border-radius: 10px;
    margin: 5px 0;
}

 

1๏ธโƒฃ max-width ์„ค์ •

80%๋กœ ์„ค์ •ํ•˜์—ฌ ํ…์ŠคํŠธ ์ฐฝ์ด ๋„ˆ๋ฌด ํฌ์ง€ ์•Š๋„๋ก ์„ค์ •ํ•œ๋‹ค.

 

2๏ธโƒฃ padding ์„ค์ •

์ฑ„ํŒ… ๋งํ’์„  ๋‚ด๋ถ€ ์—ฌ๋ฐฑ์„ ์„ค์ •ํ•œ๋‹ค.

(๊ธ€์ž๊ฐ€ ๋งํ’์„ ์— ๊ฝ‰ ์ฐจ๋ฉด ์ด์ƒํ•˜๋‹ˆ๊นŒ)

 

3๏ธโƒฃ border-radius ์„ค์ •

10px๋กœ ์„ค์ •ํ•˜์—ฌ ๋งํ’์„ ์„ ๋‘ฅ๊ทผ๋„ค๋ชจ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

 

4๏ธโƒฃ margin ์„ค์ •

์œ„์•„๋ž˜ ์—ฌ๋ฐฑ์„ ์„ค์ •ํ•ด์ค€๋‹ค.

์›๋ž˜๋Š” margin: (์œ„) (์˜ค๋ฅธ์ชฝ) (์•„๋ž˜) (์™ผ์ชฝ) ์ˆœ์„œ๋กœ ์—ฌ๋ฐฑ์„ ์ง€์ •ํ•˜๋Š”๋ฐ,

์ง€๊ธˆ์ฒ˜๋Ÿผ ์•ž์— 2๊ฐœ๋งŒ ์„ค์ •ํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” ์œ„, ์˜ค๋ฅธ์ชฝ ์—ฌ๋ฐฑ์„ ์ง์ ‘์ ์œผ๋กœ ์ง€์ •ํ•ด์ค€ ๊ฒƒ์ด๊ณ ,

์•„๋ž˜๋Š” ์œ„์™€ ๋™์ผํ•˜๊ฒŒ, ์™ผ์ชฝ์€ ์˜ค๋ฅธ์ชฝ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ž๋™์œผ๋กœ ์„ค์ •๋œ๋‹ค.

-> ์ฆ‰, ์šฐ๋ฆฌ๋Š” margin: 5px 0 5px 0;์œผ๋กœ ์„ค์ •ํ•œ ๊ฒƒ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

๐Ÿ–ฑ๏ธ ๋งํ’์„  ํ˜ธ๋ฒ„ ํšจ๊ณผ ์„ค์ • (๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ธ์„ ๋•Œ)

.message-body:hover {
    transition: box-shadow 0.8s;
    box-shadow: 0 0 15px rgba(0, 0, 0, 0.8);
}

 

1๏ธโƒฃ transition ์„ค์ •

box-shadow ์†์„ฑ์ด ๋ณ€๊ฒฝ๋  ๋•Œ 0.8์ดˆ ๋™์•ˆ ์ „ํ™˜ ํšจ๊ณผ๋ฅผ ์ฃผ๋„๋ก ์„ค์ •ํ•œ๋‹ค.

 

2๏ธโƒฃ box-shadow ์„ค์ •

์š”์†Œ์— 15px์˜ ์–ด๋‘์šด ๊ทธ๋ฆผ์ž ํšจ๊ณผ๋ฅผ ์„ค์ •ํ•œ๋‹ค.

์ด ๋•Œ, 0 0์€ (x, y) ์œ„์น˜๋Š” ์—†๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

(์œ„ ์•„๋ž˜ ์–‘์˜† ๋ชจ๋‘ ๊ทธ๋ฆผ์ž ์ƒ์„ฑ)

 

 

๐Ÿ“ ๋ณด๋‚ธ ์‚ฌ๋žŒ์— ๋”ฐ๋ฅธ ์œ„์น˜ ์„ค์ •

.me .message-time {
    align-self: flex-end;
}

.friend .message-time {
    align-self: flex-start;
}

 

1๏ธโƒฃ .me

๋‚ด๊ฐ€ ๋ณด๋‚ธ ๋ฉ”์‹œ์ง€๋Š” ๋งํ’์„ ์˜ ์˜ค๋ฅธ์ชฝ (๋)์— ๋ฐฐ์น˜ํ•œ๋‹ค.

 

2๏ธโƒฃ .friend

์ƒ๋Œ€๋ฐฉ์ด ๋ณด๋‚ธ ๋ฉ”์‹œ์ง€๋Š” ๋งํ’์„ ์˜ ์™ผ์ชฝ (์ฒ˜์Œ)์— ๋ฐฐ์น˜ํ•œ๋‹ค.

 

 

๐ŸŽจ ๋ณด๋‚ธ ์‚ฌ๋žŒ์— ๋”ฐ๋ฅธ ๋งํ’์„  ์ƒ‰๊ณผ ์ •๋ ฌ ๊ตฌ๋ถ„

.friend .message-body {
    background-color: #fff;
    align-self: flex-start;
}

.me .message-body {
    background-color: rgb(255, 221, 244);
    align-self: flex-end;
}

 

1๏ธโƒฃ .friend

์นœ๊ตฌ๊ฐ€ ๋ณด๋‚ธ ๋ฉ”์‹œ์ง€๋Š” ํฐ์ƒ‰ ๋งํ’์„  + ์™ผ์ชฝ ์ •๋ ฌ ๋˜๋„๋ก ์„ค์ •ํ•œ๋‹ค.

 

2๏ธโƒฃ .me

๋‚ด๊ฐ€ ๋ณด๋‚ธ ๋ฉ”์‹œ์ง€๋Š” ๋ถ„ํ™์ƒ‰ ๋งํ’์„  + ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ ๋˜๋„๋ก ์„ค์ •ํ•œ๋‹ค.

 

 

โœ… ์ตœ์ข… ์ฝ”๋“œ

<!DOCTYPE html>
<html>
    <head>
        <title>์ฑ„ํŒ…์ฐฝ ๋งŒ๋“ค๊ธฐ ์—ฐ์Šต</title>
        <style>
            body {
                font-family: 'Arial', sans-serif;
                margin: 0;
                padding: 0;
                background-color: aliceblue;
            }

            .chat {
                width: 100%;
                max-width: 300px;
                margin: auto;
                padding: 20px;
                background-color: #fdefff;
            }

            .message {
                display: flex;
                flex-direction: column;
                margin-bottom: 10px;
            }

            .message-info {
                font-size: 0.85em;
                color: rgb(104, 104, 104);
            }

            .message-body {
                max-width: 80%;
                padding: 10px;
                border-radius: 10px;
                margin: 5px 0;
            }

            .message-body:hover {
                transition: box-shadow 0.8s;
                box-shadow: 0 0 15px rgba(0, 0, 0, 0.8);
            }

            .message-time {
                font-size: 0.75em;
                color: rgb(104, 104, 104);
            }

            .me .message-time {
                align-self: flex-end;
            }

            .friend .message-time {
                align-self: flex-start;
            }

            .friend .message-body {
                background-color: #fff;
                align-self: flex-start;
            }

            .me .message-body {
                background-color: rgb(255, 221, 244);
                align-self: flex-end;
            }


        </style>
    </head>
    <body>
        <div class="chat">
            <div class="message friend">
                <div class="message-info">์†Œ์—ฐ</div>
                <p class="message-body">์˜ค๋Š˜ ๋ฐ”๋น ?</p>
                <time class="message-time">์˜ค์ „ 11:18</time>
            </div>
            <div class="message me">
                <p class="message-body">์•„๋‹ˆ ์™œ?</p>
                <time class="message-time">์˜ค์ „ 11:23</time>
            </div>
            <div class="message friend">
                <div class="message-info">์†Œ์—ฐ</div>
                <p class="message-body">๊ทธ๋ƒฅ ์‹ฌ์‹ฌํ•ด์„œ..</p>
                <time class="message-time">์˜ค์ „ 11:24</time>
            </div>
            <div class="message me">
                <p class="message-body">๊ทธ๋Ÿผ ๊ฐ™์ด ์ ์‹ฌ ๋จน์ž !!</p>
                <time class="message-time">์˜ค์ „ 11:27</time>
            </div>
        </div>
    </body>
</html>

 

 

 

โœ… ๊ฒฐ๊ณผ

๊ธฐ๋ณธ ํ™”๋ฉด
ํ˜ธ๋ฒ„ ํ™”๋ฉด

๋ฐ˜์‘ํ˜•