우리가 프로그램을 만드는 이유는 편의성을 위해서이다.

 

근데 자바스크립트는 동적인 웹페이지를 만들기 위해서 배운다고 했는데 

 

디자인 말고는 없는 것일까? 

 

그렇지 않다. 사실 자바스크립트로 할 수 있는 일은 무궁무진하다.

 

그중 하나가 동적인 웹페이지를 만드는 것일 뿐이다.

 

그럼 바로 다음 문법을 배워보자!

 

이번에도 콘솔 창을 이용해보자(키보드 상단의 f12를 눌러 console 탭을 클릭하면 console창이 나타난다.)

 

이 전엔 alert를 사용했었는데 console.log를 사용해 알림 창이 뜨는 것이 아니라

 

console창 내에서 출력하도록 해보자!

 

 

switch 조건문

이전에 우리는 if조건문에 대해 알아보았다. 

 

switch 조건문도 마찬가지로 조건을 주고 참, 거짓을 판단하여 코드의 실행 여부를 결정한다.

 

switch(변수명){
	case 조건 값:
      변수가 조건 값과 같을 경우 실행할 코드;
      break;
	case 조건 값:
      변수가 조건 값과 같을 경우 실행할 코드;
      break;
      ...
    default:
      그외의 값일 경우 실행할 코드(if문의 else와 같다.);
      break;
}

 

switch문은 case를 사용해 if문의 else if처럼 추가로 조건과 실행 코드를 만들 수 있다.

 

case뒤에는 세미콜론( ; )이 아닌 콜론( : )을 넣어야 한다.

 

또한 case에는 하나의 값만 넣을 수 있고 그것은 문자나 숫자와 같은 상수만 넣을 수 있다(비교 연산자 사용 x). (if문과의 차이점)

 

case를 많이 넣고 싶은 경우에는 case 1,2:가 아니라 case 1: case 2:를 사용해야한다.

case 조건 값, 조건 값: => X
   변수가 조건 값과 같을 경우 실행할 코드;
   break;
case 조건 값: case 조건 값: => O
   변수가 조건 값과 같을 경우 실행할 코드;
   break;

 

break;는 case가 참인 경우 코드를 실행하고 빠져나오는 구문이다.

 

break;를 사용하지 않고 첫 번째 case가 참이라면 그 밑의 case에 해당하는 코드 모두 실행된다.

 

더보기

개인적인 의견

break;를 이용해서 하나 또는 어떤 값들만 제외하고 모두 실행하고 싶은 경우에 break;를 넣지 않아 줌으로써 가능하지 않을까? 하지만 이럴 경우는 if문을 사용하는 것이 더 편리할 수 있겠다.

if문과 차이점을 잘 생각해서 편리한 것을 선택하길 바란다.

 


 

프로그램은 보통 어떤 알고리즘에 의해 돌아간다.

 

1. 변수, 입력

 

  1. if, switch 조건문

    1. 참 => 작업할 내용(반복문) or 종료

    2. 거짓 => 작업할 내용(반복문) or종료

이런 식의 알고리즘을 만들어 사용할 수 있을 것이다. 

 

여기서 작업할 내용으로 반복문을 사용할 수 있다.

 

for 반복문

for(var 변수초기화; 조건식; 증감식){
	반복할 코드;
}    

ex)
for(var i=0; i<10; i++){
	반복할 코드;
}    

for문에 필요한 식은 변수 초기화, 조건식, 증감 식이 있다.

 

변수의 초기화는 변수에 어떤 값을 주는 것이다.(단지 변수명만 준다면 변수는 제 역할을 못한다.)

 

조건식은 "'그' 변수가 어떤 조건 안에서"라는 뜻으로 조건을 줄 수 있다.

 

증감식은 말 그대로 증가, 감소하는 식이다. (i++은 1씩 증가하고  i--는 1씩 감소한다.)

 

 

while 반복문 

for문과 마찬가지로 반복을 할 수 있는 구문이다.

 

변수 선언문

while(조건식){
   반복할 코드;
   증감식;
}

ex)
var i=0;

while(i<10){
	console.log("ㅎㅇ용");
    i++;
}

 

for문과 차이점은 조건에 부합하지 않는다면 계속해서 반복할 코드를 반복한다는 것이다.

 

또 조건식에 true를 사용하면 무한 루프를 만들 수 있다.

 

지금은 무한 루프를 사용할 것이 아니므로 절대 i++;와 같은 증감식을 빼면 안 된다.

 

그러면 조건이 부합하지 않아서 무한루프에 빠진다.

 

변수로는 숫자만 선언이 가능하다.

 

 

공감 또는 훈수 부탁드립니다.(내가 그걸 모를 꺼 같니?? 라던가 응 아니야~이거야~ 해주세요)

 

그럼~ 앙 제바

 

'IT아카데미 > JAVASCRIPT' 카테고리의 다른 글

홈페이지 만들기 - JAVASCRIPT[0]  (0) 2020.05.19

다음은 슬라이드 쇼처럼 넘어가는 slider부분이다

이는 main이라기보다는 aside에 가깝다

퀵메뉴처럼 활용 되고 있기 때문이다

우리는 동적인 부분을 제외한 나머지를 만들기로 했기 때문에 슬라이드 부분은 한 개의 메뉴만 만들도록 하겠다.

먼저 수정한 부분이 조금씩 있다.

 

원래 있던 html문서에서 slider부분을 main 밖으로 빼고 header밑에 div태그로 감쌌다. 

 

또한 한 장면만 할 것이므로 문장과 a태그를 하나씩만 넣었다.

    </header>
  </div>
 <!--header 밑에-->
  <div id="slider"><!--slider전체의 공간을 주기위해 div로 감쌌다.-->
    <h3 class="hidden">슬라이더 메뉴</h3>
      <div><!---->
        <p>이미지에서 텍스트를 인식하는 기술<br />클로바OCR</p>
        <a href="https://clova.ai/speech" target="_blank">자세히 보기</a>
        <video loop muted preload="auto" autoplay style="width:100%">
          <source src="https://static-clova.pstatic.net/static/public/video/CH_OCRmain.mp4" type="video/mp4">
<!--video의 소스는 네이버 클로바에서 가져온것이다. 배경이 비디오 이므로 video태그를 이용해 자동 재생하도록 하였다.-->
        </video>
      </div>
  </div>
 <!--main 위에-->
 <main>
    <section>
      <h2 class="hidden">본문</h2>

 


작업 전

밑의 작업 후 와 비교해볼 때 어떤 속성을 적용해야 할지 생각해보자

 

1. slider의 공간이 생겼다

=> 기본 공간, margin, padding을 조사하고 값을 적용해 준다.

 

2. 공간들의 위치를 지정해 준다. 비디오 안에 텍스트가 들어가 있다.

=> margin 또는 padding으로 가능한 것은 그것으로 지정해준다.

그 외의 것은 position을 적용해준다.

 

3. 텍스트 색, 크기, 간격이 적용되었다. 테두리가 적용되었다.

=> color, font-size, letter-spacing, text-align, line-height , border를 지정해준다.

 

4. 자세히 보기에 마우스를 갖다 대면 배경색이 바뀐다. 하단의 메뉴 바를 클릭하면 배경색이 바뀐다.

=> a:hover를 이용하여 바꾸어 주도록 한다.

=> a:visited를 이용하여 바꾸어 주도록 한다.

     background-color 

