๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
HTML + CSS ์‹œ๋ฆฌ์ฆˆ๐Ÿ•ธ

์นด๋“œ UI + ๋’ท ๋ฐฐ๊ฒฝ ๊ตฌ๋ถ„ [๊ตฌ๋ถ„์„  ์นด๋“œ UI] - feat.chatgpt

by @ENFJ 2024. 4. 8.

์š”์ฆ˜ ์‚ฌ์ดํŠธ UI ๋ฅผ ์‚ดํŽด๋ณด๋‹ˆ ์ด๋ ‡๊ฒŒ ์œ„์•„๋ž˜๋กœ ๋’ท๋ฐฐ๊ฒฝ ์ƒ‰์„ ๋‹ค๋ฅด๊ฒŒ ํ•œ๋’ค, ๊ทธ ์ƒ‰์ด ๊ตฌ๋ถ„๋˜๋Š” ์„  ์œ„์— ์นด๋“œ UI๋ฅผ ์œ„์น˜์‹œ์ผœ์„œ ์•„๋ž˜์™€ ๊ฐ™์€  ์ผ์ข…์˜ "๋ถ„ํ•  ๋ฐฐ๊ฒฝ" ๋˜๋Š” "๊ตฌ๋ถ„์„  ์นด๋“œ UI" ๋””์ž์ธ์„ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

chatgpt ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ค์–ด๋ณด์ž.
์ €์˜ ์ฝ”๋“œ ๊ฒฐ๊ณผ๋ฅผ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•œ ์งˆ๋ฌธ ๊ณผ์ •์ด์˜€์Šต๋‹ˆ๋‹ค.

1. ๋’ค์— ๋ฐฐ๊ฒฝ์„ 2:8 ๋น„์œจ๋กœ ๋ฐฐ๊ฒฝ์ƒ‰์„ ๋‚˜๋ˆ„๊ณ  ๊ทธ ์œ„์— ์นด๋“œํ˜• UI๋กœ ๋›ฐ์šฐ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
2. ์œ„ ์•„๋ž˜๋กœ ๋ฐฐ๊ฒฝ์ƒ‰์„ ๋‚˜๋ˆ„์„ธ์š”
3. ๋’ท ๋ฐฐ๊ฒฝ ๋‚˜๋ˆ ์ง€๋Š” ๋ถ€๋ถ„์— ์นด๋“œ๋ฅผ ์œ„์น˜์‹œ์ผœ์ฃผ์„ธ์š”.
4. ๋’ท ๋ฐฐ๊ฒฝ์„ ์œ„์•„๋ž˜๋กœ ๋‚˜๋ˆ„๊ณ , ๋‚˜๋ˆ ์ง€๋Š” ์„  ์œ„์— ์นด๋“œ๋ฅผ ๋ฐฐ์น˜์‹œ์ผœ์ฃผ์„ธ์š”.
5. ๊ทธ์น˜๋งŒ ์•„์ง ์ œ๊ฐ€ ์›ํ•˜๋Š”๋Œ€๋กœ ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์นด๋“œ ๋ฅผ ๋งจ ์•ž์œผ๋กœ ์œ„์น˜์‹œ์ผœ์„œ ์นด๋“œ ๋’ค์— ๋ฐฐ๊ฒฝ์ด ๋‚˜์˜ค๋„๋ก ํ•ด์ฃผ์„ธ์š”

 

 

๊ฒฐ๊ณผ

 

