※이번 시간은 해상도에 따라 레이아웃이 변형되는 반응형 레이아웃에 대하여 알아보겠습니다.

다양한 기술과 디바이스들이 나오면서 화면의 크기들도 천차만별로 늘어나고 있습니다. 레이아웃을 일반적인 모니터 해상도 크기에 맞춘다면 그보다 상대적으로 작은 태블릿이나 핸드폰으로 화면을 보기에는 불편함이 있을 수 있습니다.

화면해상도에 따라서 레이아웃을 변경해 줌으로써 편의성과 디자인을 확보할 수 있을 것입니다. 

목차

1. 반응형 웹

2. CSS

3. BODY

 

1. 반응형 웹

 

@반응형 레이아웃이란?

하나의 웹사이트에서 PC, 스마트폰, 태블릿 PC 등 접속하는 디스플레이의 종류에 따라 화면의 크기가 자동으로 변하도록 만든 웹페이지 접근 기법입니다.

최근에는 모바일 사용자가 증가함에 따라 모바일 퍼스트 개념을 중요시하는 추세입니다.

웹 개발 시 모바일에 맞게 디자인 후 타 해상도에 맞추어 추가 개발을 진행하는 방식을 선호하고 있다고 합니다.

간단하게 레이아웃을 구성해 보고 코드를 해석해 보겠습니다.

 

-일반적인 전체 해상도에 대한 레이아웃 화면입니다. 

 

-1025px이상, 1280px이하일 때에 보이는 레이아웃 화면입니다.

태블릿에 적합하도록 구현해 보았습니다.

 

-768px이상, 1024px이하일 때에 보이는 레이아웃 화면입니다.

모바일에 적합하도록 구현해 보았습니다.

 

 

2. CSS

  <style>
    * {box-sizing: border-box;}
    h1,h2,ul,li,p,div {
        margin: 0px;
        padding: 0px;
    }
    li {list-style: none;}
    .clear::after {
        content: '';
        display: block;
        clear: both;
    }
    a {
        text-decoration: none;
        color: #333;
        line-height: 1.5;
    }
    body {
        background-color: #f1f1f1;
        font-size: 13px;
    }
    header {background-color: coral;}
    h1 {
        color: white;
        padding: 10px;
        font-size: 25px;
    }
    .lnb li {
        margin: 10px;
        padding: 10px;
        background-color: lightgreen;
    }
    .content {padding: 20px;}
    h2 {font-size: 20px;}
    .ext {
        margin: 10px;
        padding: 20px;
        background-color: lightgreen;
    }
    footer {
        padding: 10px; background-color: #aaa;
    }

    @media (min-width:768px) and (max-width:1024px) {
        .lnb {
            float: left;
            width: 25%;
        }
        .content {
            float: left;
            width: 75%;
        }
        .aside {
            clear: both;
        }
    }
    @media all and (min-width:1025px) {
        .wrap {
            max-width: 1280px;
        }
        .lnb {
            float: left;
            width: 20%;
        }
        .content {
            float: left;
            width: 50%;
        }
        .aside {
            float: right;
            width: 30%;
        }
    }
  </style>

 

@1025px이상, 1280px이하 적용 레이아웃

    @media all and (min-width:1025px) {
        .wrap {
            max-width: 1280px;
        }
        .lnb {
            float: left;
            width: 20%;
        }
        .content {
            float: left;
            width: 50%;
        }
        .aside {
            float: right;
            width: 30%;
        }
    }

-media 태그를 사용하여 최소 1025px(min-width:1025px)로 최솟값을 지정하여 주었고 최댓값은 1280px로 지정하여 1025~1280px의 범위를 갖게끔 설정하였습니다.

그 범위 안에 포함된다면 class lnb와 content를 가진 div box들은 float:left를 적용하여 좌측 정렬이 되도록 하고 class aside는 float:right를 적용하였습니다.

 

@768px이상, 1024px이하 적용 레이아웃

    @media (min-width:768px) and (max-width:1024px) {
        .lnb {
            float: left;
            width: 25%;
        }
        .content {
            float: left;
            width: 75%;
        }
        .aside {
            clear: both;
        }
    }

-media 태그를 사용하여 최솟값을 768px로, 최댓값은 1024px로 지정하여 768~1024px의 범위를 갖게끔 설정하였습니다. 그 범위 안에 포함된다면 class lnb와 content를 가진 div box들은 float:left를 적용하고 class aside는 float 설정을 해제, 비율을 조정해서 세로로 보이도록 수정하였습니다.

 

3. BODY

