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

[자바 기초] 16일차 일지 2 - Ch6. CSS3 기본 사용법과 선택자

aSpring 2021. 1. 6. 15:32
728x90
728x90

2021/01/06 - [공부/자바 융합개발] - [자바 기초] 16일차 일지 1 - 화면(UI)구현(Ch6. 공간 분할 태그)


 

Chapter 06 CSS3 기본 사용법과 선택자

 

01 CSS3 개요

02 CSS3 기본 사용법

03 CSS3 선택자

 

학습목표

  • 웹 문서 내에서 CSS의 필요성을 이해하고 설명할 수 있다.
  • CSS3의 정의 문법, 웹 문서 내 사용 위치, 중복 정의됐을 경우 우선순위를 설명할 수 있다.
  • CSS3 선택자의 종류를 알고 웹 문서 작성 시 활용할 수 있다.

01 CSS3 개요

1. CSS3 소개

CSS3 : style sheet 3버전을 쓴다

  • 스타일 시트 표준안
  • 웹 문서에 글꼴, 색상, 정렬과 각 요소의 배치 방법 등과 같은 디자인 요소를 적용하는 데 사용

 

CSS3의 구성

  • 선택자(Selector): 스타일 시트를 적용할 대상을 지정 -> 종류가 많다.
    • class 선택자, id 선택자 등.. 선택자{      ; ____ ; ____ }
  • 속성(Property): 어떤 속성을 적용할지 선택
  • 속성값(Value): 속성에 어떤 값을 반영할지 선택

 

CSS3의 구성 h1{color:blue; font-size:12px;}

 

 

2. CSS3의 모듈별 발전 과정

CSS1 -> 분리의 첫 시도

  • 웹 문서의 단순한 글꼴, 텍스트 정렬 방식, 마진 등을 정의하는 데 사용

 

CSS2 -> 이미 거의 다 완성 됨

  • 1998년에 발표되어 거의 모든 브라우저에서 사용
  • 글꼴 규정 및 현재 사용되고 있는 CSS의 모든 규격 등이 이 버전에서 시작됨

 

CSS3 -> CSS2에서 조금 추가가 된 것(스타일에서 고급진 기능들이 +알파 된 것)

  • Text, fonts, color, backgrounds & borders, transforms, transitions, animations과 같은 종류의 모듈을 추가로 지원
  • 기존의 CSS2가 갖지 못했던 화려하고 역동적인 표현을 추가
    • (자바스크립트는 클라측이며 -> JSP같은 서버와 연결 가능)
    • HTML을 서버와 연결 불가능

 

3. CSS3의 필요성

문서 작성과 디자인을 분리

  • 하나의 웹 문서에서 문서 작성은 HTML, 디자인은 CSS가 담당

디자인을 분리했을 때 장점

  • 내용과 디자인 수정이 용이
  • 다양한 기능으로 확장 가능
  • 통일된 문서 양식 제공
  • 전송 및 로딩 시간 단축

02 CSS3 기본 사용법

1. CSS 정의 문법

CSS의 정의 문법

CSS의 정의 문법

 

2. CSS의 사용 위치 : 위치에 따른 3가지 방식이 있다.

CSS 작성 방법

1) 인라인 스타일 시트 : <body> 속 태그 안에 넣는 것 <태그 CSS >

2) 내부 스타일 시트 : <body>속 태그 내에 넣는 것이 아니라 <Head></Head>안에

3) 외부 스타일 시트 : a.CSS 처럼 파일로 따로 작성해서 나 a.HTML 문서에 import 시켜서 사용

-> 이렇게 옵션이 3개인데, 같은 CSS를 계속 사용할 거라면 여기, 저기 작성하면 중복이 됨

-> CSS 뼈대는 같은데 색을 다르게 하는 등 같은 CSS인데 내용이 다름 -> 충돌이 일어남 -> 우선순위가 있어야 함

-> (빨간색을 쓸거냐, 파란색을 쓸거냐 등)

-> 우선순위 : 인라인 스타일 시트 > 내부 > 외부 스타일

    (내부, 외부 스타일 : 코드의 순서에 따라 달라진다 -> 가장 마지막에 적용된 것이 나타남)

 