์ฝ”๋“œ

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>๊ณต์ง€์‚ฌํ•ญ ์ˆ˜์ •</title>
    <link rel="stylesheet" href="/css/styles.css">
    <link rel="stylesheet" href="/css/notice/notice-edit.css">
    <!-- Bootstrap core JS-->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
    <script src="https://cdn.startbootstrap.com/sb-forms-latest.js"></script>

    <!-- CSRF ๋กœ ์ธํ•œ 403 ์—๋Ÿฌ ๋ฌธ์ œ ํ•ด๊ฒฐ -->
    <meta name="_csrf" th:content="${_csrf.token}"/>
    <meta name="_csrf_header" th:content="${_csrf.headerName}"/>

    <style>
        /* ๋ฐฐ๊ฒฝ์„ ์œ„ ์•„๋ž˜๋กœ ๋‚˜๋ˆ„๊ณ  ์นด๋“œ๋ฅผ ๋งจ ์•ž์œผ๋กœ ์œ„์น˜์‹œํ‚ค๋Š” ์Šคํƒ€์ผ */
        .container {
            position: relative;
            width: 100%;
            height: 100vh;
            overflow: hidden;
        }
        .background {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            display: flex;
            flex-direction: column;
        }
        .top-bg, .bottom-bg {
            flex: 1;
        }
        .card-wrapper {
            position: relative;
            z-index: 1; /* ์นด๋“œ๋ฅผ ๋งจ ์•ž์œผ๋กœ ์œ„์น˜์‹œํ‚ด */
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100%;
        }
        .card {
            width: 80%;
            padding: 20px;
            background-color: white;
            border-radius: 10px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
        }
    </style>
</head>
<body>
<div class="container">
    <div class="background">
        <div class="top-bg" style="background-color: #E9ECEF;">
            <!-- ์œ„์ชฝ ๋ฐฐ๊ฒฝ์ƒ‰ -->
        </div>
        <div class="bottom-bg" style="background-color: #F8F9FA;">
            <!-- ์•„๋ž˜์ชฝ ๋ฐฐ๊ฒฝ์ƒ‰ -->
        </div>
    </div>
    <div class="card-wrapper">
        <div class="card">
            <!-- ์ˆ˜์ •ํ•  ๋‚ด์šฉ ์ž…๋ ฅ ํผ -->
            <h2>๊ณต์ง€์‚ฌํ•ญ ์ˆ˜์ •</h2>
            <form id="editNoticeForm">
                <div class="mb-3">
                    <label for="title" class="form-label">์ œ๋ชฉ</label>
                    <input type="text" class="form-control" id="title" name="title" th:value="${notice.title}" required>
                </div>
                <div class="mb-3">
                    <label for="content" class="form-label">๋‚ด์šฉ</label>
                    <textarea class="form-control" id="content" name="content" rows="5" th:text="${notice.content}" required></textarea>
                </div>
                <input type="hidden" id="noticeId" name="noticeId" th:value="${notice.id}">
                <button type="button" class="btn btn-primary" onclick="submitEditNotice()">์ˆ˜์ •</button>
            </form>
        </div>
    </div>
</div>
</body>
</html>

 

์œ„ ์ฝ”๋“œ์—์„œ๋Š” .container ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ๋ฐฐ๊ฒฝ์„ ๊ฐ์‹ธ๊ณ , ๋ฐฐ๊ฒฝ์„ ์œ„ ์•„๋ž˜๋กœ ๋‚˜๋ˆ„๋Š” .background ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์นด๋“œ๋ฅผ ๋งจ ์•ž์œผ๋กœ ์œ„์น˜์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์นด๋“œ๋ฅผ ๊ฐ์‹ธ๋Š” .card-wrapper ํด๋ž˜์Šค์— z-index: 1; ์†์„ฑ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์นด๋“œ๊ฐ€ ๋ฐฐ๊ฒฝ ์œ„์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

 


