728x90
반응형

CSS에서 스타일링 해줄 요소는 '선택자' 로 결정한다.

 

1. 선택자 정리

 

 태그 이름

/* 모든 <h1> 태그 */
h1 {
  color: orange;
}

클래스 / 아이디

/* 'important'라는 클래스를 갖고 있는 모든 태그 */
.important {
  color: orange;
}

/* 'favorite'라는 아이디를 갖고 있는 태그 */
#favorite {
  color: blue;
}

자식(children)

/* 'div1' 클래스를 갖고 있는 요소의 자식 중 모든 <i> 태그 */
.div1 i {
  color: orange;
}

직속 자식(direct children)

/* 'div1' 클래스를 갖고 있는 요소의 직속 자식 중 모든 <i> 태그 */
.div1 > i {
  color: orange;
}

 

복수 선택

/* 'two' 클래스를 가지고 있는 태그 모두와 'four' 클래스를 가지고 있는 태그 모두 선택 */
.two, .four {
  color: orange;
}

여러 조건

/* 'outside' 클래스를 갖고 있으면서 'one' 클래스도 갖고 있는 태그 */
.outside.one {
  color: blue;
}

/* 'inside' 클래스를 갖고 있으면서 'two' 클래스도 갖고 있는 태그 */
.inside.two {
  color: orange;
}

 

Pseudo-class(가상 클래스)

콜론(:)을 사용하면 몇 가지 '가상 클래스'를 선택할 수 있다.

n번째 자식

<div class="div1">
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
  <p>Paragraph 3</p>
  <p>Paragraph 4</p>
  <p>Paragraph 5</p>
  <p>Paragraph 6</p>
</div>
/* .div1의 자식인 <p> 태그 중 3번째 */
.div1 p:nth-child(3) {
  color: blue;
}

/* .div1의 자식인 <p> 태그 중 첫 번째 */
.div1 p:first-child {
  color: red;
}

/* .div1의 자식인 <p> 태그 중 마지막 */
.div1 p:last-child {
  color: green;
}

/* .div1의 자식 중 마지막 자식이 아닌 <p> 태그 */
.div1 p:not(:last-child) {
  font-size: 150%;
}

/* .div1의 자식 중 첫 번째 자식이 아닌 <p> 태그 */
.div1 p:not(:first-child) {
  text-decoration: line-through;
}

0번째 부터가 아니고 first-child가 첫번째 요소이다.

 

마우스 오버(hover)

h1 {
  color: orange;
}

/* 마우스가 <h1> 태그에 올라갔을 때 */
h1:hover {
  color: green;
}

 

 

2. CSS 상속

 

css에는 '상속' 개념이 있다. 부모 요소의 속성들을 자식들한테 넘겨주는 것이다. 큰 div태그가 있으면 그 안에 들어가있는 속성들은 모두 div태그의 css속성 값에 따라 같이 적용되는 것이다. 

하지만 태그와 속성에 따라 상속이 되지 않는 경우도 있다. 예를 들어서 부모 태그에 설정한 margin이 모든 자식들에게 적용은 되지 않는다. 

 

웬만하면 상속되는 몇 가지 속성들

  1. color
  2. font-family
  3. font-size
  4. font-weight
  5. line-height
  6. list-style
  7. text-align
  8. visibility

웬만하면 이라고 한 이유는 항상 상속되는 것은 아니기 때문이다. 예를들어 <a>태그에는 color 속성이 상속되지 않는다. <a>태그가 억지로 상속을 받아오기 위해서는 해당 속성에 inherit 값을 쓰면 된다.

<div class="div1">
  Let's go to <a href="https://google.com" target="_blank">google</a>!
</div>

<div class="div2">
  Let's go to <a href="https://google.com" target="_blank">google</a>!
</div>
.div1 {
  color: green;
}

.div2 {
  color: orange;
}

.div2 a {
  color: inherit;
}

 

3. CSS 우선 순위

여러 선택자가 같은 요소를 가리키면 우선 순위를 어떻게 평가할까.

 