HTML => 구조header, footer, section, 레이아웃, div, span, input, 배치, 폼style로 디자인 가능은 하나 디자인은 CSS로 하는 것을 추천함

 

CSS => 디자인

 

JS(javascript) => 제어 프로그램

for, if 등 프로그래밍이 가능

동적인 것 표현 가능 -> CSS + JS

node.js, ..

 

 

예제 6-1 스타일 시트 사용 위치 확인하기 ch06/01_cssstyle_external.css

p3 { 
    color: green;
    background-color: yellow; 
}

ch06/01_css_apply.html

<head>
    <!-- 외부 스타일 시트 적용 방법 -->
    <link type="text/css" rel="stylesheet" href="01_cssstyle_external.css"></link>
    <style>
        p2 {     /* 내부 스타일 시트 적용 방법 */
            color: blue;
        }
    </style>
</head>
<body>
    <!-- 인라인 스타일 시트 적용 방법 -->
    <p1 style="color: red;">인라인 스타일 시트 적용</p1><br>
    <p2>내부 스타일 시트 적용</p2><br>
    <p3>외부 스타일 시트 적용</p3><br>
</body>

위의 p : paragragh 라는 태그 -> 원래 존재하는 태그

p1, p2, p3는 내가 만든 사용자정의 태그 -> p1이라는 태그는 없는데 내가 의미를 부여함

-> p1, p2, p3에 색을 적용해서 태그만 써서 색을 적용을 가져다 쓸 수 있다.

 

 

3. CSS의 우선순위

  • 하나의 요소에 인라인 스타일 시트가 중복 정의되면 제일 마지막에 설정된 값이 적용
  • CSS 적용 우선순위와 상관없이 속성을 강제로 적용할 때는 (!important) 표시 사용

CSS 적용 순위

-> 내부, 외부는 제일 마지막에 설정된 값이 적용됨

 

 

 -> over ride(오버라이드) 넘치게 타다 : 우선적이다, 먼저 하겠다

 -> 오버라이딩 : 프로그램 할 때 객체지향(Java, Python, C++, JavaScript)에서 다룰 것(상속에 있어서 뭐가 먼저냐)

     (절차지향 : C언어) C언어 업그레이드된 게 C++

 ① override : a(3, 4) 이렇게 두개만 넣었는데 같은 것이지만 a(3, 4, "홍"), a(3, 4, "홍", "림") 등으로 다르게, 더 넘게 담음

 ② overload : 스타크래프트에서 저그가 적재를 하는것, 싣는 것

더보기

a          a          a

부모 -> 자식 -> 손자

           (부모 -> 자식)

f1()       f()

 

a =? B

=> a는 무엇인가!

 

부모가 만들어 놓은 f1()을 자식이 변경 -> 부모의 f1()은 살아있되 자식이 변경한 f1()을 사용함

 

예제 6-2 CSS 적용 우선순위 살펴보기 ch06/02_css_override.css

p { 
  color: green;
  background-color: yellow; 
}

ch06/02_css_override1.html

<head>
    <!-- 외부 스타일 시트를 정의하는 위치가 중요 -->
    <link type="text/css" rel="stylesheet" href="02_css_override.css"></link>
    <style>
        p { color: blue; }
        p { color: yellow; }
        p { color: red; }     <!-- 원래 이렇게 p를 세개 중복해서 사용하면 안됨 -->
    </style>
</head>
<body>
    <p>CSS가 중복 정의된 경우 어떤 것이 적용될까?</p>
</body>

더보기
<html>
<head>
    <!-- 외부 스타일 시트를 정의하는 위치가 중요 -->
    <link type="text/css" rel="stylesheet" href="02_css_override.css"></link> <!-- p 초록, 배경 노랑 -->
</head>
<body>
    <p>CSS가 중복된 정의의 경우 어떤것이 적용될까?</p>
</body>
</html>

여기까지만 적용시키면

p는 글자색 초록, 배경색 노랑

여기에

<html>
<head>
    <!-- 외부 스타일 시트를 정의하는 위치가 중요 -->
    <link type="text/css" rel="stylesheet" href="02_css_override.css"></link> <!-- p 초록, 배경 노랑 -->
    <style>
        p{ color: blue;} <!-- 추가 -->
    </style>
</head>
<body>
    <p>CSS가 중복된 정의의 경우 어떤것이 적용될까?</p>
