Web

2주차 강의 (Web 개발 강의)

kagan-draca 2024. 7. 22. 16:31

오늘은 부트 스트랩을 이용해서 넷플릭스의 킹덤 페이지를 유사하게 따라 만들어 봤다.

 

 

전체 소스 코드 : 

 

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>스파르타플릭스</title>
        integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <style>

        * {
            font-family: 'Gowun Dodum', sans-serif;
        }

        .main {
            color: white;

            background-position: center;
            background-size: cover;
        }

        body {
            background-color: black;
        }

        .mycards {
            width: 1200px;
            margin: 20px auto 20px auto;
        }

        .mypostingbox {
            width: 500px;
            margin: 20px auto 20px auto;

            border: 1px solid white;
            padding: 20px;
            border-radius: 5px;
        }

        .form-floating>input {
            background-color: transparent;
            color: white;
        }

        .form-floating>label {
            color: white;
        }

        .input-group>label {
            background-color: transparent;
            color: white;
        }

        .mypostingbox>button {
            width: 100%;
        }
    </style>
</head>

<body>
    <header class="p-3 text-bg-dark">
        <div class="container">
            <div class="d-flex flex-wrap align-items-center justify-content-center justify-content-lg-start">
                <a href="/" class="d-flex align-items-center mb-2 mb-lg-0 text-white text-decoration-none">
                    <svg class="bi me-2" width="40" height="32" role="img" aria-label="Bootstrap">
                        <use xlink:href="#bootstrap"></use>
                    </svg>
                </a>

                <ul class="nav col-12 col-lg-auto me-lg-auto mb-2 justify-content-center mb-md-0">
                    <li><a href="#" class="nav-link px-2 text-danger">spartaflix</a></li>
                    <li><a href="#" class="nav-link px-2 text-white"></a></li>
                    <li><a href="#" class="nav-link px-2 text-white">시리즈</a></li>
                    <li><a href="#" class="nav-link px-2 text-white">영화</a></li>
                    <li><a href="#" class="nav-link px-2 text-white">내가 찜한 콘텐츠</a></li>
                </ul>

                <form class="col-12 col-lg-auto mb-3 mb-lg-0 me-lg-3" role="search">
                    <input type="search" class="form-control form-control-dark text-bg-dark" placeholder="Search..."
                        aria-label="Search">
                </form>

                <div class="text-end">
                    <button type="button" class="btn btn-outline-light me-2">Login</button>
                    <button type="button" class="btn btn-danger">Sign-up</button>
                </div>
            </div>
        </div>
    </header>
    <div class="main">
        <div class="p-5 mb-4 bg-body-tertiary rounded-3">
            <div class="container-fluid py-5">
                <h1 class="display-5 fw-bold">킹덤</h1>
                <p class="col-md-8 fs-4">병든 왕을 둘러싸고 흉흉한 소문이 떠돈다. 어둠에 뒤덮인 조선, 기이한 역병에 신음하는 산하. 정체 모를 악에 맞서 백성을 구원할 희망은 오직
                    세자뿐이다.</p>
                <button type="button" class="btn btn-outline-light">영화 기록하기</button>
                <button type="button" class="btn btn-outline-light">상세정보</button>
            </div>
        </div>
    </div>

    <div class="mypostingbox">
        <div class="form-floating mb-3">
            <input type="email" class="form-control" id="floatingInput" placeholder="영화 이미지 주소">
            <label for="floatingInput">영화 이미지 주소</label>
        </div>
        <div class="form-floating mb-3">
            <input type="email" class="form-control" id="floatingInput" placeholder="영화 제목">
            <label for="floatingInput">영화 제목</label>
        </div>
        <div class="input-group mb-3">
            <label class="input-group-text" for="inputGroupSelect01">별점</label>
            <select class="form-select">
                <option selected>별점선택</option>
                <option value="1"></option>
                <option value="2">⭐⭐</option>
                <option value="3">⭐⭐⭐</option>
                <option value="4">⭐⭐⭐⭐</option>
                <option value="5">⭐⭐⭐⭐⭐</option>
            </select>
        </div>
        <div class="form-floating mb-3">
            <input type="email" class="form-control" id="floatingInput" placeholder="추천 이유">
            <label for="floatingInput">추천 이유</label>
        </div>
        <button type="button" class="btn btn-danger">기록하기</button>
    </div>

    <div class="mycards">
        <div class="row row-cols-1 row-cols-md-4 g-4">
            <div class="col">
                <div class="card h-100">
                        class="card-img-top" alt="...">
                    <div class="card-body">
                        <h5 class="card-title">영화 제목</h5>
                        <p class="card-text">⭐⭐⭐</p>
                        <p class="card-text">영화 코멘트</p>
                    </div>
                </div>
            </div>
            <div class="col">
                <div class="card h-100">
                        class="card-img-top" alt="...">
                    <div class="card-body">
                        <h5 class="card-title">영화 제목</h5>
                        <p class="card-text">⭐⭐⭐</p>
                        <p class="card-text">영화 코멘트</p>
                    </div>
                </div>
            </div>
            <div class="col">
                <div class="card h-100">
                        class="card-img-top" alt="...">
                    <div class="card-body">
                        <h5 class="card-title">영화 제목</h5>
                        <p class="card-text">⭐⭐⭐</p>
                        <p class="card-text">영화 코멘트</p>
                    </div>
                </div>
            </div>
            <div class="col">
                <div class="card h-100">
                        class="card-img-top" alt="...">
                    <div class="card-body">
                        <h5 class="card-title">영화 제목</h5>
                        <p class="card-text">⭐⭐⭐</p>
                        <p class="card-text">영화 코멘트</p>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>

