본문 바로가기
Web Programming/Front-End 실습

08 8주차 실습

by Orangetasteboy 2023. 5. 17.

[실습 자료 열람 홈페이지]

  • 홈페이지 화면

  • 소스코드
더보기
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>변규진의 홈페이지</title>
<style>
    body { background-color: linen; color: green;
            margin-left: 40px; margin-right: 40px; }    /* body 태그의 배경색을 linen, 색을 green, */
    h3 {text-align: center; color: darkred;}            /* h3 태그를 가운데 정렬하고 색을 darkred로 설정 */
    hr { height: 5px; border: solid grey;
            background-color: grey }                    /* 수평 줄의 높이를 5px, border를 solid grey, 배경 색을 grey로 설정 */
    span { color: blue; font-size: 20px; }              /* span 태그의 색을 blue, 글자 크기를 20px로 설정 */
    a { color: black; }                                 /* a 태그의 링크 글자색을 black으로 설정 */
    a:visited { color: black; }                         /* a 태그의 방문한 링크 글자색을 black으로 설정 */
</style>
</head>
<body>
    <h3>변규진의 홈페이지</h3>
    <hr>                                                          <!-- 수평 줄 생성 -->
    <br>                                                          <!-- 줄 바꿈 -->
    <details>
        <summary>과제1</summary>
        <ul>
            <li><a href="과제1-1.html" target="_blank">과제1-1</a></li>     <!-- 순서가 없는 리스트 생성 -->
            <li><a href="과제1-2.html" target="_blank">과제1-2</a></li>     <!-- a 태그를 이용하여 과제 HTML 문서 링크와 연결 -->
            <li><a href="과제1-3.html" target="_blank">과제1-3</a></li>     <!-- target="_blank"로 링크 클릭시 새 탭에 사이트 출력 -->
        </ul>
    </details>
    <details>
        <summary>과제2</summary>
        <ul>
            <li><a href="과제2-1.html" target="_blank">과제2-1</a></li>
            <li><a href="과제2-2.html" target="_blank">과제2-2</a></li>
            <li><a href="과제2-3.html" target="_blank">과제2-3</a></li>
            <li><a href="과제2-4.html" target="_blank">과제2-4</a></li>
            <li><a href="과제2-5.html" target="_blank">과제2-5</a></li>
            <li><a href="과제2-6.html" target="_blank">과제2-6</a></li>
            <li><a href="과제2-7.html" target="_blank">과제2-7</a></li>
        </ul>
    </details>
    <details>
        <summary>과제3</summary>
        <ul>
            <li><a href="과제3-1.html" target="_blank">과제3-1</a></li>
            <li><a href="과제3-2.html" target="_blank">과제3-2</a></li>
            <li><a href="과제3-3.html" target="_blank">과제3-3</a></li>
            <li><a href="과제3-4.html" target="_blank">과제3-4</a></li>
            <li><a href="과제3-5.html" target="_blank">과제3-5</a></li>
            <li><a href="과제3-6.html" target="_blank">과제3-6</a></li>
            <li><a href="과제3-7.html" target="_blank">과제3-7</a></li>
            <li><a href="과제3-8.html" target="_blank">과제3-8</a></li>
            <li><a href="과제3-9.html" target="_blank">과제3-9</a></li>
            <li><a href="과제3-10.html" target="_blank">과제3-10</a></li>
            <li><a href="과제3-11.html" target="_blank">과제3-11</a></li>
        </ul>
    </details>
    <details>
        <summary>과제4</summary>
        <ul>
            <li><a href="과제4.html" target="_blank">끝말잇기 게임 만들기</a></li>
        </ul>
    </details>
    <details>
        <summary>과제5</summary>
        <ul>
            <li><a href="과제5-1.html" target="_blank">과제5-1</a></li>
            <li><a href="과제5-2.html" target="_blank">과제5-2</a></li>
            <li><a href="과제5-3.html" target="_blank">과제5-3</a></li>
            <li><a href="과제5-4.html" target="_blank">과제5-4</a></li>
            <li><a href="과제5-5.html" target="_blank">과제5-5</a></li>
            <li><a href="과제5-6.html" target="_blank">과제5-6</a></li>
            <li><a href="과제5-7.html" target="_blank">과제5-7</a></li>
        </ul>
    </details>
    <details>
        <summary>과제6</summary>
        <ul>
            <li><a href="과제6-1.html" target="_blank">과제6-1</a></li>
            <li><a href="과제6-2.html" target="_blank">과제6-2</a></li>
            <li><a href="과제6-3.html" target="_blank">과제6-3</a></li>
            <li><a href="과제6-4.html" target="_blank">과제6-4</a></li>
            <li><a href="과제6-5.html" target="_blank">과제6-5</a></li>
            <li><a href="과제6-6.html" target="_blank">과제6-6</a></li>
            <li><a href="과제6-7.html" target="_blank">과제6-7</a></li>
            <li><a href="과제6-8.html" target="_blank">과제6-8</a></li>
        </ul>
    </details>
    <details>
        <summary>과제7</summary>
        <ul>
            <li><a href="과제7.html" target="_blank">과제7</a></li>
        </ul>
    </details>
    <details>
        <summary>과제8</summary>
        <ul>
            <li><a href="과제8-1.html" target="_blank">과제8-1</a></li>
            <li><a href="과제8-2.html" target="_blank">과제8-2</a></li>
            <li><a href="과제8-3.html" target="_blank">과제8-3</a></li>
        </ul>
    </details>
