프로그래밍/자바(java) 융합개발자 2차

[자바 기초] 19일차 일지 - 8장. 반응형 웹 디자인하기 2

aSpring 2021. 1. 11. 11:29
728x90
728x90

2021/01/08 - [공부/자바(java) 융합개발자 2차] - [자바 기초] 18일차 일지 - Ch8. CSS3 효과와 애니메이션

2021/01/08 - [공부/자바(java) 융합개발자 2차] - [자바 기초] 18일차 일지 2 - Ch9. 자바스크립트 기본 문법

2021/01/08 - [공부/자바(java) 융합개발자 2차] - [자바 기초] 18일차 일지 3 - 8장. 반응형 웹 디자인하기

 

8장. 반응형 웹 디자인하기

01. 원하는 글꼴을 마음껏! 웹폰트 사용하기

02. ‘미디어쿼리’로 디바이스 맞춤형 스타일 준비하기

03. 실전에 ‘미디어 쿼리’를 응용할 때 고려사항

 


8장. 반응형 웹 디자인하기

01. 원하는 글꼴을 마음껏! 웹폰트 사용하기

- CSS3의 웹폰트는 사용하고 싶은 글꼴을 자동으로 다운로드 받아 브라우저가 출력

@font-face { 
font-family: SeoulNamsanFont; 
src: url('SeoulNamsanL.ttf');
   }
   p { font-family: SeoulNamsanFont; }

- 웹폰트 지원현황

- 글자효과에 맞는 글꼴만 따로 등록도 가능

@font-face { /* 서울남산체(Extra bold)를 다운로드 받아 설정 */

font-family: SeoulNamsanFont;

src: url('SeoulNamsanEB.ttf');

font-weight: bold; /* bold 스타일은 이 폰트로 등록 */

}

<p>이 문장은 웹폰트로 <b>"서울남산체"</b>를 사용하였습니다. </p>

- 서울 남산체 다운로드

http://design.seoul.go.kr

 

보통은

내PC > C: > Windows > Fonts

다운받은 폰트는 안에다가 넣어준다.

 

그러나 웹페이지를 만들 때는 이미지처럼 사용하려는 웹폰트가서버에 있어야 함(같은 폴더 안에다 넣어줘야 함)

 

 

 

[따라해 보세요] 웹폰트 사용하기 (ex08-01)

<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title></title>
        <style type="text/css">
            @font-face { /* 서울남산체 (모바일전용)을 다운로드 받아 설정 */
                font-family: SeoulNamsanFont; /* 폰트 이름을 서울남산폰트로 하겠다 */
                src: url('SeoulNamsan.ttf');   /* 서울남산폰트라고 이름지은 글씨체의 소스의 경로 */
                font-weight: normal; /* normal 스타일은 이 폰트로 등록 */
            }
            @font-face { /* 서울남산체 (Extra bold) 를 다운받아 설정 */
                font-family: SeoulNamsanFont;
                src: url('SeoulNamsanEB.ttf');
                font-weight: bold; /* bold 스타일은 이 폰트로 등록 */
            }
            p {
                font-family: SeoulNamsanFont; /* 내가 지정한 폰트이름 '서울남산폰트'를 사용하겠다 */
            }
        </style>
    </head>
    <body>
        <p>이 문장은 웹폰트로 <b>"서울남산체"</b>를 사용하였습니다.</p>
    </body> 
</html>

 

02. ‘미디어쿼리’로 디바이스 맞춤형 스타일 준비하기

미디어쿼리와 반응형 웹

- 서로 다른 미디어나 모바일 기기에 대응하여 스타일 시트만 다르게 디자인하면 원하는 결과를 자동으로 반응하여 사용자에게 제공

인쇄할 때는 나눔명조
브라우저로 실행할 때는 나눔고딕

미디어쿼리 값의 사용사례

- 내부 스타일 시트로 반응형 웹 만들기

@media screen 을 이용하여 다양한 화면에 스타일을 다르게 대응

   <style>
      @media (max-width:799px){
         /*스마트 폰 용 스타일 */
      } 

      @media only screen and (min-width : 800px) and (max-width : 1023px) {
         /*태블릿 PC 용 스타일 */
      } 

      @media only screen and (min-width : 1024px) {
         /*데스크탑 PC*/ 
      }
   </style>

- 외부 스타일 시트로 반응형 웹 만들기

HTML에서 <link>를 여러 미디어에 해당되는 CSS파일을 다르게 포함시켜 사용

<link href="desktop_pc.css" rel="stylesheet" type="text/css" media="screen and (min-width:800px)">

<link href="mobile.css" rel="stylesheet" type="text/css" media="screen and (max-width:799px)">