5. 하단의 메뉴 바의 위치를 지정해 준다.

=> 각각의 메뉴들이 서로 동일하게 떨어져 있고 배경은 동일하게 가지고 있다.
    따라서 각각의 메뉴에 id값을 주어 margin값을 준다.

 


작업 후

원본과 비교


id값 지정 및 선택자 적기 

 

hmtl의 slider부분

  <div id="slider">
    <h3 class="hidden">슬라이더 메뉴</h3>
    <div>
      <p>이미지에서 텍스트를 인식하는 기술<br />클로바OCR</p>
      <a href="https://clova.ai/speech" target="_blank">자세히 보기</a>
      <video loop muted preload="auto" autoplay style="width:100%">
        <source src="https://static-clova.pstatic.net/static/public/video/CH_OCRmain.mp4" type="video/mp4">
      </video>
      <div id="menus">
        <a href="#" id="menu1"></a>
        <a href="#" id="menu2"></a>
        <a href="#" id="menu3"></a>
        <a href="#" id="menu4"></a>
        <a href="#" id="menu5"></a>
      </div>
    </div>
  </div>

css의 slider부분

/*slider*/
#slider {}
#slider div p {}
#slider div a {}
#slider div a:hover {}
/*하단의 메뉴바*/
#slider div div a {}
#slider div div a:visited {}
#menu2 {}
#menu3 {}
#menu4 {}
#menu5 {}

 

1. & 2. slider의 공간이 생겼다. 공간들의 위치를 지정해 준다. 비디오 안에 텍스트가 들어가 있다.


작업 후

이미지를 video태그 안에 넣고 제일 우선으로 보이게 하기 위해 새로운 속성을 배우게 되었다.

/*slider*/
#slider {
  width: 100%
}
#slider video{
  vertical-align: middle;
}
#slider div p {
  width: 560px;
  position: absolute;
  top: 248px;
  left: 674px;
  z-index: 1;
}
#slider div a {
  display: block;
  width: 141px;
  height: 50px;
  position: absolute;
  top: 387px;
  left: 880px;
  z-index: 1;
}
#slider div a:hover {}

/*하단의 메뉴바*/
#slider div div a {
  display: block;
  width: 40px;
  height: 1px;
  position: absolute;
  top: 640px;
  left: 831px;
  z-index: 1;
}
#slider div div a:visited {}
#menu2 {}
#menu3 {}
#menu4 {}
#menu5 {}

 

 

작업 내용(모든 공간들은 원본 페이지에서 참고할 수 있다.)

  1. width와 height를 사용하여 기본 공간을 지정해 주었다. (a요소에 공간을 지정하려면 display:block;잊으면 안 된다.)

  2. 비디오 태그 안에 텍스트를 넣기 위해서는 margin을 사용할 수 없었다
    margin을 사용하면 텍스트들이 비디오 밖으로 튀어 나가기 때문이었다.
    따라서 #slider div p, #slider div a, #slider div div a에 각각의 position과 그 값을 주었다.

  3. vertical-align을 사용하여 video태그 밑의 공간을 없애 주었다.
    높이가 따로 정해져 있지 않고 나중에 나올 하단 메뉴바의 테두리 공간이 div태그의 공간을 차지하기 때문에
    video 밑으로 빈 공간이 튀어나온다. vertical-align으로 인라인 요소를 중간으로 잡아주어 그것을 방지한다.
  4. 여기서 새로 배운 z-index를 활용한다.
    z-index란 레이어 들에게 순서를 정해주는 속성이다.
    ex) video레이어와 text레이어의 순위를 조절해서 video안에 text를 집어 넣었다.

3. & 4. 텍스트 색, 크기, 간격이 적용되었다. 테두리가 적용되었다. 자세히 보기에 마우스를 갖다 대면 배경색이 바뀐다. 하단의 메뉴 바를 클릭하면 배경색이 바뀐다.


작업 후

 

거의 완성되어 간다.ㅎ

/* slider */
#slider {
  width: 100%;
}
#slider div p {
  width: 560px;
  letter-spacing: -5px;
  position: absolute;
  top: 248px;
  left: 674px;
  color: #fff;
  font-weight: 900;
  font-size: 39px;
  text-align: center;
  z-index: 1;
  font-family: sans-serif;
}
#slider div a {
  display: block;
  width: 141px;
  height: 50px;
  border: 1px solid #fff;
  border-radius: 28px;
  position: absolute;
  top: 387px;
  left: 880px;
  z-index: 1;
  color: #fff;
  font-size: 15px;
  font-weight: 700;
  text-align: center;
  line-height: 50px;
}
#slider div a:hover {
  background-color: rgb(73, 231, 146);
  border: 1px solid rgba(228, 230, 202, 0);
}
#slider div div a {
  display: block;
  width: 40px;
  height: 1px;
  position: absolute;
  top: 640px;
  left: 831px;
  z-index: 1;
  background-color: rgba(119, 116, 116, 0.5);
  border: 1px solid rgba(252, 252, 247, 0);
}
#slider div div a:visited {
  background-color: #fff;
  border: 0;
}
#menu2 {}
#menu3 {}
#menu4 {}
#menu5 {}

 

작업내용

  1. 헤더의 배경색을 임의로 바꾸었다. 아쉽게도 헤더를 배경과 겹치게는 하지 못하였다.
  2. color와 font-size, font-weight, font-famliy를 이용하여 글자의 색과 크기, 굵기, 글꼴을 바꾸어 주었다.
    p, a에 각각 적용
  3. text-align과 line-height를 이용하여 글자들을 중앙 정렬해 주었다.
  4. border와 border-radius를 이용해 자세히 보기에 테두리를 적용해 주었다.
    또한 하단의 메뉴바에도 테두리를 적용해 주었다.
  5. a:hover와 a:visited 선택자를 이용해 각각의 a태그에 마우스를 갖다 대거나 클릭했을 때
    배경색(background-color)과 테두리(border)를 바꾸어주었다.

5. 하단의 메뉴 바의 위치를 지정해 준다.


작업 후

완성이다.

#slider div div a {
  display: block;
  width: 40px;
  height: 1px;
  position: absolute;
  top: 640px;
  left: 831px;
  z-index: 1;
  background-color: rgba(119, 116, 116, 0.5);
  border: 1px solid rgba(252, 252, 247, 0);
}
#slider div div a:visited {
  background-color: #fff;
  border: 0;
}
#menu2 {
  margin-left: 50px;
}
#menu3 {
  margin-left: 100px;
}
#menu4 {
  margin-left: 150px;
}
#menu5 {
  margin-left: 200px;
}

작업 내용

  1. 원래 겹쳐져 있던 menu바들에게 margin-left값을 적용해 주어 서로 떨어지게 끔 만들었다. 

slider부분을 마무리해 보았다.

 

 

공감 또는 훈수 부탁드립니다.(내가 그걸 모를 꺼 같니?? 라던가 응 아니야~이거야~ 해주세요) 

 

그럼~ 앙 제바

자바스크립트! 

 

처음 듣는다면 언어 자바의 속편인가? 싶을 것이다.

 

하지만 자바스크립트는 객체 기반 언어로 자바와 다른 언어이다.

 

자바스크립트를 개발할 즈음 언어 자바가 유행해서 이름을 자바스크립트라고 지었다는 속설도 있다.

 