</body>
</html>

 

[실습 8-1]

  • 프로그램 알고리즘
    1.  문제를 랜덤으로 자동 생성한다.
    2. 10초가 지나면 자동으로 채점한다.
    3. 다시 버튼을 누르면 재실행한다.

 

  • 홈페이지 화면

  • 소스코드
더보기
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>과제8-1</title>
    <style>
        td {
            padding-left : 10px;
            padding-right : 10px;
        }
    </style>
    <script>
        var show=null, count;

        function ontime()  //시간 카운트
        {
            document.getElementById("grade").innerHTML = 0;
            var time = document.getElementById("time");
            count = 10;
            if(show != null)
                clearTimeout(show);
            outtime(time);
        }

        function outtime(cls)  //점점 시간이 줄어드는 함수
        {
            count--;
            cls.innerHTML = count;
            if(count != 0)
                show = setTimeout("outtime(time)", 1000);
            else
                correct(); // 0이 되면 채점을 하는 함수
        }

        function make()    //문제 만들기 함수
        {
            var one = document.getElementsByClassName("one");
            var two = document.getElementsByClassName("two");

            for(i=0; i<one.length; i++)
            {
                var num1 = Math.floor(Math.random()*99);   //첫 번째 랜덤 넘버
                var num2 = Math.floor(Math.random()*99);   //두 번째 랜던 넘버
                var op = Math.floor(Math.random()*4);     // 연산자를 랜덤으로 하기 위해서 상수화를 하고 switch를 써서 연산자를 정한다.
                var operator;

                switch(op)
                {
                    case 0 : operator = "+";
                        break;
                    case 1 : operator = "-";
                        break;
                    case 2 : operator = "*";
                        break;
                    case 3 : operator = "/";
                        break;
                }

                one[i].innerHTML = num1 + operator + num2; // 문제 출력
            }
        }

        function correct() //채점 함수
        {
            var countgrade = 0;    // 채점 개수
            var one = document.getElementsByClassName("one");
            var two = document.getElementsByClassName("two");

            for(i=0; i<one.length; i++)
            {
                var question = one[i].innerHTML;
                var answer = two[i].value;
                var correct = Math.floor(eval(question));

                if(parseInt(answer) == correct)    //정답이면 개수 +1
                    countgrade += 1;
                else if(answer=="")    //비어 있으면 틀림
                    one[i].style.textDecoration = "line-through";
                else if(isNaN(answer))// 숫자가 아니면 틀림
                    one[i].style.textDecoration = "line-through";
                else// 정답이 틀리면 틀림
                    one[i].style.textDecoration = "line-through";
            }
            document.getElementById("grade").innerHTML = countgrade;   // 정답 개수 출력
        }
    </script>
</head>
<body onload="ontime(), make()">
<h3>산수 문제를 풀어 봅시다.</h3>
문제는 자동으로 생성되며, 10초가 지나면 자동 채점됩니다.
<div>
    남은 시간 <span id="time">0</span>
</div>
<hr>
<form>
    <table>
        <tr>
            <td class="one"></td>
            <td><input class="two" type="text" size="6"></td>
        </tr>
        <tr>
            <td class="one"></td>
            <td><input class="two" type="text" size="6"></td>
        </tr>
        <tr>
            <td class="one"></td>
            <td><input class="two" type="text" size="6"></td>
        </tr>
        <tr>
            <td class="one"></td>
            <td><input class="two" type="text" size="6"></td>
        </tr>
        <tr>
            <td><button type="button" onclick="ontime(), make()">다시</button></td>
            <td><span id="grade">0</span>&nbsp;&nbsp;&nbsp;&nbsp;</td>
        </tr>
    </table>
</form>
</body>
</html>

 

[실습 8-2]

  • 홈페이지 화면

  • 소스코드