<body>
    <div class="wrap">
        <header>
            <h1>Musee d'Orsay</h1>
        </header>
        <div id="container" class="clear">
            <div class="lnb">
                <ul>
                    <li><a href="#">작가의 작품</a></li>
                    <li><a href="#">작가의 시대</a></li>
                    <li><a href="#">작가의 일생</a></li>
                </ul>
            </div>            
            <div class="content">
                <h2>PICTURES</h2>
                <p><a href="#">피리부는 소년</a> <br><a href="#">고흐의 방</a><br><a href="#">황색 그리스도가 있는 화가의 자화상</a><br><a href="#">오페라좌의 관현악단</a><br><a href="#">만종</a><br><a href="#">제비꽃 장식을 단 베르트모리조</a><br><a href="#">피리부는 소년</a> <br><a href="#">고흐의 방</a><br><a href="#">황색 그리스도가 있는 화가의 자화상</a><br><a href="#">오페라좌의 관현악단</a><br><a href="#">만종</a><br><a href="#">제비꽃 장식을 단 베르트모리조</a></p>                
            </div>
            <div class="aside">
                <ul class="ext">
                    <li><h2>Workshop Go</h2><a href="#">Life drawing workshop</a></li>
                    <li><h2>Summer Exhibition</h2><a href="#">A-level Summer Exibition Online 2010</a></li>
                    <li><h2>RA Collection</h2><a href="#">RA Collections</a></li>
                </ul>
            </div>
        </div>
        <footer>
            <p>&copy;2018 Les Amis du Musee d'Orsay. All rights reserved.</p>
        </footer>
    </div>
</body>

※홈페이지를 만들면서 자주 활용되는 기능 중 하나인 이미지 슬라이드 쇼를 만들어 보려 합니다.

이 기능과 사용한 여러 속성들을 이용한다면 디자인 적으로나 기능적으로 조금 더 다양한 방식의 구현이 가능할 것 같습니다. 

많이 사용해 보고 익숙해진다면 많이 활용할 수 있는 부분이라고 생각합니다. 

목차

1. 이미지 슬라이드

2. BODY/SCRIPT

3. CSS

 

1. 이미지 슬라이드

위의 화면처럼 양옆 버튼을 생성하고 버튼을 누르면 이미지가 하나씩 전환되는 슬라이드 쇼를 만들어 보려고 합니다.

그리고 일정시간마다 자동으로 이미지가 전환되는 기능도 추가로 구현해 보았습니다.

 

 

2. BODY/SCRIPT

<body>
    <div id="slideshow">
        <div id="slides">
            <img src="../img/p1.jpg" alt="">
            <img src="../img/p2.jpg" alt="">
            <img src="../img/p3.jpg" alt="">
            <button id="prev">&lang;</button>
            <button id="next">&rang;</button>
        </div>
    </div>

    <script>
        let prev_bttn = document.getElementById('prev');
        let next_bttn = document.getElementById('next');
        let imgs = document.querySelectorAll('#slides img');
        let img_num=0;
        showimg(img_num);

        prev_bttn.onclick = function () {
            img_num--;
            if(img_num < 0) {
                img_num = 2;
            }
            showimg(img_num);
        }
        next_bttn.onclick = function () {
            img_num++;
            if(img_num > 2) {
                img_num = 0;
            }
            showimg(img_num);
        }
       
        function showimg(n) {
            for(let i=0; i<imgs.length; i++) {
                imgs[i].style.display = 'none';
            }
            imgs[n].style.display = "block"
        }
       
        setInterval (prev_bttn.onclick , 2000)
    </script>
</body>

 

우선 <body> 부분은 간단하게 전환될 이미지들과 좌우 버튼을 구현해 주었습니다.

버튼은 "&lang", "&rang" 기호를 사용하여 좌우 화살표 부호를 넣어 주었고 CSS를 통하여 좌우로 정렬하려 합니다.

 

 

        let prev_bttn = document.getElementById('prev');
        let next_bttn = document.getElementById('next');
        let imgs = document.querySelectorAll('#slides img');
        let img_num=0;

우선 각 요소의 값들을 변수에 저 정합니다. 

getElementByid()를 통하여 좌우 버튼에 대한 값을 저장하고 querySelectorAll()을 통하여 #slides의 img들의 값을 배열형태로 가져왔습니다.

imgs의 배열값을 선택하기 위해 img_num를 생성했습니다.

 

 

        function showimg(n) {

            for(let i=0; i<imgs.length; i++) {
                imgs[i].style.display = 'none';
            }
            imgs[n].style.display = "block"
        }
       
        setInterval (prev_bttn.onclick , 2000)
 

화면이 전환되는 동작을 수행하는 함수 showimg()를 생성하였습니다.

변수 n값을 통하여 화면에 출력할 이미지의 배열값을 지정할 수 있도록 합니다.

for문을 통하여 전체 이미지의 display값을 "none"으로 변경하여 화면에 출력되지 않도록 하고 imgs [n]에 대한 display값만 "block"으로 지정하여 화면에 보이도록 설정하였습니다.