1. 완전 똑같은 선택자가 나중에 또 나오면, 이전에 나온 스타일을 덮어쓰게 된다.

h1 {
  color: blue;
  text-align: center;
}

h1 {
  color: green;
}

//h1 태그는 초록색으로 된다.

 

2. 명시도(Specificity)

같은 요소를 가리키지만 선택자가 다르다면, '명시도(specificity)'에 따라 우선 순위가 결정된다.

 

명시도 계산기

  1. 인라인 스타일이 가장 우선 순위가 높다.
  2. 선택자에 id가 많을 수록 우선 순위가 높다.
  3. 선택자에 class, attribute, pseudo-class가 많을 수록 우선 순위가 높다.
  4. 그 다음은 그냥 요소(또는 가상 요소)가 많은 순서이다.

<ul> 태그 안에 <li> 태그 안에 <a id="link">가 있다고 가정해보자. 

<ul>
  <li><a id="link" href="#">Link 1</a></li>
  <li><a id="link" href="#">Link 1</a></li>
  <li><a id="link" href="#">Link 1</a></li>
  <li><a id="link" href="#">Link 1</a></li>
</ul>
ul li:first-child #link {
  color: green;
}

ul li:first-child a {
  color: orange;
}


/*첫번째 것이 요소의 명시도가 높으므로 첫번째 css가 적용된다*/

 

4. CSS의 다양한 단위들

 css에는 px, rem, em, %등 여러 단위가 있다. 폰트 크기 뿐만 아니라 padding, margin, width 등 다양한 속성들에 이 단위들을 사용할 수 있다.

 

1. px 

 절대적인 값. 다른 요소의 값에 영향을 받지 않는다.

 

2. rem

상대적인 값. 하지만 오직 <html> 태그의 font-size에만 영향을 받는다.

2rem은 <html>태그의 font-size의 2배 크기이다.

 

3. em

em도 rem과 마찬가지로 상대적인 값이다. em은 자기 자신의 font-size를 기준으로 한다.

2em은 자기 자신의 font-size의 2배 크기이다. 자기 자신의 font-size를 따로 정해주지 않을 경우, 상위 요소에서 상속받은 값을 기준으로 한다.

만약 자신에게 정해진 font-size가 있다면 그 값을 기준으로 em이 결정된다.

 

4. 퍼센트 %

%는 어느 항목에서 쓰이냐에 따라 다른 기준이 적용된다.

예를 들어 font-size에서 %가 쓰일 경우, 상위 요소의 font-size에 곱해주는 방식으로 계산.

%가 margin이나 padding의 단위로 사용될 경우, 상위 요소의 width를 기준으로 계산된다.

margin-top이나 padding-bottom 등 세로 속성을 조절할 때에도 상위 요소의 height가 아닌 width를 기준으로 계산된다.

728x90
반응형

'프론트엔드 > HTML CSS' 카테고리의 다른 글

CSS 포지셔닝  (0) 2021.04.13
display 속성  (0) 2021.04.11
웹에서의 박스 모델(Box Model) 다루기  (0) 2021.04.09
HTML, CSS, JavaScript  (0) 2021.04.02
728x90
반응형

HTML

HTML이란 어떤 것일까? 용어를 살펴볼때 이 단어의 약자를 풀어보는게 도움이 된다.

HTML은 Hyper Text Markup Language의 약자이다. 

Hyper란 '매우 활성화 되었거나', '특별히 활발하다' 라는 뜻이다. 그럼 Hyper Text는 단순히 text가 아니라 text 그 이상의 것을 의미한다. Hyper Text는 다른 정보와 연결해주는 텍스트로 정의한다. 여기서 말하는 정보는 다른 웹페이지를 의미한다. 즉, Hyper Text는 두 개이상의 웹페이지를 서로 연결해주는 고리라고 할 수 있다.

Markup에서 Mark는 무언가를 알아보게 해주는 기능이다. 웹 페이지를 Markup 함으로써 웹페이지의 내용을 HTML 요소로 작성하는 것이다. 브라우저에 '이건 제목이고, 이건 그림이고, 이건 단락이고'(<head>, <title>, <body> ...) 이러한 정보들을 알려주는 것이다.