일반적으로 자바스크립트는 웹 페이지의 동적인 부분을 가능하게 하는 영역을 맡고 있다.

 

자바스크립트는 언어임에도 불구하고 html 문서에 태그로 자리 잡을 수 있다.

 

<!DOCTYPE HTML>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8" />
    <title>자바스크립트 페이지</title>
    <script type="text/javascript">
      document.write("<p>Hello World!</p>");
    </script>
  </head>
  <body>
    <noscript>
      <p>브라우저가 자바스크립트 기능을 지원하지 않거나 자바스크립트 기능이 꺼져 있습니다.</p>
    </noscript>
  </body>
</html>

<!-- 
위키백과 참조
https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8
-->

 

 

자바스크립트는 종류가 엄청 다양하다.

 

우리가 사용하는 브라우져(크롬, 익스플로러, 파이어폭스 등)들은 각각의 자바스크립트를 구현한다.

 

그래서 ECMA에서 표준안을 해당 년도마다 내고있다.

 

2016년에 ECMA는 ES6를 표준안으로 내놓았는데 이전 버전(?)인 ES5와 다른 버전에 비해 큰 격차를 지니고 있다.(특히 arrow)

 

우리가 배워야하는 문법은 ES6일수록 좋다 하지만 기본적인 문법을 먼저 공부하고 ES6를 알아보도록 하자.

 

문법을 배우기 전에

먼저 자바스크립트를 사용할 환경을 만들어 주어야한다. 

 

지켜보고 있는 이 페이지에서 f12번을 누른다면 console탭을 찾을 수 있다.

 

Console탭에서 간단한 문법정도는 사용이 가능하니 일단은 에디터나 다른 것 필요없이 직접 문법을 적어보기를 바란다.

변수 var

 

각기 프로그래밍 언어들마다 변수를 선언하는 방법이 다 다르다.

 

개인적으로 자바스크립트의 변수 선언법은 정말 마음에 든다.

 

C언어나 JAVA의 경우 엄격하게 type을 명시해야만 선언이 가능했다.

 

자바스크립트는 var로 숫자건 문자건 모두 선언이 가능하다.

 

var name="홍길동"
var age=25

 

출력문 alert

printf(), print() 많이들 들어보았으리라 믿는다. 

 

C언어나 Python(파이썬)에서는 출력하기위해 위의 출력문을 사용한다.

 

이와 같은 의미로 자바스크립트에서는 눈에 보여지기위해

 

또는 에러를 찾거나 경고를 알리기위해 alert();를 사용한다.

 

var name="홍길동"
var age=25
alert(name+age);

 

if 조건문

C언어를 기반으로 해서 그런지 기본 문법이 C언어와 관련된 문법들이다.

 

if(조건문){

    조건이 참일 경우 실행할 코드; 

}else{

    조건이 거짓일 경우 실행할 코드;

}

 

var name="홍길동"

if(name=="홍길동"){
     alert("홍길동이다!!!")
}else{
     alert("홍길동이 아니군!")
}

 

Console창에 직접 실행해본다면 알림창이 나타날 것이다.

 

 

 

 

내가 웹 개발을 생각하게 된 2019년 프론트앤드와 백엔드 개발자가 있었다.

 

두 개발자는 각각 클라이언트와 서버로 나누어서 개발을 했다.

 

하지만 앱 개발을 보면 둘을 동시에 해야만 한다. 

 

이유는 무엇일까? 

 

전 세계의 모든 사람들이 인터넷을 이용하게 되면서 점점 더 화려하고 움직이는 웹을 요구했다.

 

자바스크립트는 그것을 성공 해내는 언어였고 2015년부터 극적인 성장을 했다.

 

웹 개발을 위해 할 일이 많아지면서 자연스럽게 프론트앤드와 백엔드로 나뉘었다고 한다.

 

하지만 2020년 추세는 풀스택 개발자(프론트앤드와 백엔드 모두를 다루는 개발자)를 필요로 한다.

 

사람인, stackoverflow와 같은 구직 사이트를 참고 하면 따로국밥보다는 말아서 풀스택을 채용하는 회사들이 많아지고 있다.

 

 

공감 또는 훈수 부탁드립니다.(내가 그걸 모를 꺼 같니?? 라던가 응 아니야~이거야~ 해주세요) 

 

그럼~ 앙 제바

 

'IT아카데미 > JAVASCRIPT' 카테고리의 다른 글

홈페이지 만들기 - JAVASCRIPT[1]  (0) 2020.05.21

우리는  초기화를 통해 css속성을 적용할 준비를 마쳤다.

Header를 카피해보도록 하자.

※포토샵을 사용하면 가이드라인을 잡을 수 있다.

가이드라인은 공간의 위치를 잡을 때 필요하다.

포토샵이 없다면 페이지 검사를 통해 공간의 크기와 위치를 알 수 있다.

포토샵이 있어도 이 기능은 사용해야 한다.

 

 

먼저 이미지 파일로 재료들을 첨부하겠다.

 

logo.png (이 이름 그대로 images폴더에 넣어준다.)
임의로 가이드라인을 잡은 헤더부분


작업 전

 

밑의 작업 후 와 비교해볼 때 어떤 속성을 적용해야 할지 생각해보자

 

1. header의 공간이 생겼다, 배경색이 적용되었다.

=> 기본 공간, margin, padding을 조사하고 값을 적용해 주고 background색을 지정해준다.

 

2. 공간들의 위치를 지정해 준다.

=> margin 또는 padding으로 가능한 것은 그것으로 지정해준다.

그 외의 것은 position, line-height 등을 적용해준다.

 

3. 텍스트 색, 크기, 간격이 적용되었다. 

=> color, font-size, letter-spacing을 지정해준다.

 

4. 메뉴들마다 마우스를 갖다 대면 글자색, 밑줄, 배경색이 바뀐다.

=> a:hover를 이용하여 바꾸어 주도록 한다.

color, text-decoration, background-color 

 

 

 

 


작업 후

 

원본과 비교

 

 

 


id값 지정 및 선택자 적기

 

html의 header부분

<div id="headerWrap"> <!--header를 중앙 정렬하기위해 div태그로 감싸준다.-->
    <header id="header"><!--header에 id header값을 주었다. -->
      <h1 id="logo"><a href="https://clova.ai/ko">Naverclova</a></h1><!--id logo -->
      <nav id="gnb"><!--id gnb 메뉴 네비게이션-->
        <h2 class="hidden">menu</h2>
        <ul>
          <li><a href="https://clova.ai/ko/aisolutions/">기술 &#183; 솔루션</a></li>
          <li><a href="https://clova.ai/ko/products/">제품</a></li>
          <li><a href="https://clova.ai/ko/platform/">플랫폼</a></li>
          <li><a href="https://clova.ai/ko/ko-partner.html">파트너</a></li>
          <li><a href="https://clova.ai/ko/research/research-areas.html">리서치</a></li>
        </ul>
      </nav>
      <nav id="customermenu"><!--id customermenu 2번째 메뉴(고객센터처럼 따로 있는 메뉴들) -->
        <h2 class="hidden">customer menu</h2>
        <ul>
          <li id="bis"><a href="https://www.ncloud.com/product/aiService" target="_blank">
              Biz Start</a></li><!--id bis 서로 다른 크기를 가지므로 나눠준다. -->
          <li id="biz"><a href="https://www.navercorp.com/naver/proposalRegister?joinSiteCd=NVR&joinTypeCd=CLP#proposalGuideLine" target="_blank">비즈니스 문의</a></li><!--id biz -->
        </ul>
      </nav>
    </header>
  </div>