더보기
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>과제8-2</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 화면 크기 조절 -->
    <style>
        * {
        margin:0;
        padding:0;
        }

        #wrapper {
        width:320px;
        margin:0 auto;
        }

        h1 {
        text-align:center;
        margin-bottom:10px;
        }

        #img-box {
        width:100%;
        }

        .box {
        width:320px;
        height:180px;
        border:1px solid black;
        margin-bottom:10px;
        }

        .img1 { background:#ff6a00; }
        .img2 { background:#0094ff; }
        .img3 { background:#ff006e; }
        .img4 { background:#4cff00; }

        /* 화면 너비 768px 이상 */
        @media all and ( min-width:768px ) {
            #wrapper {
                width :768px;
            }
            #img-box {
                display : flex;
                flex-direction : row;
                flex-wrap : wrap;
                justify-content : space-around;
            }
            .box {
                width :47%;
                margin :0.5%;
            }
        }

        /* 화면 너비 1024px 이상 */
        @media all and ( min-width:1024px ) {
            #wrapper {
                width :1024px ;
            }
            .box {
                width :22% ;
                margin :0.5% ;
            }
        }
    </style>
</head>
<body >
    <div id ="wrapper">
        <h1 >반응형 웹 디자인</h1>
        <div id="img-box">
            <div class="box img1"></div>
            <div class="box img2"></div>
            <div class="box img3"></div>
            <div class="box img4"></div>
        </div>
    </div>
</body>
</html>

 

[실습 8-3]

  • 홈페이지 화면

  • 소스코드
더보기
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>과제8-3</title>
    <style>
        @import url(http://fonts.googleapis.com/earlyaccess/jejugothic.css);
        @import url(http://fonts.googleapis.com/css?family=Oleo+Script);
        html {
            margin:0;
            padding:0;
        }
        body {
            background: #fff;
            font-family: "Jeju Gothic", serif;
        }
        a {
            text-decoration: none;
        }
        nav a:hover { /* 메뉴에 마우스를 올려놓으면 글자가 노랗게 변하고 흰 그림자 생성 */
            color: yellow;
            text-shadow: 2px 2px 2px white;
        }
        nav a:link, a:visited {
            color: #fff;
        }
        nav a:active {
            color: yellow;
        }
        h1 {
            font-size: 1.8em;
        }
        h2 {
            font-size: 1.3em;
        }
        p {
            font-size: 1.3em;
            line-height: 2.5;
        }
        li {
            font-size: 1em;
            line-height: 2;
        }
        /* 모바일 - 767px 이하 */
        #container {
            width: 100%;
        }
        header {
            width: 100%;
            height: 300px;
            background: url(header.png) center no-repeat;
            background-size: cover;
            margin: 0;
        }
        nav {
            height: 50px;
            background: #000;
        }
        #main-nav {
            list-style: none;
            margin: 0;
            padding: 10px;
        }
        #main-nav li {
            display: inline-block;
            color: #fff;
            font-family: "맑은 고딕", 돋움;
            font-size: 0.8em;
            margin: 5px 15px;
        }
        section {
            position: relative;
            width: 100%;
            padding: 15px 5% 10px 5%;
        }
        #container section:nth-child(odd) {
            background: #eee;
        }
        .page-title {
            position: absolute;
            top: 20px;
            left: 0;
            padding: 30px 50px;
        }
        .page-title h1 {
            margin-bottom: 30px;
        }
        .content {
            margin: 80px auto 10px;
            -moz-box-sizing: border-box;
            -webkit-box-sizing: border-box;
            box-sizing: border-box;
            width: 90%;
            padding: 20px;
        }
        .content ol {
            margin-top: 20px;
        }
        .sub-titles {
            color: #0094ff;
            font-weight: 600;
        }
        .photo {
            display: none;
        }
        footer {
            position: relative;
            width: 100%;
            height: 100px;
            background: #000;
        }
        footer p {
            font-family: 'Oleo Script', cursive;
            font-size: 1.5em;
            line-height: 100px;
            color: white;
            text-align: center;
        }
        /* 태블릿 - 768px 이상 */
        @media screen and (min-width: 768px) {
            header {
                height: 400px;
            }
            #intro, #map_1 {
                -moz-box-sizing: border-box;
                -webkit-box-sizing: border-box;
                box-sizing: border-box;
                width: 50%;
                height: 400px;
                float: left;
                margin: 0;
                border: 1px dotted #ccc;
            }
            #choice {
                clear: left;
            }
        }
        /* PC - 992px 이상 */
        @media screen and (min-width:992px) {
            #container {
                width: 995px;
                margin: 0 auto;
                border: 1px solid #ccc;
            }
            header {
                height: 500px;
            }
            #intro, #map_1, #choice {
                -moz-box-sizing: border-box;
                -webkit-box-sizing: border-box;
                box-sizing: border-box;
                clear: both;
                position: relative;
                width: 100%;
                height: 420px;
                padding: 15px 2% 10px 5%;
            }
            .content {
                margin: 80px auto 10px;
                width: 90%;
                padding: 20px;
            }
            .photo {
                width: 42%;
                display: block;
            }
            .photo > img {
                width: 100%;
                max-width: 320px;
                height: auto;
                margin-bottom: 30px;
            }
            .text {
                width: 42%;
            }
            #intro .photo, #map_1 .photo {
                float: left;
                margin-right: 5%;
            }
            #intro .text, #map_1 .text {
                float: left;
            }
            #choice .photo {
                float: right;
                margin-right: 5%;
            }
            #choice .text {
                float: left;
            }
            footer {
                clear: both;
            }
        }
        #map { /* 구글 지도의 여백과 크기 설정 */
            margin-top: 20px;
            height: 250px;
            width: 250px;
        }
    </style>
    <script>
        function initMap() { // 지도들 추가해주고 초기화
            const cafe = { lat: 33.229724, lng: 126.308845 }; // 카페 위치
            const map = new google.maps.Map(document.getElementById("map"), { // 지도를 카페의 가운데로
                zoom: 4,
                center: cafe,
            });
            const marker = new google.maps.Marker({ // 마커를 카페에 표시
                position: cafe,
                map: map,
            });
        }
        window.initMap = initMap;
    </script>