setinterval() 함수를 통하여 prev_bttn.onclick 이벤트를 2000밀리 초마다 실행하도록 설정하여 2초마다 자동으로 이미지 전환이 이뤄지도록 하였습니다.

 

버튼 클릭이벤트에 대해서는

        prev_bttn.onclick = function () {
            img_num--;
            if(img_num < 0) {
                img_num = 2;
            }
            showimg(img_num);
        }
        next_bttn.onclick = function () {
            img_num++;
            if(img_num > 2) {
                img_num = 0;
            }
            showimg(img_num);
        }

이미지를 3개 넣어주었기 때문에 이미지 배열은 0~2까지로 onclick 이벤트 발생 시 0에서 -1 이하로, 2에서 3 이상으로 넘어가는 것을 방지해 주기 위해서 if문을 통하여 0~2 안에서만 전환되도록 해주고 버튼을 클릭할 때마다 img_num-- , img_num++ 을 해주어 배열값이 변경되도록 설정해 주었습니다.

그리고 그 변경된 값으로 다시 showimg() 함수를 호출해 주었습니다.

 

 

 

3. CSS

    <style>
        #slideshow {
            overflow: hidden;
            position: relative;
            width: 1200px;
            height: 300px;
            margin: 0 auto;
        }
        #slide {
            position: absolute;
        }
        #slides > img {
            width: 1200px;
            height: 300px;
        }
        button {
            position: absolute;
            height: 300px;
            top: 0;
            border: none;
            padding: 20px;
            background-color: transparent;
            color: #000;
            font-weight: 800;
            font-size: 24px;
            opacity: 0.5;
        }
        #prev {
            left: 0;
        }
        #next {
            right: 0;
        }
        button:hover {
            background-color: #222;
            color: white;
            opacity: 0.6;
            cursor: pointer;
        }
        button:focus {
            border: none;
        }
    </style>

 

        #slideshow {
            overflow: hidden;
            position: relative;
            width: 1200px;
            height: 300px;
            margin: 0 auto;
        }
        #slide {
            position: absolute;
        }
        #slides > img {
            width: 1200px;
            height: 300px;
        }

#slideshow 에서 이미지가 화면을 넘어갔을 때에 화면에 보이지 않게 하기 위해서 overflow속성을 hidden값을 주었고

, position을 relative으로 설정해 주었습니다.

 

        button {
            position: absolute;
            height: 300px;
            top: 0;
            border: none;
            padding: 20px;
            background-color: transparent;
            color: #000;
            font-weight: 800;
            font-size: 24px;
            opacity: 0.5;
        }
        #prev {
            left: 0;
        }
        #next {
            right: 0;
        }
        button:hover {
            background-color: #222;
            color: white;
            opacity: 0.6;
            cursor: pointer;
        }
        button:focus {
            border: none;
        }

버튼은 opacity속성을 통해 투명하도록 설정하였고 left, right 값을 0을 주어 좌우 끝에 붙도록 하였습니다.

마우스가 오버되었을 때에 color와 투명도, 커서모양이 변경되도록 설정하여 주었습니다. 

'HTML > JAVA SCRIPT' 카테고리의 다른 글

자바 스크립트(JAVA SCRIPT)의 개념과 기본 문법  (0) 2023.03.08

※HTML과 CSS로 웹 사이트를 구현하고 디자인했다면 이제는 자바 스크립트(JAVA SCRIPT)를 이용하여 동적인 기능을 추가해 줘야 합니다. 이번 시간은 자바스크립트의 기본적인 개념과 기본 문법 등을 알아보고 간단한 사용방법 등을 알아보도록 하겠습니다.

목차

1. 자바스크립트(JAVA SCRIPT) 란?

2. 자바스크립트(JAVA SCRIPT)의 기본 문법

 

1. 자바스크립트(JAVA SCRIPT) 란?

※자바스크립트(JAVA SCRIPT)란 웹을 위한 인터프리터 언어이자 객체기반의 스크립트 프로그래밍 언어입니다.

HTML의 특정 요소들을 선택하여  어떠한 동작(이벤트)을 발생시키는 언어라고 생각하시면 됩니다. 이벤트에 따라 HTML, CSS를 조작할 수 도 있습니다.

요약한다면 웹 페이지에 기능을 더하여 HTML 페이지를 동적으로 만들어주는 것입니다.

 

자동차를 예로 들면 HTML로 자동차의 구조를 구현하고 CSS를 통하여 디자인, 색상등을 꾸미고, 자바 스크립트를 이용하여 창문을 내리거나 엑셀이나 브레이크를 밟았을 때에 특정한 동작을 하도록 하는 역할이라고 생각하시면 됩니다.

 

 