</body>
</html>

추가된 <style>이 적용되어 글자색이 파란색이 된다.

<style>
        p{ color: blue;}
        p{ color: yellow;}  <!-- 여기까지만 적용시키면 글자 색이 노란색으로 -->
        p{ color: red;}     <!-- 여기까지 적용시키면 글자 색이 빨간색으로 -->
    </style>

 

외부보다 내부에 가장 마지막으로 써준 style p{color: red;}가 적용이 됨

 

 

ch06/02_css_override2.html

<html>
    <head>
        <style>
            p{color: blue;}
            p{color: yellow;}
            p{color: red;} <!-- 여기까지만 하면 글 색은 빨간색으로 표시됨 -> 가장 마지막에 적어준 외부 스타일이 적용 -->
        </style>
        <!-- 외부 스타일 시트를 정의하는 위치가 중요(최종적용) -->
        <link type="text/css" rel="stylesheet" href="02_css_override.css"></link>
        <!-- 여기까지 써주면 외부 스타일 시트가 적용되어 글자색 초록, 배경색 노랑이 됨 -->
    </head>
    <body>
        <p>CSS가 중복 정의된 경우 어떤 것이 적용될까?</p>
    </body>
</html>

ch06/02_css_override3.html

<html>
    <head>
        <style>
            p{color: blue!important;} <!-- 글색 파랑 -->
            p{color: yellow;} <!-- 글색 여전히 파랑 -->
            p{color: red;} <!-- 글색 여전히 파랑 -->
        </style>
        <!-- 외부 스타일 시트를 정의하는 위치가 중요(최종 적용) -->
        <link  type="text/css" rel="stylesheet" href="02_css_override.css">
        <!-- 글 색은 내부 스타일 important 지정해준 대로 파란색이고 외부 스타일 시트 정의에 의해 배경색 노란색이 적용됨-->
    </head>
    <body>
        <p>CSS가 중복 정의된 경우 어떤 것이 적용될까?</p>
    </body>
</html>

0순위 : important

1순위 : inline

2순위 : 내부, 외부 중 마지막에 적용된 스타일이 적용됨

 

 

더보기
chrome 창에서 F12키

Sources, Elements

살펴볼 수 있다.

 

03 CSS3 선택자

1. 기본 선택자

CSS의 기본 선택자

main : 타입, 클래스, 아이디 선택자 -> 기본적으로 무조건 알아야 한다

         클래스 > 아이디 > 타입 선택자 순으로 많이 사용한다

 

타입 선택자 : 태그 { 속성선언; } -> a { ;}

클래스 선택자 : .클래스 이름 { 속성선언; } -> .a{ ;}

아이디 선택자 : #아이디 { 속성선언; } -> #a{ ;}

속성 선택자 : 이걸 사용하면 고수다

 

<프로그램 2step>

① 만들기 -> ② 사용하기

 

선택자 = 디자인을 먹이기 위해 사용

-> 선택자 3가지 : 1) 태그, 2) 아이디, 3) 클래스

 

① 만들기

#name1 { 
		 디자인 코드
	    }
        
.phone2 { 
          corlor: blue; 
         }

 

② 사용하기 : 만들어 놓은 것을 연결하여 사용

<div id="name1">
<body class="phone2">

 

※ 아이디와 클래스의 차이

  • 아이디 : 중복이 불가능 -> #name 에만 적용이 가능
  • 클래스 : <p class="phone2"> 이렇게 또 써줘서 여러번 적용 가능 -> 아이디보다 더 많이 사용한다.
.table1
{
	디자인(배경색, 표 테두리 등)
}
<table class = "table1">

-> 여러개의 테이블에 table1에 만들어놓은 배경색, 테두리 등을 적용해서 동일한 디자인으로으로 만들 수 있다.

 

 

예제 6-3 전체 선택자 사용하기 ch06/03_css_universal.html

            ㄴ> 기본값을 주겠다(default)

<head>
    <style>
        * { 
            color: red;
            background-color: yellow; 
            font-size: 13px;
        }
    </style>
</head>
<body>
    <h1>Universal Selector</h1>
    <h2>모두 같은 색상, 같은 크기</h2>
    <h3>전체적으로 동시에 스타일 적용</h3>
    <p>모든 데이터에 적용</p>
