-속성 선택자는 일반 속성 선택자와 문자열 속성 선택자로 나뉜다.
-문자열 속성 선택자는 속성 값의 문자열을 확인하여 스타일을 적용하는 방식의 선택자.
띄어쓰기로 구분되어있는 여러 속성 값이 작성된 속성 중 속성 값이 특정 값을 단어로 포함하는 요소를 선택
/~= : 여러 속성값 중 하나라도 일치하면 선택/
div[name ~="aaa"] { background-color: pink; }
속성 값이 특정 값을 단어로 포함하는 요소를 선택
단, "-" 기호로 구분, "-" 앞의 내용이 동일해야 한다.
/ |= : 대쉬 기호 앞쪽 단어가 일치하는 요소 선택 ( ex. str-3, str-ch)/
div[class|="str"] { color : red; font-weight: bold; }
( ^ : 캐럿)
-> 속성 값이 특정값으로 시작하는 요소를 선택 ( ex. class34, class-num)
/^= : 특정 값으로 시작하는 요소 선택 /
div[class^="class"] { background-color: black; color: white; }
속성 값이 특정 값으로 끝나는 요소를 선택
/$= : 특정값으로 끝나는 요소 선택 ( ex.boy-class2, numclass2)/
div[class$="class2"] { font-size: 30px; }
-> 속성 값이 특정 값을 포함하는 요소를 선택
/* =: 특정 값을 포함하는 요소 선택 (ex. num-2, str-2-num)/
div[name*="2"] { border:3px solid blue; }
문자열 속성 선택자를 다중 선택하여 검색할 수 있다.
a[href^='https:'][href$='com'] { color: #00a; }-> https:로 시작하고 com으로 끝나는 문자열을 검색한다.
-형제 관계에 있는 요소 중 특정 요소를 선택하는 선택자
-위치를 기준으로 구분함 (중요)
<div id="test1"> <p>테스트1</p> <p>테스트2</p> <p>테스트3</p> <p>테스트4</p> <p>테스트5</p> <pre>테스트6</pre> </div>
형제 관계의 요소 중 첫번째 요소를 선택
→첫번째 자식이 p태그면, 선택하라는 뜻
#test1 > p:first-child { background-color: pink; }
last-child : 형제관계의 요소 중 마지막 요소
→마지막 자식이 p태그인 경우 선택되는것.
#test1 > p:last-child { background-color: orange; } /*실제 코드는 pre가 마지막이기 때문에 적용되지 않는다.*/
nth-child(수열) : 형제 관계 요소 중 지정된 수열번째 요소를 모두 선택
-순서를 따질 때 1부터 시작함
#test1 > p:nth-child(2){ /*#test1의 자식 요소 중 2번째 요소를 선택하고나서 p태그인지 검사한다.*/ background-color: yellow; } /*홀수번째 형제 요소 선택*/ #test1 > p:nth-child(2n-1) { font-weight: bold; font-size: 30px; }
형제 관계 요소 중 뒤에서부터 지정된 수열 번째 요소를 모두 선택
#test1 > p:nth-last-child(2) { color :hotpink; } /*뒤에서 2번째 요소가 p일때 스타일 지정*/
-선택된 형제 관계 요소 중 특정 요소를 선택하는 선택자
(선택된 요소들을 기준으로 구분)
<div id="test2"> <pre>테스트0</pre> <p>테스트1</p> <p>테스트2</p> <p>테스트3</p> <p>테스트4</p> <p>테스트5</p> <pre>테스트6</pre> </div>
#test2 >p:first-of-type { background-color: orange; }
#test2 >p:last-of-type { background-color: skyblue; }
/*홀수번째 요소에 스타일 지정*/ #test2 >p:nth-of-type(2n-1) { font-size: 30px; }
/*짝수번째 요소에 스타일 지정*/ #test2 >p:nth-last-of-type(2n) { background-color: red; }
괄호 내 선택자를 제외한 나머지 요소를 선택
#test3 >li:not(:nth-of-type(3n)) { background-color: aqua; }/3의 배수를 제외한 요소에만 스타일 지정/
특정 요소의 자식이 하나밖에 없을 때 선택
#test1 >p:only-child { background-color: steelblue; }
특정 요소의 자식 중 지정된 형태와 같은 자식요소가 하나만 있을 때 선택
<div id="test2"> <p>자식1</p> <pre>자식2</pre> </div> ----------------------- #test2 >p:only-of-type{ background-color: pink; }
자식 요소가 없는 요소를 선택하는 것
자식요소의 개념 : 태그, 글자, 띄어쓰기 모두 자식요소라고 함
<div id=test3> <p></p> <p>123</p> <p> </p> <p><strong>안녕</strong></p> </div>
#test3 >p:empty { background-color: greenyellow; height:20px; /*알아보기 쉬우라고 표시*/ }
같은 스타일을 지정하고 싶으나
요소를 선택하는 선택자가 일치하지 않을 때 사용
#test4-1, #test4-2, .test4-3 { background-color: yellow; }
<ul id="test5-1"> <li class="c5">1</li> <li class="c5">2</li> <li class="c5">3</li> <li>4</li> <li>5</li> </ul> <ul id="test5-2"> <li class="c5">6</li> <li class="c5">7</li> <li class="c5">8</li> <li> <span class="c5">9</span> </li> <li> <span class="c5">10</span> </li> <p class="c5">11</p> <p class="c5">12</p> </ul>
/*#test5-1의 후손 중 클래스가 c5인 요소를 선택*/ #test5-1 .c5 { background-color: aqua; } /*test5-2의 자식 중 클래스가 c5인 li요소만 선택*/ #test5-2 >li.c5 { }
<div class="test6">테스트1</div> <div class="test6 c6">테스트2</div> <div class="c6">테스트3</div>
.test6.c6{ background-color: red; } /* 두번째 줄의 문구에 스타일이 적용됨*/
기본적으로 css 속성은 style태그 또는 css 파일에 작성된 순서대로(위->아래) 해석이 진행되지만,
같은 요소에 여러 css 속성이 설정되는 경우 우선 순위가 적용된다.
1) 동일한 우선 순위로 css 속성이 설정된 경우 제일 마지막에 작성된 css 속성이 반영된다
2) 여러 선택자를 이용해서 같은 요소를 선택하더라도 지정되는 css 속성이 다르면 모두 반영된다.
1순위 : css속성: 속성값 !important;
2순위 : inline-style 속성 (요소에 직접 작성되는 style속성)
3순위 : 아이디 선택자(#아이디 속성명)
4순위 : 클래스 선택자(.class 속성명)
5순위 : 태그 선택자 (태그명)
<div class="cls1" id="test1" style="background-color: pink; "<!--2순위 : inline-style 속성-->>우선순위 테스트</div>
/*5순위 : 태그 선택자*/div {
width:200px;
height:200px;
background-color: red !important; /1순위 : css속성/
}
/*4순위 : 클래스 선택자*/.cls1{
background-color: green;
}
.cls1{
background-color: yellow;
/동일한 우선순위에선 마지막으로 적용된 설정값이 적용됨/
}
/*3순위 : id 선택자*/#test1 {
height:100px;
background-color: black;
color:white;
}
/*2순위 : inline-style 속성*//html 문서 내에 작성됨/
/*1순위 : css속성*//원하는 스타일에 !important 작성 시 1순위 항목이 됨/
사전적 의미 : 배치, 정리
기술적 의미 : 구성 요소를 제한된 공간에 효율적으로 배치하는 것
요소가 화면에 어떻게 보여질지 형식을 지정하는 속성
(ctrl+alt+방향키 → 여러줄 한번에 수정 가능하다)
->display:block은 기본값이기 때문에 따로 지정해 주지 않아도 됩니다~
block element의 예시 : div, p, h1
<span class="area1 block">1번 영역</span>
.block { display:block; width:150px; height:150px; }
(해당 태그가 마크업 하고 있는 컨텐츠의 크기만큼만 공간을 차지하도록 하고 있다.)
+) margin과 padding도 좌우로만 정할 수 있다.
inline element의 예시 : span, a, em 등
<div class="area1 inline">1번 영역</div>
.inline { display:inline; }
inline 엘리먼트처럼 수평으로 요소들이 늘어설 수 있지만, block처럼 width, height, margin, padding을 정할 수 있는 hybrid 요소이다.
inline-block element의 예시 : input, button, select 태그 등
inline-block 확인하기
<span class="area1 block inline-block">1번 영역</span>
.inline-block { display:inline-block; }
none 확인하기
<span class="area1 block none">1번 영역</span>
.none { display:none; }
→후술할 예정
준비물
-감싸는 영역 요소
-내부의 영역을 분할할 요소
-display: block
-크기 단위 (고정(px), 가변(%))
->display:block은 기본값이기 때문에 따로 지정해 주지 않아도 됩니다~
<div id="container-1"> <!--내부에 영역을 분할할 요소--> <div class="div-1"></div> <div class="div-1"></div> </div> <div id="ct1"> <!-- 내부에 영역을 분할할 요소--> <div class="dv1"></div> <div class="dv1"></div> </div>
/*감싸는 영역 요소*/ #container-1 { border:3px solid black; width:323px; height:472px; } /*내부에 영역을 분할할 요소*/ .div-1 { height:50%; width:100%; border:1px dashed hotpink; } #ct1 { border:3px solid black; width:323px; height:472px; } #ct1 > .dv1:first-of-type{ height: 30%; width:100%; background-color: red; } #ct1 > .dv1:last-of-type { height:70%; width:100%; background-color: blue; }
-감싸는 영역 요소 : id="container-2"
-화면 분할 내부 요소 : class="div-2"
-분할 비율 ->20:30:50
-배경색 자유롭게
->display:block은 기본값이기 때문에 따로 지정해 주지 않아도 됩니다~
<div id="container-1"> <!--내부에 영역을 분할할 요소--> <div class="div-1"></div> <div class="div-1"></div> </div> <div id="ct1"> <!-- 내부에 영역을 분할할 요소--> <div class="dv1"></div> <div class="dv1"></div> </div>
/*상하3분할*/ #container-2 { border:3px solid black; width:323px; height:471px; } #container-2 >.div-2:first-of-type{ height: 20%; width:100%; background-color: green; } #container-2 >.div-2:nth-of-type(2){ height: 30%; width:100%; background-color: tomato; } #container-2 >.div-2:last-of-type{ height: 50%; width:100%; background-color: skyblue; }
-감싸는 영역 요소
-내부 분할 요소
-크기 단위
-display : inline-block(약간 문제점 있음)
→ div 사이에 엔터가 존재하기 때문에 정상 출력하기 위해서는 사이에 공백을 없애야 한다.
<div id="container-3"> <div class="div-3"></div><div class="div-3"></div> <!--내부의 두 요소 사이에 엔터==한칸--> </div>
#container-3 { border:5px solid red; width:400px; height:200px; } .div-3 { width:50%; height: 100%; display:inline-block; } #container-3 >.div-3:first-child{ background-color: pink; } #container-3 >.div-3:last-child{ background-color: blue; }
요소는 존재하지만 화면에는 보이지 않음(투명x)(화면에 아예 존재x)
visibility : hidden;
요소가 존재하지만 그 자리에 아무것도 안보이는것 (투명)
HTML 요소는 총 4가지의 영역으로 구성되어 있다.
1. content 영역
-요소의 내용이 작성되는 영역
(시작태그와 종료태그 사이에 작성되는 내용을 생각하면 됨)
2. padding 영역
-content 영역과 border 영역 사이
.padding-test { padding-top:20px; padding-left: 30px; padding-bottom: 50px; padding-right: 100px; } /*padding 속성 : 작성법에 따라서 padding 특정 방향에 크기를 지정할 수 있다. */ /*값 1개 : 상하좌우 적용 padding:50px; 값 2개 : 상하,좌우 적용 padding:50px 100px; 값 3개 : 상, 좌우, 하 적용 padding:10px 50px 100px; 값 4개 : 상, 우, 하, 좌(시계방향으로) 적용 padding:10px 20px 30px 40px; */
3. border 영역
요소의 테두리가 지정되는 영역
content보다 바깥쪽에서 content를 감싸고 있음
.border-test{ border-top:3px solid black; border-bottom: 5px dashed magenta; border-left: 10px dotted blue; border-right:10px double orange; } /*border 속성은 상하좌우 방향을 별도로 지정할 수 없음*/
4. margin 영역
-서로 다른 요소의 margin이 겹칠 경우, 더 큰 margin을 가진 요소의 값을 따른다
-margin:autuo; 기능
/*margin에서는 padding과 같이 상하좌우 방향이 적용 가능함*/ .margin-auto { margin-top:100px; margin:auto; /*좌우요소간의 간격을 자동으로 지정하여 가운데 정렬하는 역할 ->margin 속성은 상하좌우를 동시에 지정하기 때문에 상(top)부분에도 auto가 지정되어, 적용됐던 100px이 덮어쓰기 되었음. ->상하에 값을 부과하고 싶다면 auto보다 아래에 적어 덮어 씌운다. */ }
box-sizing
border, padding이 content 안에 겹치도록 하여 전체 크기를 알기 쉽게 해준다.
#box-sizing { /*테두리 10px. 패딩20px, 내용 나머지 전체 요소 크기가 가로/세로 각각 300px인 정사각형 만들기 */ border: 10px solid black; padding:20px; width:300px; height:300px; box-sizing: border-box; }
모든 요소들을 box-sizing 해두고 시작하면 편하다.
*{ box-sizing:border-box; }
position은 요소의 위치를 지정하는 속성
지정된 요소 내부에 다른 요소가 상대적인 위치를 지정할 수 있도록 기준이 되게 만드는 속성.
해당 요소가 원래 있어야 하는 자리에서 top, bottom, left, right 속성을 사용하여 위치를 조정할 수 있음
기본 요소의 배치 순서를 무시하고 지정된 절대 위치에 요소를 배치함.
속성이 absolute일 때 해당 요소는 배치 기준을 자신이 아닌 상위 요소에서 찾습니다.
absolute를 선언할 시, HTML 문서 상에서 독립되어 앞뒤에 나온 요소와 더 이상 상호작용을 하지 않게 됨
→DOM 트리를 따라 올라가다가 position 속성이 static이 아닌 첫 번째 상위 요소가 해당 요소의 배치 기준으로 설정된다. 만약에 해당 요소 상위에 position 속성이 static이 아닌 요소가 없다면, DOM 트리에 최상위에 있는 body 태그가 배치 기준이 됩니다.
<div class="container-2"> <div id="center"></div> </div>
#center { width:50px; height:50px; background-color: pink; position:absolute; /* absolute 속성 부여*/ top:0; left:0; bottom:0; right:0; margin:auto; }
<div class="fixed-area"> <a href="body-top">위쪽으로 이동</a> </div>
.fixed-area { width: 120px; position:fixed; bottom:50px; right:50px; } #우측 하단에 항상 고정된 상태로 존재하게 됨(스크롤 시에도 고정)

->우측 하단의 위쪽으로 이동 버튼이 생겼다.