[따라해 보세요] 미디어쿼리 사용하기 (ex08-02)

mobile.css

@charset "utf-8";
body {
    color: #FFF;
    background-color: #000;
}
#pc_view {
    display: none;   /* mobile_view일 때는 pc_view를 보이지 않게 하는데 공간도 없애겠다 */
}

desktop_pc.css

@charset "utf-8";
body {
    background-color: #fff; /* 배경 색상을 흰색 */
}
#mobile_view {
    display: none;
}

Ex08_02.html

<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="viewport" content="user-scalable=no, width=device-width" />
        <title></title>
        <link href="mobile.css" rel="stylesheet" type="text/css" media="screen and (max-width:799px)"> /* meida=""속에 조건에 맞으면 mobile.css를 불러오겠다 */
        <link href="desktop_pc.css" rel="stylesheet" type="text/css" media="screen and (min-width:800px)"> /* meida=""속에 조건에 맞으면 desktop_pc.css를 불러오겠다 */
    </head>
    
    <body>
        <h1>미디어 쿼리 연습</h1>
        <div id="pc_view">
            <h2>데스크탑 pc 화면</h2>
            <p>브라우저의 너비를 800 px보다 작게 줄여보세요.</p>
            <p>배경이 검정색에 글자가 흰색으로 바뀔 겁니다.</p>
        </div>
        <div id="mobile_view">
            <h2>모바일 화면</h2>
            <p>브라우저의 너비를 800 px이상으로 크게 늘여보세요.</p>
            <p>배경이 흰색에 글자가 검정색으로 바뀔 겁니다.</p>
        </div>
    </body>
</html>

viewport : 화면에 보이는 크기 -> 내가 화면을 키워도 viewport를 작게 잡으면 그 외 부분은 안보이는데 보통 이렇게 안함. 화면 크기랑 같이 간다

 

user-scalable=no : 사용자가 viewport를 조절하지 못하게 한다()

 

<link href = "" >외부에서 들고 옴

media="" <- 이 속성 자체를 미디어 쿼리라고 표현, 다 들고 오는건 아니고 해당하는 속성 값을 들고옴

 

03. 실전에 ‘미디어 쿼리’를 응용할 때 고려사항

1단계 : 모바일과 데스크탑 PC 인터넷 환경의 차이점 인식

① 가급적 이미지를 적게 사용해서 빠른 접속 속도가 나올 수 있도록 해야 함

② 가로 크기를 고정시켜 놓고 CSS 작업을 하는 것은 바람직하지 않음

③ 모바일 디바이스의 범위를 줄여서 테스트를 실시

④ 터치환경에서는 숨기는 메뉴를 사용하는 것은 바람직하지 않음

⑤ 모든 브라우저에서 모두 동일한 화면을 제공해 줄 필요는 없음

 

2단계 : HTML 작업

① 심플한 시멘틱 마크업

② 뷰포트 메타데이터

  <meta name="viewport" content="user-scalable=no,  
  width=device-width" />

3단계 : 모바일 스타일링

① 미디어 쿼리

② 공통 스타일 파일 제작

③ 하이퍼링크 스타일

④ 메뉴를 접근하기 편한 곳에 배치

 

① 미디어 쿼리

<link href="mobile.css" rel="stylesheet" type="text/css" 
   media="screen and (max-width:799px)">
<link href="desktop_pc.css" rel="stylesheet" type="text/css" 
   media="screen and (min-width:800px)">

 공통 스타일 파일 제작

<link href="common.css" rel="stylesheet" type="text/css">

 하이퍼링크 스타일

a:link, a:visited {
   color: inherit; /* 상위 엘리먼트의 색상 상속받음 */
   text-decoration: none;
}

a:hover, a:active {
   text-decoration: underline;
}

④ 메뉴를 접근하기 편한 곳에 배치

.sidebar ul { /* 맨 왼쪽에 장식용 바 그림 */
   border-left-width: 2px;
   border-left-style: solid;
   border-left-color: #ccc;
}

.sidebar ul li { /* 인라인 레벨로 바꾸고 오른쪽에 장식용 바 그림 */
   display: inline;
   border-right-width: 2px; 
   border-right-style: solid;
   border-right-color: #ccc;
   padding-right: 5px;
   padding-left: 5px;
}

4단계 : 데스크탑 PC 스타일링

① 타이틀은 배경이미지를 활용

② 메뉴를 PC환경에 맞게 배치하기

① 타이틀은 배경이미지를 활용

.head {
   background-image: url(title.png); /* 타이틀 이미지를 배경으로 바꿈 */
   background-repeat: no-repeat;
   width: 800px; /* 이미지 크기로 설정 */
   height: 264px;
}