</body>

예제 6-4 타입 선택자 사용하기 ch06/04_css_type.html

              ㄴ> 태그에 스타일 지정

<head>
    <style>
        h1 { background-color: yellow; }
        h2 { background-color: green; }
        h3 { background-color: pink; }
        p { color: red; }
    </style>
</head>
<body>
    <h1>Type Selector</h1>
    <h2>Type Selector</h2>
    <h3>Type Selector</h3>
    <p>각 요소에 다르게 적용</p>
</body>

 

 

예제 6-5 ★클래스★ 선택자 사용하기 ch06/05_css_class.html

<head>
    <style>
        .class1 { 
            color: blue;
            background-color: yellow; 
        }
        .class2 {                       
            color: red;
            background-color: green; 
        }
        h3.class1                            <!-- 태그.클래스명 -> h3.class1 : h3에서 class1을 사용하면 그냥 class1이 아닌 h3.class가 우선으로 적용된다 -->
            color: navy;
            background-color: pink; 
        }
   </style>
</head>
<body>
    <h1 class="class1">Class 1 입니다.</h1>
    <p class="class1">Class 1 입니다.</p>
    <h1 class="class2">Class 2 입니다.</h1>
    <p class="class2">Class 2 입니다.</p>
    <h3 class="class1">Element+Class Selector</h3>
</body>

class1을 만들어서 3군데 적용

class2를 만들어서 2군데 적용

예제 6-6 아이디 선택자 사용하기 ch06/06_css_id.html

              ㄴ> 예제 잘못됨! id 자체는 한 파일에 1개 있어야 함

a.html이다 하면 여기에는 동일한 id가 한개만 있어야됨. id는 고유한 것

 

HTML, CSS, JS의 단점 : 틀려도 작동됨 -> 관대함

<head>
    <style>
        #id1 { 
            color: blue;
            background-color: pink; 
        }
        #id2 { 
            color: blue;
            background-color: yellow; 
        }
        h2#id1 { 
            color: red;
            background-color: green; 
        }
    </style>
</head>
<body>
    <h1 id="id1">ID1 선택자</h1>
    <p id="id1">ID1 선택자</p>
    <h1 id="id2">ID2 선택자</h1>
    <p id="id2">ID2 선택자</p>
    <h2 id="id1">Element+ID Selector</h2>
</body>

name과 id의 차이

- id : 한 파일에 1개라 정말 고유하게 식별

- name : di처럼 식별하기 위해 사용하는데  -> 폼 당 한개(한 파일에는 폼이 여러개 있을 수 있음)

  <input name="major">

 

 

 

예제 6-7 속성 선택자 사용하기 ch06/07_css_attr.html

<태그      속성="속성값">

<엘리먼트 class="class1">

                id="id1"

 

속성은 혼자서 혼재할 수 없다. 앞에 태그(엘리먼트)가 존재해야 한다.

-> 스타일 정의 할 때도

태그[속성] { 스타일 }

h1[text] { 디자인 } -> { 디자인을 } h1의 text에 지정하겠다.

<head>
    <style>
        h1[text] {                       <!-- h1태그의 text속성에는 글자 빨강, 배경 회색으로 하겠다 -->
            color: red;
            background-color: gray; 
        }
        p[text] {                         <!-- p태그의 text속성에는 글자 파랑, 배경 노랑으로 하겠다 -->
            color: blue;
            background-color: yellow; 
        }
        h1[text="attr3"] {                <!-- p태그의 text가 attr3일 때 글자 초록, 배경 분홍으로 하겠다 -->
            color: green;
            background-color: pink; 
        }
    </style>
</head>
<body>
    <h1 text="attr1">text 속성 이름 선택자</h1>
    <h1 text="attr2">text 속성 이름 선택자</h1>
    <p text="attr3">text 속성 이름 선택자</p>
    <h1 text="attr3">속성과 속성값 선택자</h1>
    <p>속성 선택 없음</p>
</body>

 

속성 선택자의 형식

[속성~=값] : 값이 여러개 -> 목록, 리스트, 배열(array), a(5) -> 구분자가 공백일 때

  "red blue green" : 구분자 " " 공백

  "red-blue-green" : 구분자 "-"

  구분자 : delinator

 