css의 header부분

/*선택자들을 모두 적었다가 안쓰는 부분은 지워주는 방향이 좋다.*/
/*header전체부분*/
#headerWrap {} 
#header {}
/*logo*/
#logo {}
#logo a {}
/*gnb*/
#gnb {}
#gnb ul {}
#gnb ul li {}
#gnb ul li a {}
#gnb ul li a:hover {}
/*customermenu*/
#customermenu {}
#customermenu ul li {}
#customermenu ul li a {}
#bis a {}
#biz a {}
#bis a:hover {}
#biz a:hover {}

 

 

1. header의 공간이 생겼다, 배경색이 적용되었다.


작업 전/후

작업 후가 더 엉망진창으로 보이지만 공간이 설정된 것이다.

/*header전체부분*/
#headerWrap {  width: 100%;  height: 86px;  background: rgba(0, 0, 0, 0.4);}
#header {  width: 1140px;  height: 100%;  }
/*logo*/
#logo {  width: 145px;  height: 22px;}
#logo a {  display: block;  width: 145px;  height: 22px;
background: url(images/logo.png) no-repeat;}
/*gnb*/
#gnb {  width: 602.98;  height: 86px;}
#gnb ul {}
#gnb ul li {}
#gnb ul li a {}
#gnb ul li a:hover {}
/*customermenu*/
#customermenu {}
#customermenu ul li {}
#customermenu ul li a { }
#bis a {  display: block;  width: 48px;  height: 14px; }
#biz a {  display: block;  width: 68.531px;  height: 14px;}
#bis a:hover {}
#biz a:hover {}

작업 내용(모든 공간들은 원본 페이지에서 참고할 수 있다.)

  1. width와 height를 사용하여 기본 공간을 지정해 주었다. (a요소에 공간을 지정하려면 display:block;잊으면 안 된다.)

  2. background를 사용하여 이미지가 들어갈 부분(logo)은 경로를 색이 들어갈 부분은 색 단위를 통해 색 코드를 넣어준다.

 

2. 공간들의 위치를 지정해 준다.


작업 후

 

이제 좀 형태를 띠는 것 같아 보인다. 

#headerWrap {
  width: 100%;
  height: 86px;
  background: rgba(0, 0, 0, 0.4);
}

#header {
  position: relative;
  width: 1140px;
  height: 100%;
  margin: 0 auto;
}

/*logo*/
#logo {
  float: left;
  width: 145px;
  height: 22px;
  margin-top: 32px;
}

#logo a {
  display: block;
  width: 145px;
  height: 22px;
  background: url(images/logo.png) no-repeat;
}

/*gnb*/
#gnb {
  overflow: hidden;
  width: 602.98;
  height: 86px;
}

#gnb ul {
  margin-left: 123px;
}

#gnb ul li {  float: left;}

#gnb ul li a {
  display: block;
  padding: 34px 36px;
}

#gnb ul li a:hover {}

/*customermenu*/
#customermenu {
  position: absolute;
  top: 32px;
  right: 0;
}

#customermenu ul li {
  float: left;
}

#customermenu ul li a {}

#bis a {
  display: block;
  width: 48px;
  height: 14px;
  padding: 8px 13px;
}

#biz a {
  display: block;
  width: 68.531px;
  height: 14px;
  padding: 8px 13px;
  margin-left: 8px;
}

#bis a:hover {}

#biz a:hover {}

작업 내용

  1. margin값을 찾아서 각 요소에 적용해 주었다.

    (header에는 margin:0 auto;를 주어 중앙 정렬이 되게 했다.)

    (bis와 biz사이에 8px만큼의 공간이 있어 margin-left값을 주었다.)

  2. padding값을 찾아서 각 요소에 적용해 주었다.

    (gnb의 각 a 요소들은 내부 공간을 가지고 있다.)

    (마찬가지로 bis, biz도 내부 공간을 주었다.)

  3. float를 사용하여 가로 정렬해주도록 한다.

    (로고와 각 메뉴의 li요소에 float:left;를 주어 가로 정렬하도록 한다.

    float를 해제해야 할 경우 부모 요소에 overflow:hidden;을 적용하여준다.)

  4. position을 사용하여 복잡한 위치를 지정해준다.(customermenu)

    (customermenu의 위치는 header의 오른쪽에 딱 붙어 있으며 위로 32px만큼 떨어져 있다.)

 

3.&4. 텍스트 색, 크기, 간격이 적용되었다.  메뉴들마다 마우스를 갖다 대면 글자색, 밑줄, 배경색이 바뀐다.


작업 후

header부분이 완성되었다.

/*header전체부분*/
#headerWrap {
  width: 100%;
  height: 86px;
  background: rgba(0, 0, 0, 0.4);
}

#header {
  position: relative;
  width: 1140px;
  height: 100%;
  margin: 0 auto;
}

/*logo*/
#logo {
  float: left;
  width: 145px;
  height: 22px;
  margin-top: 32px;
}

#logo a {
  display: block;
  width: 145px;
  height: 22px;
  background: url(images/logo.png) no-repeat;
  text-indent: -9999px;
}

/*gnb*/
#gnb {
  overflow: hidden;
  width: 602.98;
  height: 86px;
}

#gnb ul {
  margin-left: 123px;
}

#gnb ul li {
  float: left;
  font-size: 16px;
  font-weight: 700;
}

#gnb ul li a {
  display: block;
  padding: 34px 36px;
  letter-spacing: -2px;
  color: rgba(255, 255, 255, 0.6);
}

#gnb ul li a:hover {
  text-decoration: underline;
  color: #fff;
}

/*customermenu*/
#customermenu {
  position: absolute;
  top: 32px;
  right: 0;
}

#customermenu ul li {
  float: left;
}

#customermenu ul li a {
  border: 1px solid #fff;
  border-radius: 3px;
  color: rgba(255, 255, 255, 0.7);
  font-size: 12px;
  white-space: nowrap;
}

#bis a {
  display: block;
  width: 48px;
  height: 14px;
  padding: 8px 13px;
}

#biz a {
  display: block;
  width: 68.531px;
  height: 14px;
  padding: 8px 13px;
  margin-left: 8px;
  text-indent: -3px;
}

#bis a:hover {
  color: #000;
  background-color: #fff;
}

#biz a:hover {
  color: #000;
  background-color: #fff;
}