</html>

 

HTML에 JavaScript 작성법

이후 Head 부분에 <script></script>를 작성하고 JavaScript를 작성한 후,

    <script>
        let a = '안녕하세요';
        console.log(a);
    </script>

F12(오른쪽 클릭 + 검사 클릭)에서 Console을 확인하면

"안녕하세요"가 Console에 출력된 걸 볼 수 있었다.

 

만약,

    <script>
        let a = 5;
        let b = 8;
        console.log(a+b);
    </script>

로 수정할 경우,

JavaScript 처럼 a +  b인 13이 출력 됐다.

 

리스트와 dictionary 또한 가능 했는데,

    <script>
        let a = ['사과', '배', '수박'];
        console.log(a)
    </script>

        console.log(a[0]+", "+a[1]+", "+a[2])

 

 

 

    <script>
        let person =
        {
            'name' : "bap",
            'age'  : "30",
            'height' : "180"
        }
        console.log(person['name']+", "+person['age']+", "+person['height'])
    </script>

 

 

 

조건문과 반복문 또한,  

    <script>
        let age = 15

        if(age < 20) console.log("청소년 입니다")
        else  console.log('성인 입니다.')
    </script>

 

 

    <script>
        let age = 15

        for(let i = 0; i < age; i++)
        {
            console.log(i+', '+age)
        }
    </script>

 

정상적으로 잘 동작했다.

 

배열과 함께 사용하면,

 

    <script>
        let ages = [15,30,28,7,40,13]

        ages.forEach((element)=>
        {
            console.log(element)
        })
    </script>

 

    <script>
        let ages = [15,30,28,7,40,13]

        ages.forEach((element)=>
        {
            if(element > 15) console.log("성인 입니다")
            else console.log("청소년 입니다.")
        })
    </script>

 

위와 같이도 사용이 가능하다

 

JavaScript로 함수 동작 시키기

 

이제 JavaScript를 활용해 Web page에 아래 동작을 넣어보면

 

<head>

    <script>
        function hey()
        {
            alert("안녕하세요")
        }
    </script>

</head>

 

<body>

                <button type="button" class="btn btn-outline-light" onclick=hey()>영화 기록하기</button>