[속성|=값] : 속성값이 주어진 값으로 시작하고 '-' 기호로 이어지는 값

 

[속성*=값] : ong만 들어가면 다 됨

 

^=

$- 

 

정규식(regular express), 일반적인 : 다 적용된다 <-> 특수한

프로그램에서는 일반적인게 가장 좋다 -> 만들어서 여러 번 활용하는게 가장 좋다.특수한 걸 일반적인 것으로 만드는 것이 고수!정규식은 python이나 어디에서나 다 사용되는 문법

 

 

예제 6-8 속성 선택자 사용 형식 살펴보기 ch06/08_css_text.html

<head>
    <style>
        p[text] { color: red; }
        p[text="red"] { color: yellow; background-color: purple; }
        p[text~="bb"] { color: yellow; background-color: green; } <!-- bb 양 옆에 공백이 있어야 함 -->
        p[text|="a1"] { color: yellow; background-color: blue; } <!-- a1이고 -로 구분되는 -->
        p[text^="img"] { color: yellow; background-color: red; } <!-- 반드시 img로 시작되는 -->
        p[text$=".png"] { color: yellow; background-color: gray; } <!-- 반드시 .png로 끝나는 -->
        p[text*="ong"] { color: yellow; background-color: pink; } <!-- ong 라는 글자가 들어가기만 하면 -->
    </style>
</head>
<body>
    <p text="hello">모든 텍스트</p>
    <p text="red">텍스트 매칭 속성</p>
    <p text="aa bb cc">리스트 매칭 속성</p>
    <p text="a1-a2-a3">범위 텍스트 매칭 속성</p>
    <p text="img/pic.jpg">텍스트 시작 매칭 속성</p>
    <p text="img/pic.png">텍스트 끝 매칭 속성</p>
    <p text="Seongyong Hong">텍스트 패턴 매칭 속성</p>
</body>

 

 

 

 

2. 가상 선택자

가상 선택자 -> 가짜 : 실체가 없다, 눈에 보이는 가시화가 없다

  • 웹 문서에는 보이지 않지만 동작에 영향을 주는 속성을 가상 선택자로 이용

가상 선택자의 정의

a -> anker 태그 ->  link를 클릭하면 이동함

link가 속성

 

태그:속성 { 디자인 }

                                 ㄴ> 여기에 오는 속성이 가상인 것

 

<a herf="www.naver.com"

a라는 태그는 href라는 속성과 www.naver.com 라는 속성값을 가짐 

 

 

이벤트 가상 클래스 선택자 -> 행위에 의해 그때그때 달라진다

  • 사용자가 마우스 이벤트 행위를 어떻게 하는지에 따라서 스타일 시트 다르게 적용

이벤트 가상 클래스 선택자의 종류

- 웹상에서 포커스 잡을 때 tab키 눌러보면 됨

 

예제 6-9 이벤트 가상 클래스 선택자 사용하기 ch06/09_css_pseudo1.html

<head>
    <style>
        /* 가상 클래스 */
        a:link { color: blue; text-decoration: underline; } 
        a:visited { color: red; }                             <!-- 방문한 페이지는 빨간색으로 표시 -->
        a:hover { text-decoration: overline; }
        a:active { background-color: yellow; }
    
        div.d1 { border: 1px dashed red; width: 400px; padding: 5px; }   <!-- 두께 1px, 점선 빨간색 -->
        /* 가상 클래스 */
        div.d1:hover { background-color: yellow; }   <!-- div중에 클래스가 d1일 때, 가상속성(hover) 일 때 -->
        
        div.d2 { border: 1px dashed green; width: 400px; padding: 5px; } <!-- 태그.클래스명 -->
        /* 가상 클래스 */
        div.d2:hover { background-color: green; }
    </style>
</head>
<body>
    <h2>Pseudo Class</h2>
    <p><a href="http://www.w3.org" target="_blink">W3C 방문</a> : 마우스 이벤트에 따른 링크의 변화를 잘 보세요.</p>
    <div class="d1">
        <h3>가상 클래스 1 영역</h3>
        마우스 위치에 따른 박스의 스타일 변화를 보세요. 
    </div>
    <div class="d2">
        <h3>가상 클래스 2 영역</h3>
        마우스 위치에 따른 박스의 스타일 변화를 보세요. 
    </div>