.head h1 {
    /* 텍스트 제목은 이미지로 대치하므로 화면에서 생략함 */
   display : none; 
}

 

② 메뉴를 우측에 배치하기

.entries {
   float: left; /* "entries"를 상자로 간주하여 왼쪽으로 float */
   width: 680px; /* 너비는 sidebar도 고려하여 680px로 줄임 */
}

.sidebar {
   float: left; /* entries 옆에 나란히 출력을 위해 float 시킴 */
   text-align: right; /* 텍스트 표시는 우측 정렬시킴 */
   /* 너비는 entries 고려하여 800px을 넘지 않도록 100px 로 설정 */
   width: 100px; 
   margin-left: 20px; /* entries와 간격을 만듬 */
}

 

[따라해 보세요] 모바일과 PC 레이아웃 스타일 응용 (ex08-03)

common.css

@charset "utf-8";
@font-face { /* 서울남산체 (모바일용)를 다운로드 받아 설정 */
    font-family : SeoulNamsanFont;
    src: url('SeoulNamsan.ttf');
}

@font-face { /* 서울남산체 (Extra bold)를 다운로드 받아 설정 */
    font-family: SeoulNamsanFont;
    src: url('SeoulNamsanEB.ttf');
    font-weight: bold; /* bold 스타일은 이 폰트로 등록 */
}
* {
    margin: 0px;
    padding: 0px;
}
body {
    line-height: 150%;
    font-family: SeoulNamsanFont; /* 웹 폰트로 '서울남산체' 설정 */
}
a:link, a:visited {
    color: inherit; /* 상위 엘리먼트의 색상 상속받음 */
    text-decoration: none;
}
a:hover, a:active {
    text-decoration: underline;
}
h1 {
    font-size: 22px;
    color: #FFF;
}
h2 {
    font-size: 19px;
    color: #333;
    margin-top: 5px;
    margin-bottom: 5px;
}
h3 {
    font-size: 12px;
    color: #666;
    margin-top: 5px;
    margin-bottom: 5px;
}
p {
    margin-bottom: 10px;
}
header, footer {
    display: block;
}

<p> 문단 하나 잡겠다

<div> 구역 잡겠다

header, footer : sementic, 위치를 정하겠다

 

mobile2.css

@charset "utf-8";

.head {
    background-color: #473E37; /* 타이틀 그림 대신 고동색으로 변경 */
    padding: 1em;
}
.pg-main {
    padding-right: 10px;
    padding-left: 10px;
}
.entries p.pcview_only {
    display: none; /* pcview_only로 설정된 글 화면에서 생략 */
}
.sidebar ul { /* 맨 왼쪽 그림에 장식용 바 그림 */
    border-left-width: 2px;
    border-left-style: solid;
    border-left-color: #ccc;
}
.sidebar ul li { /* 인라인 레벨로 바꾸고 오른쪽에 장식용 바 그림 */
    display: inline;
    border-right-width: 2px;
    border-right-style: solid;
    border-right-color: #ccc;
    padding-right: 5px;
    padding-left: 5px;
}
.foot {
    background-color: #333;
    border-top-width: 1px;
    border-top-style: solid;
    border-top-color: #999;
    padding: 10px;
    color: #FFF;
    margin-top: 10px;
    text-align: center;
}

.sidebar ul

border-left-style: solid;

  • 이게 solid

 

desktop_pc2.css

@charset "utf-8";
    
.pg {
        width: 800px; /* 가로 너비를 800px로 고정 */
        margin-right: auto; /* 좌우 여백을 같게 하여 가운데 정렬 시킴 */
        margin-left: auto;
}
.head {
    background-image: url(title.png); /* 배경을 title.png로 하겠다 */
    background-repeat: no-repeat;   /* 이미지 사이즈가 작아도 여러번 반복해서 나타내지 않겠다 */
    width: 800px; /* 이미지 크기로 설정 */
    height: 264px;
}
.head h1 {
    display: none; /* 텍스트 제목은 이미지로 대치하므로 화면에서 생략함(공간도 사라짐) */
}
.entries {
    float: left; /* "entries"를 상자로 간주하여 왼쪽으로 float */
    width: 680px; /* 너비는 sidebar도 고려하여 680px로 줄임 */
}
.sidebar {
    float: left; /* entries 옆에 나란히 출력을 위해 float 시킴 */
    text-align: right; /* 너비는 sidebar도 고려하여 680px로 줄임 */
    width: 100px; /* 너비는 entries 고려하여 800px을 넘지 않도록 100px로 설정 */
    margin-left: 20px; /* entries와 간격을 만듬 */
}
.sidebar ul {
    list-style-type: none; /* 뷸렛(리스트에서 앞에 표시해주는 표식) 장식 제거 */
}
.foot {
    background-color: #333;
    border-top-width: 1px;
    border-top-style: solid;
    border-top-color: #999;
    padding: 10px;
    color: #FFF;
    margin-top: 10px;
    clear: left; /* 끌려 올라가지 않도록 clear 시킴 */
    text-align: center;
}

