0034 CSS 요소 선택자(element selector)


선택자CSS규칙(Rule)에서 어떤 HTML 요소(element)규칙을 적용할지 지정하는 역할을 하는 것으로 CSS 뿐만 아니라 jQuery에서도 사용하고 있어 알아두면 매우 유용하다.

    

선택자는 요소의 이름, 아이디(id), 클래스(class), 속성(attribute) 등 그 외에 수많은 방식으로 HTML 요소(element)를 선택하지만 이번에는 가장 기본적인 요소 선택자(element selector)를 살펴보자. 

    

요소 선택자(element selector)요소의 이름으로 해당 요소를 선택한다. 가령, <p> 요소는 p<body> 요소는 body<h1> 요소는 h1으로 선택한다. 

    

규칙선택자를 요소로 하면 해당 웹페이지의 모든 요소들은 일괄적으로 CSS 규칙이 적용을 받는다. 동일한 요소에서 스타일을 다르게 하는 방법은 나중에 논하도록 하자. 

   

우선, 다음과 같이 0034_1.html을 작성해보자. 

    

<!DOCTYPE html>

    

<html>

<head>

 <title>요소 선택자</title>

 <style></style>      내부가 비어 있음

</head>

<body>

 <h1>h1 블록</h1>

 <h2>첫 번째 h2 블록</h2>

 <p>p블록 시작 <br /><br />p블록 끝</p>

 <h2>두 번째 h2 블록</h2>

 <p>2번 p블록 시작 <br /><br />2번 p블록 끝</p>

</body>

</html>


<head> 섹션 내의 <style> 요소에는 어떤 CSS 규칙도 없는 상황이다. 실행해보면 다음과 같다.



CSS 규칙이 전혀 없어도 브라우저가 자체적인 기준으로 HTML 문서를 최소한으로 스타일링하고 있다. 즉, 글꼴(font)과 글자 크기 등이 설정되어 있다.

    

이번에는 요소를 선택하여 CSS 규칙을 적용해보자. 

    

HTML 문서에서 눈에 보이는 부분을 담당하는 영역인 <body>HTML의 요소이므로 이에 적용하는 CSS 규칙을 만들어 볼 수 있을 것이다. 그렇다면 요소 선택자는 body가 될 것이다. <style></style> 사이에 다음과 같이 넣고 이름을 바꿔 0034_2.html로 작성하여 실행해보자. 

    

body { 

 background-color: black; 

 color: white;

 font-family: Arial;

}


위의 구문을 말로 옮기면 이렇다. <body> 요소에 배경색(background-color)검게(black), 글자색(color)은 하얗게(white), 글꼴(font-family)Arial로 적용한다.

   

0034_2.html 파일을 실행한 결과를 처음의 0034_1.html과 같이 놓고 비교해보았다.



<body> 요소가 보이는 영역 전체이므로 웹페이지의 모든 배경색이 전부 검게 칠해진다. <h1>, <h2>, <p> 요소 모두 배경색(background-color)검게(black) 칠해지고 글자색(color)하얗게(white) 글꼴(font-family)Arial로 변경되었다. 

   

이는 <body> 요소에 적용된 규칙<body> 요소 내에 중첩(nesting)<h1>, <h2>, <p> 요소들에게 상속되기 때문이다. 자세하게 살피면 상속되는 속성이 있고 상속되지 않는 속성이 있지만 일단, 위의 예문에서 <body> 요소에 적용된 규칙은 모두 상속되고 있다.

    

만일, 상속된 속성을 사용하지 않고 각각의 <h1>, <h2>, <p> 요소들을 <body> 요소와 다르게 스타일링을 하고 싶다면 해당 요소를 선택자로 가진 규칙을 작성하여 상속을 재정의 하면 된다. 

    

이번에는 <h1><h2><p> 요소에 CSS 규칙을 작성하여 <style></style> 사이에 다음과 같이 넣고 0034_3.html로 작성하여 실행해보자. 

    

body

 background-color: black; 

 color: white;

 font-family: Arial;

}

h1 {

 background-color: white; 

 color: black;

}

h2 {

 background-color: white; 

 color: black;

}

p {

 background-color: yellow; 

 color: blue;

 font-family: serif;

}


실행 결과는 다음과 같다. 



<h1><h2> 요소는 배경색(background-color)검은색에서 하얀색(white)으로 바뀌었고 글자색(color)흰색에서 검은색(black)으로 변했다. 글꼴(font)은 별도로 지정한 바가 없으므로 <body> 요소의 Arial을 그대로 유지하고 있다. 

    

<p> 요소는 배경색(background-color)노랗게(yellow) 바뀌었고 글자색(color)파랗게(blue) 변했으며 글꼴(font)serif로 변경되었다. 

    

즉, <body> 요소에 적용된 규칙<body> 요소 내부의  <h1><h2><p>에 적용된 규칙과 같은 속성(property)에서 서로 다른  속성값을 갖는 경우 각각의 요소에 적용된 규칙의 속성이 우선적으로 적용되는데 이것을 이용하여 상속을 재정의 한다.

    