</body>

 

위와 같이 "안녕하세요"가 문구로 떳다.

 

 

(중요)JQuery를 사용한 html 조작법(중요)

 

JQuery를 head 사이에 추가해주고

    <script>
        function hey()
        {
            $('#title').text('쥬라기 월드')
        }
    </script>

 

Script 함수 내부에 $('#사용할 아이디').함수사용할 위치 id = '사용할 아이디'를 사용하면

                <h1 id="title" class="display-5 fw-bold">킹덤</h1>

 

버튼 동작에 의해, 

 

변경 전 모습
변경 후 모습

 

"영화 기록하기" 버튼 클릭에 따른 함수 호출로 "킹덤"이라는 단어가 "쥬라기 월드"로 변경된다.

 

좀 더 활용해보면

    <script>
        function checkResult()
        {
            let a = ['사과','배','감','귤']
            $('#q1').text(a[0]+', '+a[1]+', '+a[2]+', '+a[3])
            let b =
            {
                'name' : '영수',
                'age' : 12
            }
           
            $('#q2').text(b['name']+', '+b['age'])

            let c =
            [
                {'name' : '영수', 'age' : 13},
                {'name' : '밥', 'age' : 30},
            ]
            $('#q3').text(c[0]['name']+', '+c[0]['age']+' + '+c[1]['name']+', '+c[1]['age'])
        }
    </script>
    <body>
        <div class="top-part">
            <h1>자바스크립트 문법 연습하기!</h1>
        </div>
        <hr/>
        <br>
        <h2>1. 함수</h2>
        <div class="button-part">
            <button onclick="checkResult()">결과 확인하기!</button>
        </div>
        <div class="list-part">
            <h2>2. 리스트</h2>
            <div id="q1"></div>
        </div>
        <div class="dict-part">
            <h2>3. 딕셔너리</h2>
            <div id="q2"></div>
        </div>
        <div>
            <h2>4. 리스트 딕셔너리</h2>
            <div id="q3"></div>
        </div>
    </body>

위와 같이 사용할 수 있었다.

 

 

 

(중요)JavaScript로 HTML 테그 추가 방법(중요)

 
<script>
    function checkResult() {
        $('#q1').empty();
       
        let temp_html = `<p>감자</P>`;
        $('#q1').append(temp_html);
    }
</script>

 

위와 같이

 

let temp_html = `(1번 옆)<사용할 테그> 내용 </사용할 테그>`(1번 옆)

$('#q1').append(temp_html);

 

을 사용하면

 

기존 HTML
바뀐 화면

 

위와 같이 JavaScript로 HTML 테그를 추가할 수 있었다!!

 

 

`<사용할 테그> ${ 변경되는 변수 } </사용할테그>'

<script>
    function checkResult()
    {
        $('#q1').empty();
       
        let fruits = ['사과','배','감','귤','수박']
        for(let index in fruits)
        {
            let temp_html = `<p>${fruits[index]}</P>`;
            $('#q1').append(temp_html);
        }
    }
</script>

 

`<사용할 테그>    ~~    </사용할 테그>`안에 ${ 변경되는 변수 }를 사용하면

변경 전 상태
변경 후 상태

 

위와 같이 index가 바뀌면서 리스트 안에 있는 값들을 모두 활용할 수 있다.

 

또한, 

 

        $('#q2').empty();
        let people =
        [
            {'name':'서영','age':24},
            {'name':'현아','age':30},
            {'name':'영환','age':12},
            {'name':'서연','age':15},
            {'name':'지용','age':18},
            {'name':'예지','age':36}
        ];
        people.forEach(dict=>
        {
            let name = dict['name'];
            let age = dict['age'];
            let temp_html = `<p>${name}${age}입니다</P>`;
            $('#q2').append(temp_html);
        })

 

코드를 추가하므로서

 

변경 전 모습
변경 후 모습

 

으로 리스트 안에 dictonary가 있는 경우도 변경할 수 있었다.