★디자인들

.pg

.head

.entries -> 전부 클래스들! 이름은 우리가 알아서 정하면 된다.

여기서 디자인을 지정해주고 html에서 이 클래스들을 적용해서 사용할 것

 

  • 이런게 뷸렛 -> list-style-type: none; -> 저런 뷸렛을 안보여 주겠다.

 

Ex08_3

<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html"; charset="utf-8">
        
        <title></title>
        
        <meta name="viewport" content="user-scalable=no", width="device-width" />
        <link href="common.css" rel="stylesheet" type="text/css"> /* 공통(pc, mobile 둘 다에서 적용될 걸 여기에서 지정) 적용 */
        <link href="mobile2.css" rel="stylesheet" type="text/css" media="screen and (max-width:799px)">
        <link href="desktop_pc2.css" rel="stylesheet" type="text/css" media="screen and (min-width:800px)">
    </head>
    
    <body>
        <div class='pg'>
            <header class='head'>
                <h1>미디어아트 인터랙션 디자인</h1>
            </header> <!-- 'head' 끝 -->
            
            <article class="pg-main">
                <section class='entries'>
                    <h2>브라우저의 너비를 800px 미만으로 줄여보세요.</h2>
                    <p class='pcview_only'>이 문장은 pc화면에서만 보입니다. 이 문장은 pc화면에서만 보입니다. 이 문장은 pc화면에서만 보입니다. 이 문장은 pc화면에서만 보입니다. 이 문장은 pc화면에서만 보입니다.이 문장은&nbsp;pc화면에서만 보입니다.이 문장은 pc화면에서만 보입니다. 이 문장은 pc화면에서만 보입니다. 이&nbsp; 문장은 pc화면에서만 보입니다. 이 문장은 pc화면에서만 보입니다. <span style="color: blue;"></span></p>
                    <p>이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은 모든 디바이스 화면에서 보입니다.<sp style="color: blue;" an=""></p>
                    <hr/>
                    <h2>반대로 브라우저의 너비를 800px 이상으로 늘려 보세요.</h2>
                    <p class='pcview_only'>이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은&nbsp;모든 디바이스 화면에서 보입니다. 이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은 모든 디바이스 화면에서 보입니다. ;이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은 모든&nbsp;디바이스 화면에서 보입니다.</p>
                    <p class='pcview_only'>이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은&nbsp;모든 디바이스 화면에서 보입니다. 이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은 모든 디바이스 화면에서 보입니다. ;이 문장은 모든 디바이스 화면에서 보입니다. 이 문장은 모등&nbsp;디바이스 화면에서 보입니다.</p>
                </section><!-- "entriese" 끝 -->
                
                <nav class='sidebar'>
                    <h3>SNS 등록</h3>
                    <ul>
                        <li><a href="#">페이스북</a></li>
                        <li><a href="#">트위터</a></li>
                    </ul>
                    <h3>카테고리</h3>
                    <ul>
                        <li><a href="#">디지털 아트</a></li>
                        <li><a href="#">사운드 아트</a></li>
                        <li><a href="#">정보 가시화</a></li>
                        <li><a href="#">뉴 미디어 프로그래밍</a></li>
                    </ul>
                </nav> <!-- 'sidebar' 끝 -->
            </article> <!-- 'pg-main' 끝 -->
            
            <footer class='foot'>
                <p>Copyright &copy; 2011 All Rights Reserved</p>
            </footer>  <!-- 'footer' 끝 -->
            
            
        </div>  <!-- 'pg' 끝 -->
    </body>
</html></sp>

목록에 뷸렛이 없는 것을 확인할 수 있음

 

 


<과제/평가>

- 포트폴리오, 실기시험

- 제출일 : ~1/20 ?????????????롸?

- 포폴 게시판에 제출하기

 

Focus : 디자인(구조, 레이아웃)

 

- HTML, CSS를 이용해서 UI를 만들 것

- 주제 : 자유주제

- PC용 view, Mobile용 view 만들고

- 메뉴 만들고 -> 클릭하면 바뀌도록

- 회원가입/개인 정보 입력

이런 틀은 똑같이 하면 된다.

[초기화] 버튼 클릭 시 reset 되도록 하기

- float으로 아래 페이지 똑같이 하기(시험)

 

제출 : 소스 코드는 압축해서 제출,

제출용 한글파일 제출

 

 

728x90
728x90