위에서 <h1><h2> 요소의 CSS 규칙동일하다. 이런 경우에는 다음과 같이 요소들끼리 쉼표로 구분하여 규칙을 한꺼번에 작성할 수 있다. 

    

h1, h2 {

 background-color: white; 

 color: black;

}


CSS에서 border 속성(property)블록 주위에 경계선을 넣는 속성으로 다음과 같이 쓴다.

    
border: 5px solid red;  
→ 경계선을 5픽셀(5px) 두께에 빨간색(red) 실선(solid)으로

<h1><h2> 요소의 CSS 규칙이 동일한 상황에서 추가적으로 <h2> 요소에만 별도로 border 속성(property)를 부여한다고 해보자. 이런 경우 다음과 같이 별도로 작성하는 규칙만 따로 떼어내서 규칙을 작성하면 된다. 
   

h1, h2 {

 background-color: white; 

 color: black;

}

h2 { border: 5px solid red; }


작성한 0034_4.html파일을 실행하면 다음과 같다. 




Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:  0034 CSS 요소 선택자(element selector).apkg







0033 HTMLCSS 적용하고 기본 문법 알아보기


CSSHTML 문서에 적용하는 방법은 다음의 3가지 방식이다. 

  

Inline - 개별 요소에 style 속성으로 적용

Internal - <head>의 영역에 있는 <style> 요소에 스타일 시트 설정

External - 외부의 CSS 파일을 링크로 연결하여 적용


인라인(inline) 방식HTMLstyle 속성에서 다루었기 때문에 0025 HTML style 속성(attribute) 및 배경색 설정을 참조하자. 

    

CSSHTML 문서에 적용할 때 가장 자주 사용하는 방법은 외부에 CSS 파일을 만들어서 이를 HTML 문서에 링크하는 External 방식이다. 하지만 External 방식은 나중세 살펴보고 이번에는 우리는 주로 보기 쉽고 이해하기 편한 Internal 방식으로 기본적인 CSS 문법을 익혀보자. 

    

Internal CSS를 사용하는 경우는 하나의 HTML 페이지를 꾸미는 경우다. 이는 하나의 요소만을 대상으로 꾸미는 Inline CSS와 대조된다. 

     

Internal CSS를 사용하기 위해서는 <head> 섹션에 <style> 요소를 중첩시킨다. 

    

다음과 같이 0033.html 파일을 만들어 실행해 보자. 

    

<!DOCTYPE html>

    

<html>

<head>

 <title>간단한 CSS 적용 사례</title>

 <style>

   p

       color: white;

       background-color: red;

   }

 </style>

</head>

<body>

 <p>1번 p블록 시작<br /><br />1번 p블록 끝</p>

 <p>2번 p블록 시작<br /><br />2번 p블록 끝</p>

</body>

</html>


위의 예문은 <style></style> 요소 내에 CSS를 집어넣어 사용하는 Internal CSS 사용방식을 보여준다. 작성한 예문을 실행해보면 다음과 같이 나타난다. 



위에서 작성한 CSS가 어떻게 작성되었는지 기본적인 내용들을 살펴보자.

    

다음은 <p>요소를 선택하여 배경색(background-color) 속성(property)빨간색(red)으로 선언한 규칙이다. 



이 전체를 하나의 규칙(Rule)이라고 부른다. 그리고 규칙(Rule)어떤 요소에 어떤 속성을 적용할지 결정한다. 

    

CSS에서 작성된 규칙이 어떤 HTML의 요소에 적용되는지 나타내는 것을 선택자(selector)라고 한다. 위의 예문에서는 선택자로 <p> 요소를 선택하여 모든 <p> 요소가 해당 규칙의 적용을 받아 서로 다른 2개의 <p> 요소 블록에 동일한 CSS 규칙이 모두 적용되는 것을 확인할 수 있다. 

    

현재는 <p> 요소를 선택하고 있지만, <body> 요소, <h1> 요소 등 다른 요소를 선택할 수 있고 그 외에도 id 속성, class 속성 등 굉장히 다양한 방식으로 선택이 가능하다(나중에 자세히 살펴보자.). 

    

중괄호({ })로 감싸져 있는 부분 안에는 속성(property)속성값(value)이 위치한다. 속성속성값콜론(:)으로 연결되어 있고 여러 개의 속성값이 하나의 속성(property)에 적용되는 경우는 다음과 같이 공백으로 속성값을 구분한다. 

    

border: 10px solid white;


속성(property)속성값(value)은 합쳐서 하나의 단위를 이루고 이 단위를 선언(declaration)이라고 한다. 


그리고 선언(declaration)은 반드시 세미콜론(;)으로 마무리 한다. 

※ 이어지는 다음 선언이 없는 마지막 선언세미콜론(;)을 쓰지 않아도 되지만 그런 습관으로 오류가 발생할 수 있으므로 세미콜론(;)으로 마무리하는 것을 습관으로 하자.

     