작업 내용

  1. color와 font-size를 이용해 각각의 요소에 적용해 주었다.

  2. logo의 경우 영역은 필요하지만 텍스트가 있으면 배경 이미지와 겹친다.

    (text-indent:-9999px;을 이용해서 텍스트를 화면 밖으로 멀리 날려 버린다.)

  3. 원본의 gnb 텍스트들은 간격이 좁다 (폰트가 적용되어서 그런 것 같다.)

    (우리는 폰트가 따로 없으므로 일단은 letter-spacing:-2px;로 간격을 좁혀주었다.)

  4. biz의 텍스트는 가운데가 아니라 살짝 오른쪽으로 치우쳐져 있다.

    (text-indent:-3px;을 이용해서 왼쪽으로 옮겨주었다.)

  5. border를 사용해서 customermenu에 테두리를 주었다.

    (border: 1px solid #fff;테두리를 주고 border-radius:3px; 모서리를 둥글게 했다.)

  6. a:hover선택자를 이용해서 마우스를 갖다 대었을 때 배경이나 글자색이 변경되도록 했다.

 

header부분을 마무리해 보았다. 

 

 

공감 또는 훈수 부탁드립니다.(내가 그걸 모를 꺼 같니?? 라던가 응 아니야~이거야~ 해주세요) 

 

그럼~ 앙 제바

HTML 문서 구조를 잡았다면 CSS의 초기화 및 선택자를 입력해 주어야 한다.

 

먼저 CSS를 초기화해 주도록 하자

 

CSS초기화

초기화를 해 주는 이유는 간단하다.

 

기본 값을 없애주기 위해서이다. 

 

만약 기본값이 있다면 우리는 그 공간에 대해 추가 코드를 작성해야 할 것이다. 

 

그것을 미리 없애주고 시작하는 것이다. 

 

 

1. 딱 붙이기(공간 없애기)

CSS속성을 설명할 때 기본 요소에 공간이 조금씩 들어가 있다고 했었다.


작업 전

 

 

구조화만 된 html문서를 열어보면 왼쪽 이미지처럼 멸치 뼈 같이 보일 것이다.

 

딱 붙이기 작업은 멸치 뼈 사이사이 보이는 공간들을 위로 딱 붙여주는 것이다.

 

우리가 가지고 있는 요소들 중 공간을 가진 요소들은 

 

body, h시리즈(h1, h2...) p, ul 정도가 있다. 

 

이 요소들의 공간을 줄이기 위해선?

 

CSS에 그 속성인 margin:0; padding:0;을 적용해준다.

 

body, h1, h2, h3, h4, h5, h6, p, ul {
	margin: 0; padding: 0; 
}

 

 

 

 

 


작업 후

 

 

 

 딱 붙이기 작업을 통해 이렇게 공간을 제거해 주었다.

 

왼쪽 이미지의 길이를 위의 이미지와 비교해 보면

 

공간을 제거해 준 것을 확연하게 느낄 수 있다. 

 

하지만 자세히 보면 아직도 공간이 남아 있는 것처럼 보인다

 

그것은 대문자나 i와 같이 다른 글자보다 높이가 긴 글자를 위해서 남겨진 것이다.

 

※다른 사이트를 카피하거나 다른 구조를 갖추었다면 초기화할 대상이 달라질 수 있다.

 

 

 

 

 

2. 초기화 스타일 

 

딱 붙이기 같은 경우는 기본적으로 거의 모든 페이지가 해 준다.

 

하지만 나머지 초기화는 각자의 스타일이 있다.

 

우리는 초기화로 몇 가지를 더 해볼 것이다.

 

  1. 하이퍼링크의 밑줄 없애기 및 글자색 변경
  2. 리스트 앞의 특수문자 검은 동그라미 없애기
  3. 실제 페이지에 안 보이는 글자 숨기기(접근성이나 아웃라인을 위해 존재해야 함)
  4. 기울어있는 글자 바로잡기

 

1. 하이퍼링크의 밑줄 없애기 및 글자색 변경


작업 전

 

 

왼쪽 이미지처럼 하이퍼링크를 걸게 되면 

 

클릭 전에는 파란색 클릭 후에는

 

보라색으로 글자색이 정해지고 

 

밑줄이 생긴다.

 


작업 후

 

 

선택자: 하이퍼링크의 요소인 a에 CSS속성을 적용한다.

 

CSS속성: text-decoration: none; (글자에 밑줄을 지정하는 속성)

                   color: #000;                        (글자에 색을 지정하는 속성)

a {
  text-decoration: none;
  color:#000;
}

 

2. 리스트 앞의 특수문자 없애기(검은 동그라미)


작업 후

 

 

1번 작업 후 이미지가 2번 작업 전 이미지이다.

 

선택자: 리스트 요소인 li(ul이 아니다 ul은 li를 감싸는 태그)

 

CSS속성: list-style:none; (리스트의 스타일을 지정하는 속성)

ul li {
  list-style: none;
}

 

 

3. 실제 페이지에서는 안 보이는 글자 숨기기


작업 전

 

 

임의로 빨간 밑줄을 그은 본문, 슬라이더 메뉴는 

 

우리가 아웃라인을 위해 임의로 정해준 제목이기 때문에

 

실제 네이버 클로바 페이지에선 보이지 않는다.

 

있지만 보이지 않게 해야 한다.

 

선택자를 위해 class값을 준다. (이름은 hidden으로 하겠다.)

 

로고의 경우(영역은 있지만 글자를 안 보이게) text-indent속성을 사용한다

 

하지만 지금처럼 글자도 영역도 안보이게 하는 것은 어떤 속성을 사용해야 할까? 

 

바로 위치 속성인 position을 사용하는 것이다.

.hidden {
  position: absolute;
  left: -9999px;
}

left로 -9999px만큼 주게 된다면. hidden을 가진 모든 요소들은 화면 밖 저 멀리로 날아가 버린다.


적용 후

 

 

이렇게 사라진 것을 확인할 수 있다.

 

class="hidden"을 준 태그는 "menu", "customer menu", "본문", "슬라이더 메뉴", "footer"를 텍스트로 가진 h2, h3요소이다.

 

 

 

4. 기울어있는 글자 바로잡기


작업 전

 

결과를 보여 주기 위해 footer를 임의로 넣고 빨간 밑줄을 그었다.

 

footer의 address요소가 가지고 있는 텍스트들은 기본 값이 italic이라서 살짝 기울어 있다.

 

따라서 선택자는 address이고 font-style:normal;속성을 적용해준다. 

address {
  font-style: normal;
}

작업 후

 

 

글자들이 똑바로 잡힌 것을 볼 수 있다.

 

이렇게 초기화를 모두 해 보았다. 

 

초기화 값은 서브 페이지에서도 사용될 수 있으므로 잘 알아놓는 것이 좋다.

 

다음장에서는 header부분에 대해 다뤄보도록 하겠다.

 

 

 

공감 또는 훈수 부탁드립니다.(내가 그걸 모를 꺼 같니?? 라던가 응 아니야~이거야~ 해주세요) 

 

그럼~ 앙 제바

이제까지 우리가 배운 HTML과 CSS를 사용하여 네이버 클로바(Naver Clova)를 카피해보자

 

https://clova.ai/ko

 

바로 이 홈 화면 중 움직이지 않는 것(javascript를 활용하지 않는 것)만 카피하려고 한다.

 

자! 시작해보자.

 

 

 

1. 로컬디스크에 html폴더를 생성한다.

 

 

2. html폴더 안에 각각 css, images, webfont 등 경로를 사용할 폴더들을 생성한다.

 

3. 우클릭 후 텍스트 문서를 만들어 index.html(제일 첫 문서의 이름이다.)로 이름 지어준다.

 

4. 구조화 작업에 들어가 준다.

난잡해 보이지만 대략적인 레이아웃을 땄다.

대략적인 구조는 위의 그림과 같다. 

 

내가 정한 구조는 위와 같다.

 

아웃라인을 설정하고 텍스트를 입력하였다.

 

<!DOCTYPE html>
<html lang="ko" dir="ltr">

<head>
  <meta charset="utf-8">
  <title>네이버클로바copy</title>
  <link rel="stylesheet" href="navercloba.css">
</head>

<body>
  <div id="headerWrap">
  <header id="logo">
    <h1>Naver cloba</h1>
  <nav>
    <h2>menu</h2>
    <ul>
      <li>기술·솔루션</li>
      <li>제품</li>
      <li>플랫폼</li>
      <li>파트너</li>
      <li>리서치</li>
    </ul>
  </nav>
  <nav>
    <h2>customer menu</h2>
    <li><a href="https://www.ncloud.com/product/aiService" target="_blank">
        Biz Start</a></li>
    <li><a href="https://www.navercorp.com/naver/proposalRegister?joinSiteCd=NVR&joinTypeCd=CLP#proposalGuideLine" target="_blank">
        비즈니스 문의</a></li>
  </nav>
    </header>
  </div>
  <main>
    <section>
      <h2>본문</h2>
      <section id="slider">
        <h3>슬라이더 메뉴</h3>
        <article>
          <h4>음성 인식을 위한 AI기술<br />클로바 스피치</h4>
          <button type="button" name="button"><a href="https://clova.ai/speech" target="_blank">자세히 보기</a></button>
        </article>
        <article>
          <h4>동영상에 AI보이스를 더하는<br />클로바더빙</h4>
          <button type="button" name="button"><a href="https://clovadubbing.naver.com/" target="_blank">자세히 보기</a></button>
        </article>
        <article>
          <h4>완전히 새로워진 전화 응대 솔루션<br />클로바 AI고객센터</h4>
          <button type="button" name="button"><a href="https://clova.ai/aicontactcenter" target="_blank">자세히 보기</a></button>
        </article>
        <article>
          <h4>AI보이스를 구현하는 기술<br />클로바 보이스</h4>
          <button type="button" name="button"><a href="https://clova.ai/voice" target="_blank">자세히 보기</a></button>
        </article>
        <article>
          <h4>당신의 더 편리하고 행복한 미래<br />새로운 플랫폼 네이버 클로바</h4>
          <button type="button" name="button"><a href="https://clova.ai/ko/platform" target="_blank">자세히 보기</a></button>
        </article> -->
      </section>
      <div id="section1Wrap">
      <section id="section1">
        <h3>Clova ai</h3>
          <p>네이버 클로바는 독자적으로 개발한 AI 기술을 통해<br /> 세상에 없던 새로운 기술, 서비스, 제품을 만들어가고 있습니다.</p>
        <article>
          <h4>Device & Service</h4>
          <p>스마트 디바이스, 서비스로<br />더욱 편리한 일상을 만나보세요.</p>
        </article>
        <article>
          <h4>Solution</h4>
          <p>비즈니스 맞춤형 AI솔루션으로<br />혁신을 경헙하세요.</p>
        </article>
        <article>
          <h4>Product</h4>
          <p>세계 최고 수준의 AI가 적용된<br />놀라운 서비스, 제품을 제공해보세요.</p>
        </article>
        <article>
          <h4>Research</h4>
          <p>CLOVA AI의 독자적인 기술과<br />세계적인 연구 성과를 확인하세요.</p>
        </article>
      </section>
      </div>
      <div id="section2Wrap">
      <section id="section2">
        <h3>Clova ai special Feature</h3>
        <p>네이버, 라인의 풍부한 데이터와<br /> 세계 최고 수준의 AI기술이 만나<br />전에 없던 시너지를 창출합니다.</p>
        <article>
          <h4>Customized Solution</h4>
          <p>네이버, 라인의 서비스를 통해 측정된<br>
            데이터와 클로바의 자체 기술로 제작한<br>
            AI엔진을 활용하여, 개발 비즈니스의<br>
            니즈에 부합하는 Customized Solution<br>
            을 제공합니다.</p>
        </article>
        <article>
          <h4>Integrated AI Engine</h4>
          <p>네이버 클로바에서 자체적으로 보유한 AI<br />
            기술을 복합적으로 활용한 솔루션을 개발<br />
            할 수 있습니다. 이를 통해 단일 기술을<br />
            활용한 경우보다 월등한 시너지를 만들어<br />냅니다.</p>
        </article>
      </section>
    </div>
      <aside id= banner1>
        <h3>clova official blog</h3>
        <p>클로바 공식 블로그에서 다양한 소식을 확인해보세요</p>
        <button type="button" name="button"><a href="https://blog.naver.com/clova_ai" target="_blank">자세히 보기</a></button>
      </aside>
      <div id="section3Wrap">
      <section >
        <h2>Latest News</h2>
        <p>좀더 편리하고 스마트한 삶을 위한 클로바의 다양한 AI 적용사례 및 소식들을 확인해보세요.</p>
        <article><a href="https://www.yna.co.kr/view/AKR20200309082400061?input=1195m">
            <img src="https://ssl.pstatic.net/static/clova/service/clova_ai/image/main/news/0401_clova_carecall_pc.png" alt="">
            <h4>클로바 케어콜 성남시에 시범 적용</h4>
            <p>의료 분야의 전화상담 및 응대를 수행하는 AI 솔루션으로, 코로나19 능동감시자 대상에게 전화를 걸어 증상을 확인하고 결과를 보건소에 전송합니다.</p>
          </a></article>
        <article><a href="https://www.etnews.com/20200228000207">
            <img src="https://ssl.pstatic.net/static/clova/service/clova_ai/image/main/news/0401_clova_dubbing_pc.png" alt="">
            <h4>클로바더빙 무료 이용</h4>
            <p>코로나19 확진자 급증에 따른 정보성 콘텐츠를 보다 편리하게 제작하실 수 있도록 기관 및 기업 그리고 개인에게 클로바더빙 사용을 무료로 지원합니다.</p>
          </a></article>
        <article><a href="http://cvpr2020.thecvf.com/">
            <img src="https://ssl.pstatic.net/static/clova/service/clova_ai/image/main/news/0401_cvpr_pc.png" alt="">
            <h4>세계 최고 권위 학회 연구 성과</h4>
            <p>컴퓨터 비전 분야 최고 학회 CVPR 2020에서 연구 논문 5개, 음성신호처리 분야 최고 학회 ICASSP 2020에서 연구 논문 7개가 채택됐습니다.</p>
          </a></article>
      </section>
      </div>
      <aside id="banner2">
        <h3>With Naver Clova</h3>
        <p>네이버 클로바가 제안하는 AI 솔루션을 통해 비즈니스의 새로운 성장과 발전을 경험하세요.</p>
        <button type="button" name="button"><a href="https://www.navercorp.com/naver/proposalRegister?joinSiteCd=NVR&joinTypeCd=CLP#proposalGuideLine" target="_blank">비즈니스 문의</a></button>
      </aside>
    </section>
  </main>
  <footer id="footer">
    <h2>footer</h2>
<small><a href="https://clova.ai/ko/">NAVER CLOVA</a></small>
<address>
  <small>고객센터 1833-5387 | 09:00 - 18:00(주말, 공휴일 휴무)</small>
  <small>Powered by NAVER · LINE</small>
</address>

  </footer>

</body>

</html>

구조화 및 텍스트 입력 끝

 

다음장에서는 id,class와 값을 주고 div태그로 감쌀 부분 등 CSS에 맞춰 세부적인 구조를 짜는 것을 해보도록 하겠다. 

 

 

공감 또는 훈수 부탁드립니다.(내가 그걸 모를 꺼 같니?? 라던가 응 아니야~이거야~ 해주세요) 

 

그럼~ 앙 제바

CSS속성

 

글자

font로 시작하는 속성

: 텍스트의 글꼴, 크기 등 텍스트 스타일을 수행하는 속성들

 

text로 시작하는 속성 

: 텍스트의 정렬, 텍스트 변환 등과 같은 텍스트 조작을 수행하는 속성들

 

font

 

font-style: 이탤릭체 등의 글꼴 스타일 지정

#normal {
      font-style: normal;
    }