</body>

더보기

위에 마우스 커서가 위치하면

클릭시

 

 

ch06/09_css_pseudo2.html

<head>
    <style>
        div {
            width: 200px; height: 100px; color: blue;
            background: green; opacity: 0.9;
        }
        /* 가상 클래스 */
        div:hover {
            width: 400px; height: 50px; color: red;
            background: yellow; opacity: 0.5;
            transition: all 1.5s linear 0.5s; <!-- trasition(전환) 원래에서 transition으로 서서히 전환됨(변함) -->
        }
    </style>
</head>
<body>
    <h2>가상 선택자</h2>
    <div>
    가상 클래스를 이용한 애니메이션 효과<br>
    마우스가 위에 있으면 박스가 늘어나요.
    </div>
</body>

구조적 가상 클래스 선택자의 종류

태그:속성

부모 <- 자식

 

<body>
	<div>
    	<태그>
        </태그>
    </div>
</body>

div의 부모는 body

div 속 태그의 부모는 div

body는 할아버지 div 부모 태그는 자식 (상대적으로)

 

예제 6-10 구조적 가상 클래스 선택자 사용하기 ch06/10_css_st.html

<head>
    <style>
        h4:first-child {  /* 첫번째 태그의 텍스트 색상 */ <!-- h4라는 태그의 첫번째 자식은 -->
            color: blue; 
            font-size: 20px; 
        }
        h4:last-child {  /* 마지막 태그의 텍스트 색상 */
            color: red; 
            font-size: 20px; 
        }
        h4:nth-child(2n+1) {  /* 홀수 태그 */
            background-color: green; 
        }
        h4:nth-last-child(2n) {  /* 짝수 태그 */
            background-color: yellow; 
        }
    </style>
</head>
<body> <!-- 아래는 body라는 부모 아래의 같은 식구들 -->
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
</body>

 

만약 위에서 

<body> 
	<div> 방해물 </div>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
   <h4>웹 프로그래밍</h4>
</body>

--> 이러첨 body의 첫 번째 자식이 h4가 아니라 div가 되면 

h4:first-child { color: blue; font-size: 20px; } -> h4가 첫 번째 자식이 아니게 되므로 이건 적용되지 않음

 

 

<body>
	<h4> body의 자식1 </h4>
    <div>
       	<h4> div의 자식1 </4>
    </div>
</body>

h4:first-child -> 위 상황에서는 h4가 body와 div 각각의 첫 번째 자식이므로

   body의 자식1과 div의 자식1에 모두 적용됨

 

 

 

UI 요소 상태 가상 클래스 선택자

  • 입력 폼의 상태를 선택할 때 사용

예제 6-11 UI 요소 상태 가상 클래스 선택자 사용하기 ch06/11_css_state.html

<head>
    <style>
        div { color: white; }
        h2:first-letter { font-size: 30px; color: red; text-transform: uppercase; } <!-- h2라는 태그의 첫번째 글자에 이걸 적용하겠다 -->
        h3:first-line { color: blue; }
        input:focus { background-color: red; }
        input:checked + div.d1 { background-color: gray; }
        input:checked + div.d2 { background-color: black; }
    </style>
</head>
<body>
    <h2>states pseudo-classes</h2>
    <h3>문제) 대한민국 수도는?</h3>
    <p>정답 작성 : <input type="text"></p>
    <h2>answer</h2>
    힌트 보기 : <input type="checkbox">
    <div class="d1">
        남대문이 있는 곳이죠.   
    </div>
    정답 보기 : <input type="checkbox">
    <div class="d2">
        서울    
    </div>
</body>

A + B -> B가 핵심인데 A가 바로 앞에 온다 -> 순서도 중요

input: checked + div.d1 -> A가 checked되어 있으면서 바로 뒤가  div.d1일 때  { background-color: gray; } 적용하겠다.

3. 조합 선택자

조합 선택자

  • 기존의 여러 선택자를 복합적으로 조합하는 방법을 제공
  • 조합 -> 여러개, 인접해 있는 태그(내가 있으면 위, 아래, 왼쪽, 오른쪽)

-> 모두 주인공은 B이고 B를 바꿀건데 선수조건이 A여야 한다.