</head>
<body>
    <div id="container">
        <header>
            <nav>
                <ul id="main-nav"> <!-- 메뉴를 누르면 해당 앙복으로 이동 -->
                    <li><a href="#intro">카페소개</a></li>
                    <li><a href="#map">오시는 길</a></li>
                    <li><a href="#choice">이달의 추천</a></li>
                </ul>
            </nav>
        </header>

        <section id="intro">
            <div class="page-title">
                <h1>카페 소개</h1>
            </div>
            <div class="content">
                <div class="photo">
                    <img src="coffee.jpg" alt="커피">
                </div>
                <div class="text">
                    <p>영업 시간 : 오전 9시~ 밤 10시</p>
                    <p>휴무 : 매주 수요일<i><small>(수요일이 공휴일인 경우 수요일 영업, 다음날 휴무)</small></i></p>
                </div>
            </div>
        </section>

        <section id="map_1">
            <div class="page-title">
                <h1>오시는 길</h1>
            </div>
            <div class="content">
                <div class="photo">
                    <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>
                    <link rel="stylesheet" type="text/css" href="./style.css" />
                    <script type="module" src="./index.js"></script>
                    </head>
                    <body>
                    <div id="map"></div>
                    <!--
                      The `defer` attribute causes the callback to execute after the full HTML
                      document has been parsed. For non-blocking uses, avoiding race conditions,
                      and consistent behavior across browsers, consider loading using Promises
                      with https://www.npmjs.com/package/@googlemaps/js-api-loader.
                      -->
                    <script
                            src="https://maps.googleapis.com/maps/api/js?key=&callback=initMap&v=weekly"
                            defer
                    ></script>  <!-- 구글 지도 API 키를 입력하여 구글 지도 불러오기 -->
                </div>
                <div class="text">
                    <p>서귀포시 안덕면 사계리 oooo-ooo</p>
                    <p>제주 올레 10코스 산방산 근처</p>
                </div>
            </div>
        </section>

        <section id="choice">
            <div class="page-title">
                <h1>이달의 추천</h1>
            </div>
            <div class="content">
                <div class="photo">
                    <img src="ice.jpg" alt="아이스커피" style="border:1px solid white; border-radius:50%">
                </div>
                <div class="text">
                    <h2 class="sub-titles">핸드드립 아이스 커피</h2>
                    <ol>
                        <li>1인분 기준으로 서버에 각 얼음 5조각(한조각은 20cc)넣고 추출을 시작한다.</li>
                        <li>평상시 보다 원두의 양은 2배정도(20g)와 추출액은 얼음 포함해서 200cc까지 내린다.</li>
                        <li>아이스 잔에 얼음 6~7개 섞어서 시원하게 마신다.</li>
                    </ol>
                </div>
            </div>
        </section>

        <footer>
            <p>My times with Coffee</p>
        </footer>
    </div>
</body>
</html>

'Web Programming > Front-End 실습' 카테고리의 다른 글

07 7주차 실습  (0) 2023.05.13
06 6주차 실습 (1~8)  (0) 2023.05.01
05 5주차 실습 (1~7)  (1) 2023.04.22
04 4주차 실습  (0) 2023.04.22
03 3주차 실습 (실습 1~11)  (1) 2023.04.22

댓글