여러 개의 선언(declaration)을 한 줄에 또는 여러 줄에 걸쳐서 한 번에 작성할 수 있다.

    

p { color: white; background-color: red; }


또는 


p {

    color: white;

    background-color: red;

  }


하나 또는 여러 개의 선언(declaration)들은 중괄호({ })로 둘러싸이는데 이렇게 중괄호({ })로 묶인 것선언(declaration) 블록이라고 한다. 

    

선택자중괄호 사이, 중괄호선언(declaration) 사이, 선언선언 사이에는 공백을 넣거나 줄을 바꿔 구별하는 것을 권장하는 것 같다. 실제로 공백을 넣지 않아도 작동하는 경우도 있지만 그렇지 않은 경우도 있어서 권장하는 것으로 알고 있다. 



Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:   0033 HTML에 CSS 적용하고 기본 문법 알아보기.apkg






0032 CSS 소개


HTMLCSS서로 매우 긴밀하게 연계되어 있다. 따라서 HTML에서는 CSS 적용을 염두에 두고 요소(element)속성(attribute)을 만들어 두었고 CSS HTML구조 위에서 디자인을 하도록 설계되어 있어 서로 함께 공부해야만 이해할 수 있는 내용들이 많다. 따라서 앞으로 HTMLCSS를 함께 다루기 위하여 지금 CSS의 기본 개념과 사용법을 익혀두고자 한다. 

   

CSSCascading Style Sheets의 약자다. CSS를 이용하여 다양한 기기(device)의 서로 다른 크기의 화면에서 웹페이지의 디자인, 레이아웃(layout) 등  보이는 스타일을 설정할 수 있다.

   

그렇다면 왜 CSS를 쓰는가? 얼핏 생각하기에는 HTML에서 한꺼번에 처리하면 좋을 것 같은데, 갑자기 이질적인 새로운 형식의 언어를 배워서 웹페이지를 꾸며야 한다니 뭔가 이상하다.

    

우선, CSS의 등장 배경에 관해서는 다음과 같이 요약할 수 있다. 

    

HTML은 웹페이지 디자인 및 요소 스타일링에 적합한 언어가 아니다. 과거에 그런 시도를 한 적은 있지만 업무량이 과도해져 참담한 실패로 끝나고 말았다.

따라서 이런 문제를 극복하기 위하여 W3C에서 CSS를 만들어냈고 덕분에 세련된 디자인을 효율적으로 웹 사이트에 적용할 수 있게 되었다.


HTML은 처음부터 웹페이지의 내용(content)를 구조화하기 위한 언어로 설계되었을 뿐 웹페이지의 디자인을 설정하기 위한 용도로 만들어진 언어가 아니고 그런 의도를 가진 적도 없다. 

    
초기의 웹페이지들은 그야말로 단순한 텍스트에 가까웠기 때문에 HTML에서 요구하는 스타일링도 이탤릭과 굵게 하기 정도로 몇 가지 되지 않았다. 하지만 점점 웹이 발전하고 컴퓨터의 연산 용량과 저장 용량이 커지면서 사진이나 그림 등의 이미지가 웹페이지에 들어가고 점차 입체적이고 직관적인 웹페이지로 발전하게 되었다. 
    
또, 웹페이지가 단순한 정보 게시 역할 위주로 활용되다가 트래픽을 끌어들이기 위한 경쟁적인 플랫폼이 되면서 보다 직관적으로 정보를 전달하는 세련된 웹페이지로 전환되었다. 
    
당연히, 웹페이지의 디자인에 대한 수요가 늘어날 수 밖에 없게 되었고 독보적인 웹페이지를 만들기 위하여 부족한 HTML을 보충할 다양한 플러그 인(plug-in)들이 난립하여 웹에 효율성, 보안 등 각종 문제를 일으켰다.
    

당연히 HTML에서 스타일링을 하는 방식의 실험도 있었다. 가령, HTML 3.2에서 <font> 같은 태그가 표준명세에 첨가되었는데, 이런 방식은 거대한 웹 사이트에 속한 수많은 개별 웹페이지의 글꼴(font)과 색깔(color)을 일일이 설정해야 했기 때문에 개발과정은 길어지고 그에 따른 비용은 늘어났으며 해당 작업을 하는 웹 개발자들에겐 지루하고 힘든 악몽같은 경험을 선사하는 최악의 상황이 만들어졌다.

   

이런 문제들을 해결하기 위해서 W3C에서 CSS를 만들어 HTML 페이지에서 스타일 설정을 대체하도록 했고 덕분에  이제는 하나의 스타일 시트 파일(.css)을 수정하면 전체 웹 사이트의 비주얼을 세련되고 효과적으로 수정할 수 있게 되었다. 

   
결국, 웹페이지에서 보이는 부분은 거의 무조건 CSS로 설정한다고 보면 된다. 


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


Ankilog 파일:  0032 CSS 소개.apkg





+ Recent posts