#italic {
    font-style: italic;
    }

font-weight: 글자의 두께

#lighter {
      font-weight: 100;
    }
#bolder{
      font-weight: 900;
    }

100-900까지 있으며 얇게서부터 굵게 간다.

 

  • 100(lighter, 얇게)

  • 400(normal, 보통)

  • 700(bold, 굵게)

  • 900(bolder, 더 굵게)

 

font-size: 글자의 크기

 

글자의 크기를 숫자 뒤에 단위(px, %, em 등)를 통해 지정할 수 있다.

 

※스마트폰과 태블릿이 나오면서 반응형 단위인 vw(브라우저 넓이), vh(브라우저 높이)를 사용한다.

 

 

font-family: 글꼴을 지정

#sans-serif {
      font-family: sans-serif;
    }

글꼴의 이름을 값으로 가진다.

 

※웹폰트: 웹 사용자에게도 동일한 글꼴을 보여준다.(설치 및 설정 없이)

/*임의의 폰트 설정*/
@font-face{
  font-family: 임의의 폰트 이름;
  src: url(폰트의 경로);
}
/*폰트 적용*/
적용할 태그 명{
  font-family: 위에 적은 폰트 이름;
}

 

 

순서대로 한꺼번에 사용할 수 있다.

/*각각 사용 예시*/
#text1 { font-size: 19px }
#text2 { font-weight: bold }
#text3 { font-style: italic }
#text4 { font-family: "궁서" }
/*한꺼번에 사용*/
#text4{ font: italic bold 20px serif; }/*스타일 굵기 크기 글꼴 순으로 사용*/

 

 