- 자바스크립트의 특징

  1. 자바스크립트는 객체 기반의 스크립트 언어이다.
  2. 자바스크립트는 동적이며, 타입을 명시할 필요가 없는 인터프리터 언어이다.
  3. 자바스크립트는 객체 지향형 프로그래밍과 함수형 프로그래밍을 모두 표현할 수 있다.

- 자바스크립트의 장점

  • 컴파일과정이 필요 없어 빠른 시간 안에 스크립트 코드를 작성할 수 있다.
  • 다른 언어들에 비해 단순한 구조와 원칙을 갖고 있어 배우기 쉽다.
  • 웹에 특화된 기술이기 때문에 운영체제나 플랫폼에 상관없이 잘 작동되고 확장성이 높다.

- 자바스크립트의 단점

  • OS에 직접 접근할 수 없다.
  • 하드디스크를 읽거나 쓸 수 없다.
  • 다른 프로그램을 호출할 수 없다.
  • 자바스크립트는 도메인이 동일한 두 탭/윈도를 제외하고 탭/윈도 간에 통신을 수행할 수 없다.
  • 자바스크립트는 웹 브라우저에서 실행되기 때문에 일부 보안상의 제약이 있으며, 브라우저에서 웹 페이지를 열 때 안전하고 위험에 처하지 않도록 보장해야 한다.
  • 일반적으로 자바스크립트는 자체 도메인에 대해서만 제한 없이 네트워크 요청을 보낼 수 있다.

 

 

2. 자바스크립트(JAVA SCRIPT)의 기본 문법

 

@변수

변수는 값(value)을 저장(할당)하고 그 저장된 값을 참조하기 위해 사용합니다. 

변수는 위치(주소)를 기억하는 저장소입니다. 위치란 메모리 상의 주소(address)를 의미하며, 메모리 주소(Memory address)에 접근하기 위해 사람이 이해할 수 있는 언어로 지정한 식별자(identifier)입니다.

@코드로 보기
    <script>
        var x = 1;
        let y = 1;
        x = 100;
        y = 100;
        var x = 100;
        var y = 100; /*let 은 재할당은 가능하나 재선언은 불가능*/

        document.write("x = " + x + "<br>");
        document.write("y = " + y + "<br>");
    </script>

위 코드와 같이 "let  변수이름 =  값", "var 변수이름 = 값"으로 선언합니다. 

var는 재 할당, 재 선언이 둘 다 가능하며 값이 변형될 가능성이 많기에 재 선언이 불가능한 let이 개발되었고 둘 다 사용은 가능하나 안정성을 위해 let을 사용합니다.

 

 

@상수

상수는 선언방식은 변수와 동일하나 변수는 재 선언 또는 재 할당이 가능한 반면 한번 선언하면 재 할당 및 재 선언이 불가능한 변수를 말합니다.

@코드로 보기
    <script>
        const x = 1;
        x = 100; /*재할당 불가능*/
        const x = 1; /*재선언 불가능*/
        document.write("x = " + x + "<br>");
    </script>
    

위 코드와 같이 "const 상수이름 = 값"으로 선언하며 재 선언, 재 할당이 불가능합니다. 

 

 

@연산자

 

-비교 연산자

구문 의미
A == B A, B의 값이 같은가
A === B A, B의 값과 데이터 타입이 같은가
A != B A, B의 값이 다른가
A !== B A, B의 값과 데이터 타입이 다른가
A < B A가 B보다 작은가
A <= B A가 B보다 작거나 같은가
A > B A가 B보다 큰가
A >= B A가 B보다 크거나 같은가

 

-대입 연산자

구문 의미
x = y x = y (대입)
x += y x = x + y (더하기)
x -= y x = x - y (뺄셈)
x *= y x = x * y (곱셈)
x **= y x = x ** y (제곱)
x /= y x = x / y (나눗셈)
x %= y x = x % y (나머지)

 

@조건문

-if, swich문이 있으며 사용방식은 JAVA와 동일하다

 

@반복문

-for, while문이 있으며 사용방식은 JAVA와 동일하다

 

 

@배열

-이름과 인덱스로 참조되는 정렬된 값의 집합으로 정의됩니다.

배열을 구성하는 각각의 값을 배열 요소(element)라고 하며, 배열에서의 위치를 가리키는 숫자를 인덱스(index)라고 합니다.

@코드로 보기
    <script>
        /*선언방법 1*/
        var arr = [];
        arr[0] = 1;
        arr[1] = "이"; /*문자열은 ""로 구분*/
        arr[2] = "3"; /*""로 구분되어 있다면 문자열로 구분*/
        /*선언방법 2*/
        var arr = [1,2,"삼"]
 
        /*선언방법 3*/
        var arr = new Array(1,2,"삼");
    </script>

위 코드처럼 선언할 수 있으며 숫자값은 그대로 입력, 문자열을 ""을 구분해 줍니다.

+ Recent posts