๋น„์œจ์„ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด!

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>๊ณต์ง€์‚ฌํ•ญ ์ˆ˜์ •</title>
    <link rel="stylesheet" href="/css/styles.css">
    <link rel="stylesheet" href="/css/notice/notice-edit.css">
    <!-- Bootstrap core JS-->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
    <script src="https://cdn.startbootstrap.com/sb-forms-latest.js"></script>

    <!-- CSRF ๋กœ ์ธํ•œ 403 ์—๋Ÿฌ ๋ฌธ์ œ ํ•ด๊ฒฐ -->
    <meta name="_csrf" th:content="${_csrf.token}"/>
    <meta name="_csrf_header" th:content="${_csrf.headerName}"/>

    <style>
        /* ๋ฐฐ๊ฒฝ์„ ์œ„ ์•„๋ž˜๋กœ ๋‚˜๋ˆ„๊ณ  ์นด๋“œ๋ฅผ ๋งจ ์•ž์œผ๋กœ ์œ„์น˜์‹œํ‚ค๋Š” ์Šคํƒ€์ผ */
        .container {
            position: relative;
            width: 100%;
            height: 100vh;
            overflow: hidden;
        }
        .background {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            display: flex;
            flex-direction: column;
        }
        .top-bg, .bottom-bg {
            flex: 2; /* ์œ„ ์•„๋ž˜ ๋ฐฐ๊ฒฝ ๋น„์œจ ์กฐ์ • */
        }
        .bottom-bg {
            flex: 7; /* ์œ„ ์•„๋ž˜ ๋ฐฐ๊ฒฝ ๋น„์œจ ์กฐ์ • */
        }
        .card-wrapper {
            position: relative;
            z-index: 1; /* ์นด๋“œ๋ฅผ ๋’ท๋ฐฐ๊ฒฝ ๊ตฌ๋ถ„์„  ์œ„๋กœ ์œ„์น˜์‹œํ‚ด */
            display: flex;
            justify-content: center;
            align-items: center;
            height: 50%;
        }
        .card {
            width: 80%;
            padding: 20px;
            background-color: white;
            border-radius: 10px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
        }
    </style>
</head>
<body>
<div class="container">
    <div class="background">
        <div class="top-bg" style="background-color: #E9ECEF;">
            <!-- ์œ„์ชฝ ๋ฐฐ๊ฒฝ์ƒ‰ -->
        </div>
        <div class="bottom-bg" style="background-color: #F8F9FA;">
            <!-- ์•„๋ž˜์ชฝ ๋ฐฐ๊ฒฝ์ƒ‰ -->
        </div>
    </div>
    <div class="card-wrapper">
        <div class="card">
            <!-- ์ˆ˜์ •ํ•  ๋‚ด์šฉ ์ž…๋ ฅ ํผ -->
            <h2>๊ณต์ง€์‚ฌํ•ญ ์ˆ˜์ •</h2>
            <form id="editNoticeForm">
                <div class="mb-3">
                    <label for="title" class="form-label">์ œ๋ชฉ</label>
                    <input type="text" class="form-control" id="title" name="title" th:value="${notice.title}" required>
                </div>
                <div class="mb-3">
                    <label for="content" class="form-label">๋‚ด์šฉ</label>
                    <textarea class="form-control" id="content" name="content" rows="5" th:text="${notice.content}" required></textarea>
                </div>
                <input type="hidden" id="noticeId" name="noticeId" th:value="${notice.id}">
                <button type="button" class="btn btn-primary" onclick="submitEditNotice()">์ˆ˜์ •</button>
            </form>
        </div>
    </div>
</div>
</body>
</html>

์ด 3๋ถ€๋ถ„์„ ์กฐ๊ธˆ์”ฉ ์ˆ˜์ •ํ•˜์—ฌ ํ™•์ธํ•ด๋ณด์„ธ์š”.

 

 

 


 

์œ„ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•ด์„œ 

https://www.w3schools.com/css/tryit.asp?filename=trycss_editor

 

W3Schools online HTML editor

The W3Schools online code editor allows you to edit code and view the result in your browser

www.w3schools.com

์—ฌ๊ธฐ์— ์ฝ”๋“œ ๋ถ€๋ถ„์— ๋ถ™์—ฌ๋„ฃ์–ด์„œ ์‹คํ–‰์‹œ์ผœ๋ณด์„ธ์š”. ๋น ๋ฅด๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ์‹คํ–‰๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

'HTML + CSS ์‹œ๋ฆฌ์ฆˆ๐Ÿ•ธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๊ฐ„๋‹จํ•œ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ _ HTML  (3) 2022.11.20