text

text-decoration: 글자에 선을 넣어주는 속성

#line-through {
      text-decoration: line-through;
    }
#overline{
      text-decoration: overline;
    }
#underline{
      text-decoration: underline;
    }

 

text-align: 글자를 정렬한다.

#left {
      text-align: left;/*좌로 정렬*/
    }
#right{
      text-align: right;/*우로 정렬*/
    }
#center{
      text-align: center;/*중앙 정렬*/
    }

 

보통 블락 요소 내의 공간에서 text를 정렬한다.

 

인라인 요소는 공간 자체가 텍스트에 딱 맞기 때문에 정렬이 무의미하다.

 

 

 

 

 

 

 

 

 

 

vertical-align: 인라인 요소들의 수직 정렬에 사용된다.

img{
  vertical-align: 100px;
}
span{
  vertical-align: top;
}

인라인 요소들 간의 수직 정렬이므로 블락요소에 하면 효과가 없다.

 

Ex) 어떤 블락 요소를 수직으로 옮기려고 시도한다면 실패할 것이다.

 

 

 

 

 

 

 

 

 

 

 

 

text-indent: 문단의 들여쓰기를 하는 속성

p {
  text-indent: 1em;
 }

※text-indent속성으로 영역은 필요하고 접근성에도 필요하지만 텍스트를 없애고 싶은 경우

  text-indent:-9999px;을 해주면 화면 저 멀리 사라진다.

 

 

 

text-transform: 대소문자를 지정할 수 있는 속성

p {
  text-transform: uppercase;/*대문자*/
}

※HOME 같은 경우 발음을 홈이 아닌 H O M E로 따로 발음하기 때문에 소문자로 넣어야 하지만 대문자로 넣고 싶은 경우에 text-transform을 활용해준다.(접근성과 밀접한 관련이 있다.)

 

 

 

line-height: 줄 높이를 설정하는 속성

 

기본적으로 줄과 줄 사이의 간격이 있다. 그것을 설정할 수 있는 속성이다.

 

#px {
        line-height: 25px;
      }
#em {
        line-height: 1.6em;
      }

 

 

letter-spacing, word-spacing각각 글자, 단어의 공간에 대한 속성이다.

 

숫자 뒤에 단위를 적어서 사용하고 글자마다, 단어마다 공간을 넓히거나 좁힐 수 있다.

 

 

 

white-spacing: 줄 바꿈에 대한 속성이다.

 

normal: 기본 값. 자연스럽게 줄 바꿈이 일어난다.

 

nowrap: 줄바꿈이 일어나지 않는다. 심지어 브라우저 밖으로 가도 일어나지 않는다. <br/>을 사용해도 일어나지 않는다.

 

pre: 브라우져 밖으로 가도 줄 바꿈을 쓰지 않는다면 줄 바꿈이 일어나지 않는다. 사용하면 일어난다.

 

pre-linepre: 띄어쓰기의 공백은 보여지지 않고(물론 글 내에서 띄어 쓰는 것은 보임) 줄 바꿈은 일어난다. 

 

pre-wrappre: 박스를 벗어나지 않는 pre라고 볼 수 있다.

 

 

overflow

마지막으로 배경과 텍스트에서 공통적으로 사용할 수 있는 overflow속성에 대해 알아보자

 

overflow-visible : 기본 값. 넘칠 경우 컨텐츠가 박스 밖으로 보인다.

 

overflow-hidden : 박스 밖으로 넘치는 부분은 잘려서 보이지 않는다.

 

overflow-scroll : 스크롤바가 추가되어 스크롤링할 수 있다. (가로, 세로 모두 추가.)

 

overflow-auto : 콘텐츠 양에 따라 스크롤바를 추가할지 자동으로 지정한다.(추가하는 방향으로 자동 추가됨.)

 

 

※텍스트 박스에도 이 속성을 사용하지만 레이아웃을 짤 때 

   overflow:hidden;을 통해 float 값을 해제하기 위해서도 사용한다.

 

 

그 외에도 많은 CSS속성들이 있다. 

 

그 외의 속성들은 실습(홈페이지 카피)을 통해 알아보도록 할 것이다.

 

 

 

 

 

공감 또는 훈수 부탁드립니다.(내가 그걸 모를 꺼 같니?? 라던가 응 아니야~이거야~ 해주세요) 

 

그럼~ 앙 제바

 

'IT아카데미 > CSS' 카테고리의 다른 글

홈페이지 만들기 - CSS[5]  (0) 2020.05.12
홈페이지 만들기 - CSS[4]  (0) 2020.05.11
홈페이지 만들기 - CSS[3]  (0) 2020.05.09
홈페이지 만들기 - CSS[2]  (0) 2020.05.07
홈페이지 만들기 - CSS[1]  (0) 2020.05.06

CSS속성

 

위치

위치에 관한 속성은

 

    • 배경 또는 공간의 위치에 관련된 속성들

    • background, position, float, overflow

    • 텍스트의 정렬, 위치에 관련된 속성들

    • text-align, vertical-align, line-height, text-indent, overflow

 

이렇게 나눈 기준은 block, inline 요소이다.

 

보통 배경 또는 공간은 가지는 요소들은 block요소가 많다.

 

텍스트를 가지는 요소들은 inline요소가 많다.

 

inline요소가 공간을 가지도록 할 수도 있는데 display: block; 을 사용하는 것이다.

 