마지막 Language는 언어라는 뜻이다. 즉, HTML은 소통 수단이다. HTML은 브라우저와 소통하는 일종의 수단으로 웹페이지가 어떻게 생겼고 다른 웹페이지와 어떻게 연결되어있는지를 말해준다.

 

파이어폭스가 제공하는 MDN을 웹 개발 공식문서라고 생각하고 보는데, 여기서 HTML이 어떻게 설명되어있는지 보자.

HTML(HyperText Markup Language)은 웹을 이루는 가장 기초적인 구성 요소로, 웹 콘텐츠의 의미와 구조를 정의할 때 사용합니다. HTML 이외의 다른 기술은 일반적으로 웹 페이지의 모양/표현 (CSS), 또는 기능/동작 (JavaScript)을 설명하는 데 사용됩니다.

즉, HTML은 웹페이지와 그 안의 내용을 구조화하는데 사용하는 코드라고 정의되어 있다. 여기서 중요한 것은 구조이다. 브라우저에 이 웹사이트는 이러한 구조를 가져서 이러한 모습이고 이러한 역할을 할거라고 말해주는게 HTML이라고 볼 수 있다.

 

CSS

HTML이 구조를 잡아서 빌딩을 만들었다고 하자. 빌딩의 뼈대를 세운 다음에는 페인트도 칠하고 안에 인테리어도 해야할 것이다. 이것이 CSS의 역할이다.

CSS는 Cascading Style Sheet의 약자이다. Sheet는 말 그대로 종의를 의미한다. 그러므로 Style Sheet은 여러 스타일이 들어간 종의로 볼 수 있다. 스타일이란 무언가를 더 매력적으로 만들기 위한 일련의 작업을 뜻한다. 웹페이지를 더 매력적으로 만들어주는 것이 바로 ‘스타일 시트’이다.

색상이나 글꼴, 이미지 배치 등을 스타일 시트에서 정의한다.

Cascade의 의미는 여러 소스의 속성값을 결합하는 데 사용하는 알고리즘이다. Cascading을 이용해서 브라우저에서 각 HTML 요소에 어떤 색상을 지정할지 결정한다.

 

JavaScript

JavaScipt는 웹과 사용자가 상호작용 할 수 있도록 동적인 환경을 만든다. 웹 페이지에서 볼 수 있는 모든 효과를 구현한다고 생각하면 된다. 자바스크립트는 어떻게 시작되었을까? 먼저, 웹 브라우저에 대하여 알아야 한다.

1993년, 일리노이 대학 국립 슈퍼컴퓨팅 애플리케이션 센터에서 Andressen은 Mosaic이라는 최초의 웹 브라우저를 출시했다. 앤드레슨(?)은 이후에 1995년에 Netscape를 설립했고 Netscape Navigator라는 보다 발전된 브라우저를 런칭했다. 그러나 앤드레슨은 웹이 조금 더 동적이고 사용자와 상호작용하길 원해서 웹을 위한 스크립팅 언어가 필요하다고 생각했다.

그래서 Netscape에서는 프로그래밍 언어 Mocha를 만드는데 이것이 자바스크립트의 최초 버전이다.

그리고 Mocha의 베타버전을 LiveScript로 이름을 바꾼다. 근데 이때쯤 Java라는 언어가 나오고, Java가 너무 인기가 많으니까 LiveScript를 JavaScript로 이름을 바꾸어버린다. (그냥 Java 인기에 올라타기..) 그래서 Java와 JavaScript는 아아무런 연관이 없다. NetScape가 Java의 인기를 얻기 위해 JavaScript로 이름을 바꿨을뿐이다.

728x90
반응형

'프론트엔드 > HTML CSS' 카테고리의 다른 글

CSS 포지셔닝  (0) 2021.04.13
display 속성  (0) 2021.04.11
CSS 활용하기  (0) 2021.04.11
웹에서의 박스 모델(Box Model) 다루기  (0) 2021.04.09

+ Recent posts