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

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

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

목차

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>

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

※이번 시간은 CSS에서 자주 사용되는 속성 중 font와 border를 다루어 보려 합니다.

font 속성은 글자의 크기, 굵기, 글꼴 등을 정의하여 주는 속성이며 border는 테두리의 속성값을 정할 수 있는 속성입니다. 

저번 시간에 다루었던 width, height와 padding, margin과 같이 많이 사용되는 속성들입니다. 

목차

1. FONT

2. BORDER

 

1. FONT

※ font 속성은 글자의 크기, 굵기, 글꼴 등을 정의하여 주는 속성입니다. 

크게 6가지의 속성을 가지며 글자의 색상은 따로 font 속성의 하위가 아닌 color 속성으로 지정할 수 있습니다.

font-style 이탤릭체 등의 글꼴의 스타일 지정
font-weight 글자 두께
font-variant 글꼴 변형 (소문자를 대문자로 바꾸는 등의)
font-size 글자 크기
line-height 줄 간격
font-family 글꼴 (굴림, 돋움, …)

 

@font-style

※font-style은 폰트의 표시 형태를 지정하는 속성으로, 폰트의 기본 형태로 표시하는 normal 값과 이탤릭체 또는 기울임 꼴로 표시하는 italic과 oblique가 있습니다.

 

@코드로 보기
    <title>font 예제</title>
    <style>
        #ex1 {
            font-style: italic;
        }
    </style>
</head>
<body>
    <p>기본</p>
    <p id="ex1">이텔릭체</p>
</body>
</html>

 

 

@font-weight

※font-weight는 폰트가 표시되는 굵기를 지정하는 속성입니다.

100~900 사이의 굵기 단계를 표시하는 수치값이나 normal, bold 등의 키워드로 선언할 수 있습니다. 

 

@코드로 보기
    <title>font 예제</title>
    <style>
        #ex1 {
            font-weight: 100;
        }
        #ex2 {
            font-weight: 700;
        }
        #ex3 {
            font-weight: bold;
        }
    </style>
</head>
<body>
    <p>기본</p>
    <p id="ex1">굵기 100</p>
    <p id="ex2">굵기 700</p>
    <p id="ex3">bold 속성</p>
</body>
</html>

 

@font-variant

font-variant는 영문 폰트의 소문자 표시 형태를 변경하는 속성입니다.

  • font–variant–position : 폰트의 표시 위치를 지정하는 속성, 화학식의 윗첨자, 아랫첨자 등과 같은 형태
  • font–variant–ligatures : 발음 기호 형태와 [æ] 같은 묶음 표시 형태를 표시하는 속성
  • font–variant–caps : 대소 문자 형태를 변경하는 속성
  • font–variant–numeric : 분수나 회계용 숫자 등의 표시 형태를 변경하는 속성
  • font–variant–alternates : 폰트의 장식 요소나 특수 문자의 표시 형태를 변경하는 속성
  • font–variant–east–asia : 한자나 일본어의 폰트를 약자 형식으로 변경할 수 있는 속성

 

@font-size

font-size는 폰트의 크기를 지정하는 속성으로, xx-small, x-small, small, medium, large, x-large, xxlarge과 같은 절대 크기와 smaller, larger와 같은 상대 크기 등을 사용할 수 있습니다. (일반 웹 페이지에서는 px를 사용)

 

@font-family

font-family는 텍스트의 폰트를 지정하는 속성으로, 속성 값은 복수로 지정할 수 있으며 복수 지정 시에는 (,)로 구분합니다. 지정된 순서대로 표시할 수 있는 폰트를 찾게 됩니다.

저장되어 있는 폰트 이외에도 URL을 통하여 공유된 폰트를 사용할 수도 있습니다.

 

@코드로 보기
    <style>
        body {
            font-family: '궁서';
        }
    </style>

위 코드처럼 저장되어 있는 폰트를  사용하거나

 
@코드로 보기
    <style>
        @font-face {
            font-family: 'LOTTERIADDAG';
            font-weight: normal;
            font-style: normal;
        }
        body {
            font-family: 'LOTTERIADDAG';
        }
    </style>

URL을 통하여 공유된 폰트 사용이 가능합니다.

 

 

2. BORDER

※border는 테두리의 속성값을 정할 수 있는 속성입니다.

border-top, right, bottom, left 방식으로 방향마다 다른 속성값을 정하여 줄 수 있으며 축약형 명령어로 색, 두께, 스타일 등을 한 번에 지정하여 줄 수 있습니다. 

  • border-width : 선의 두께를 정합니다. 기본값은 medium입니다. 지정된 값 또는 px 등의 수치로 입력합니다.
  • border-style : 선의 모양을 정합니다. 기본값은 none입니다.
  • border-color : 선의 색을 정합니다. 기본값은 꾸미려는 요소의 색(color)입니다.
  • border-radius : 테두리의 굴곡정도를 정합니다. px, % 등의 수치로 입력합니다.
  • initial : 기본값으로 설정합니다.
  • inherit : 부모 요소의 속성값을 상속받습니다.

@border-width

-medium, thick, thin, length, initial, inherit의 기본값을 가지며 px 등의 수치로도 입력합니다.

 

@border-style

  • none  :  기본값 표시하지 않음
  • solid : 실선으로 표시
  • dotted : 점선으로 표시
  • double : 이중 실선으로 표시
  • ridge : 돌출된 선으로 표시
  • groove : 들어간 선으로 표시
  • inset : 보더 안쪽이 들어간 선으로 표시
  • outset : 보더 안쪽이 돌출된 선으로 표시
  • dashed : 파선으로 표시
  • hidden : 표시하지 않음

 

@코드로 보기
    <style>
        body {
            text-align: center;
        }
        #box {
            width: 200px;
            height: 200px;
            border: 2px solid black;
            border-radius: 5px;
        }
    </style>

 

200*200px 크기의 테두리, 2px굵기의 실선, 검은색의 테두리 속성값, 5px의 테두리 굴곡 적용

+ Recent posts