이는 inline요소를 block요소처럼 보이게 만들어 공간을 부여할 수 있다.

 

텍스트의 위치 속성은 다음 장에서 알아보도록 하고 이번에는 배경의 위치 속성을 알아보자

 

먼저 background(배경) 속성에 대해 알아보자

 

background

CSS에서 이것 빼면 시체라고 할 정도로 background속성은 정말 중요하다.

 

background와 관련된 많은 속성과 속성 값이 있다.

 

그중 색, 이미지, 이미지의 반복 여부, 위치, 위치의 고정여부에 대해서 알아보자

 

background-color: 배경 색에대한 속성이며 색 단위를 선택해 색을 넣으면 페이지에 나타난다.

 

background-image: 단위URL을 통해 이미지의 경로를 적어주면 이미지가 나타난다.

 

background-repeat: 페이지에 이미지의 반복 여부를 결정하는 속성이다.

 

background-position: 이미지의 위치를 설정하고 x축, y축 순의 방향으로 px이나 %를 이용한다.

                             

background-attachment: 이미지의 위치를 고정, 스크롤, 로컬로 나타낼 수 있으며 

https://developer.mozilla.org/ko/docs/Web/CSS/background-attachment 

여기서 확인해 각각의 속성값을 확인해 볼 수 있다.

/*예시*/
body { 
/*각각 쓴 경우*/
    background-color: #262a25;
    background-image: url(images/banner2.png);
    background-repeat: no-repeat;
    background-position-x: right;
    background-position-y: top; 
    background-position: 50% 0; /* 하나의 값이 생략될 경우 center로 적용 */
    background-attachment: fixed;
/*합쳐서 쓴 경우*/    
    background: #262a25 url(images/banner2.png) no-repeat 50%(가로) 0(세로) fixed;
}

 

배경 안의 이미지의 위치는 background-position으로 설정할 수 있다.

 

그렇다면 배경 자체의 위치는 어떻게 설정할까?

 

바로 position 속성이다.

 

 

position

가장 쉽게 공간의 위치를 설정할 수 있는 속성이다.

 

단순 구조 보다는 복잡한 레이아웃 구조를 위해 사용되고 있다. 

 

단, 모든 공간을 position으로 설정해 버린다면 페이지 수정 요청이 들어온다면 새로 만드는 것이 빠를지도 모른다.

 

position의 속성 값은 static(정적), relative(상대적), absolute(절대적), fixed(고정적)이 있다.

 

숫자에 -(마이너스)를 사용할 수 있으며 이는 '반대 방향으로 숫자만큼'의 의미이다.

 

 

static: 기본 값으로 위치가 지정되었다기보단 공간이 원래 가지고 있는 위치이다.

.static {
  position: static;
}

 

 

relative: 상대적으로 위치를 지정할 수 있으며, 이 말은 기준이 될 요소를 지정해야 한다는 뜻이다.

.relative1 {
  position: relative;
}
.relative2 {
  position: relative;
  top: -20px;
  left: 20px;
  width: 500px;
}

relative1의 position:relative; 는 static과 동일하게 적용된다. ( 만일 relative2처럼 방향 값을 지정한다면 상황은 달라진다.)

 

중요한 것은 relative2의 속성들인데 position: relative; 를 적용 후 top, right, bottom, left를 사용하여 위치 값을 지정한다. 

 

relative는 원래 위치를 기준으로하여 방향 값을 적용하는 방법이다.

 

 

 

absolute: 절대적으로 위치를 지정할 수 있으며, 이 말은 기준이 될 요소가 정해져 있다는 뜻이다.

.absolute{
  position: absolute;
  top: 40px; left: 40px;
}

 

기준이 되는 요소는 위치 지정을 한 부모 요소(static이 아닌 다른 값을 가지고 position속성을 사용한 다른 요소)이다.

 

만일 그런 부모 요소가 없다면 브라우져의 왼쪽 맨 위를 기준으로 한다.

 

마찬가지로 방향값을 적용하여 사용한다.

 

fixed: 배경고정인 background-attachment: fixed;와 비슷하지만 배경이 아닌 요소를 고정한 다는 점에서 다르다.

 .fixed {
        width: 200px;
        position: fixed; /* 브라우저 창 기준 */
   }

스크롤에 관계없이 브라우저 위치에 고정되어있을 수 있다.

 

sticky: relative처럼 작동하다가 스크롤에 따라 fixed처럼 작동하는 유용한 속성 값.

 

.sticky{
  position: sticky;
  top: 20px;
}

 

 

복잡한 레이아웃 구조를 만드는데 필요한 position속성을 알아보았다.

 

그렇다면 단순 구조의 위치를 위한 속성은?

 

바로 float속성이다. 

 

 

float

단순 구조 뿐 아니라 가로로 나열하는데도 사용되는 float는 '동동 뜨다'라는 의미를 가지고 있다.

 

쉽게 남는 영역을 채워주는 속성으로 이해할 수 있다.

 

원래 이미지와 텍스트의 배치 용도로 사용했지만 레이아웃 용으로 많이 사용된다.

 

우리는 앞서 HTML 문서의 구조화를 배운 바 있다.

 

Naver를 예로 들면 각각의 구조들이 자리에 알맞게 들어가 있는 모습을 볼 수 있다

 

이것이 바로 float를 이용한 것이다.

 

속성 값으로는 left, right, none 등이 있다.

 

지금 보여지는 것처럼 왼쪽에 이미지를 두고 

글을 쓸 수 있다. 

 

float:left;를 사용하여 이렇게 만들 수 있다.

 

float:right;는 그 반대이다.

 

이 이미지는 레이아웃에 색을 입혀 나타낸 것으로 위에서부터 헤더, 메인, 섹션, 어사이드, 푸터이다.

 

이렇게 레이아웃을 만들기 위해서는 float를 어느 부분에서 해제해야 할 때가 있다.

 

해제하지 않으면 밑의 그림과 같이 푸터가 사이의 공간으로 들어와 버리게 된다.

 

이럴 때 float를 해제하는 방법은 다음과 같다.

 

  float를 적용 후 해제하는 방법 4가지


1. float를 적용한 요소의 부모가 없는 경우


다음에 오는 요소에게 clear를 적용한다.


2. float를 적용한 요소의 부모가 있는(container) 경우


  2-1 부모 요소에 height를 적용(하지만 높이가 고정됨)


  2-2 부모요소에 overflow를 적용(hidden/auto)


  2-3 부모 요소에게 ::after 가상 클래스(전후 문자 선택자)를 적용하여
  {content:""; display: block; clear: both;}의 값을 준다.

  예제를 많이 다뤄봐야 각각의 경우에 대해 알 수 있다.

 

 

여기서 나온 overflow속성은 텍스트와도 관련이 있다.

 

 

공감 또는 훈수 부탁드립니다.(내가 그걸 모를 꺼 같니?? 라던가 응 아니야~이거야~ 해주세요) 

 

그럼~ 앙 제바

'IT아카데미 > CSS' 카테고리의 다른 글

홈페이지 만들기 - CSS[6]  (0) 2020.05.13
홈페이지 만들기 - CSS[4]  (0) 2020.05.11
홈페이지 만들기 - CSS[3]  (0) 2020.05.09
홈페이지 만들기 - CSS[2]  (0) 2020.05.07
홈페이지 만들기 - CSS[1]  (0) 2020.05.06

+ Recent posts