후손 선택자 : 부모에서 자식으로 계속 내려감자손 선택자 : 부모-자식 하나의 관계(직계 하나)<div>   <p>   </p></div>

 

 

조합 선택자의 이해

 

후손은 초록색 내 모두를 말함

자손은 li를 기준으로 하면 h3가 되고, h3를 기준으로 하면 div가 된다(직계만)

 

 

예제 6-12 후손 선택자 사용하기 ch06/12_css_desc.html

<html>
    <head>
        <style>
            div ul { color: red;}
            div h2 { color: yellow; background-color: purple;} <!-- h2에 다 매기는게 아니고 div의 자손 h2에만 적용한다 -->
        </style>
    </head>
    <body>
        <div>
            <h2>Descendant Selector_1</h2> <!-- 이 h2의 부모는 div, div의 자식들인 h2와 그의 자식 li도 다 적용됨 -->
                <ul>후손 선택자
                    <li>자식의 자식 (후손1)</li>
                    <li>자식의 자식 (후손2)</li>
                </ul>
        </div>
        <h2>Descendant Selector_2</h2> <!-- 이 h2의 부모는 <body> -->
    </body>
</html>

 

 

예제 6-13 자손 선택자 사용하기 ch06/13_css_child.html

<html>
    <head>
        <style>
            body > div > h3 { color: red; }
            body > p { color: green; background-color: yellow; }
            body> h3 > tel > home { color: blue; }
        </style>
    </head>
    <body>
        <div>
            <h3>Child Selector_1</h3>
        </div>
        <p>자식 선택자</p>
        <h3>
            <sno>123456</sno><br>
            <std>홍민성</std><br>
            <tel>
                <office>02-4567-1010</office><br>
                <home>010-1234-5678</home>
            </tel>
        </h3>
    </body>
</html>

예제 6-14 인접 형제 선택자 사용하기 ch06/14_css_adj.html

<head>
    <style>
        h1 + h2 + ul { color: blue; } <!-- h1와 인접하는 h2와 인접하는 ul의 색을 blue로 -->
        div + h3 { color: red; }  <!-- div와 인접하는 h3만 red로 -->
        h3 + p { color: purple; background-color: yellow; } <!-- h3와 인접하는 p만 -->
    </style>
</head>
<body>
    <div>
        <h1>인접 형제 선택자1</h1>
        <h2>인접 형제 선택자2</h2>
        <ul>목록
            <li>주제1</li>
            <li>주제2</li>
        </ul>   
    </div>
    <h3>Adjacent Selector_1</h3>
    <p>인접 형제 선택자에 의한 스타일 적용</p>
    <h3>Adjacent Selector_2</h3>
</body>

+ : 바로 위에

 

예제 6-15 일반 형제 선택자 사용하기 ch06/15_css_sib.html

<head>
    <style>
        h1 ~ ul { color: blue; }							<!-- h1과 형제인 u1만 색 바꿈 -->
        div ~ h3 { color: red; }							<!-- div와 형제인 h3만 색 바꿈 -->
        h3 ~ p { color: purple; background-color: yellow; }	<!-- h3과 형제인 p만 색 바꿈 -->
    </style>
</head>
<body>
    <div>
        <h1>형제 선택자1</h1>
        <h2>형제 선택자2</h2>
        <ul>목록
            <li>주제1</li>
            <li>주제2</li>
        </ul>   
    </div>
    <h3>Sibling Selector-1</h3>
    <h4>같은 레벨 형제</h4>
    <p>일반 형제 선택자에 의한 스타일 적용</p>
    <h3>Sibling Selector_2</h3>
    <h3>Sibling Selector_3</h3>
</body>

~ : h1과 같은 레벨에 ul이 있으면 적용

~ : p를 바꿀건데 p가 h3와 같은 레벨이면 적용

 

그룹 선택자

예제 6-16 그룹 선택자 사용하기 ch06/16_css_group.html

<head>
    <style>
        h3, p, h2 { color: red; background-color: yellow; } <!-- h3, p, h2 모두에 적용 -->
    </style>
</head>
<body>
    <h2>Group Selector_1</h2>
    <p>스타일 지정을 그룹으로 적용</p>
    <div>
        <h3>Group Selector_2</h3>
    </div>
</body>

728x90
728x90