국비교육(22-23)

24일차(2)/CSS(1) : 내부, 외부, inline CSS / Selector

서리/Seori 2022. 11. 8. 23:20

24일차(2)/CSS(1) : Selector

 

- CSS 활용법 알아보기

 

<hello.html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>hello.html</title>
    <!-- 외부(external) css 로딩하기 -->
    <link rel="stylesheet" href="./css/custom.css">
    <style>
        /* 여기는 internal(내부) css 영역 */
        div{
            margin-top: 100px;
            color: #ff0000;
        }
    </style>
</head>
<body>
    <div>css 를 배워 보아요</div>
    <!-- style=" 여기는 inline css 영역 "-->
    <div style="background-color: yellow;">css 를 배워 보아요</div>
    <div>css 를 배워 보아요</div>
    <p>p1 입니다.</p>
</body>
</html>

 

<custom.css>

@charset "utf-8"; /* 한글을 이상한 문자열로 인식하지 않도록 방지 */
/*
    html 페이지에서 <style></style> 요소 안에 작성하는 문법과 같다 
*/
p{
    border: 1px solid red;
}

 

** 내부 / 인라인 / 외부 CSS 구분하기

 

1) 내부 CSS (internal CSS)

<style> div { } </style>
- 요소별로 작성. style 요소 안의 모든 div 에 적용하겠다는 뜻.

 

2) 인라인 CSS (inline CSS)

<div style=" ">
- 적용시키고 싶은 요소에 직접 작성하는 CSS

 

3) 외부 CSS (external CSS)

<link href="xx.css">
- link로 외부 css를 로딩해 올 수도 있다. 
- custom.css 라는 파일을 연결하여 CSS 서식 적용하기!


 

- 브라우저 console창에서 컨텐츠를 선택하면 적용되어있는 css들을 볼 수 있다.

- 체크박스를 해제해서 볼 수도 있다.


user agent stylesheet
- 직접 적용하지 않아도 브라우저에서 자동으로 적용되는 서식!

 


./ : 현재 경로 (html 페이지가 존재하는 경로)
../ : 상위폴더 경로

ex) ../../ : 폴더 상위로 두칸 올라가기

 


 

<ApplyCSS>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Step01_ApplyCss.html</title>
	<!-- 외부 css -->
	<link rel="stylesheet" href="css/custom.css"/>
	<style>
		/* 내부 css */
		p{
			background-color: #00ff00;
		}
	</style>
</head>
<body>
<!-- 인라인 css -->
<p style="color:blue;">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Esse, consequuntur, consectetur doloribus qui ea perferendis alias. Dolorem aliquam optio mollitia commodi nostrum voluptas neque ut voluptatem enim aspernatur, aut eligendi.</p>	
</body>
</html>


- css 서식을 어떤 선택자에 적용할 것인가를 지정하기

- 요소명 / . class / # id 로 표기.


- 아래는 내부, inline, 외부 css가 모두 적용되어 나온 디자인
(경계선: 외부css - custom.css / 폰트색상: inline css / 배경색상: 내부 css )

 

- Source에 들어가보면 어느 경로에서 가지고 왔는지 볼 수 있다.

- file:// 은 파일 시스템을 의미한다.
- 웹브라우저는 인터넷뿐만 아니라 파일시스템 안에 있는 것을 로딩하는 기능도 있다.

 

 

- 외부css 는 따로 특별취급하지는 않고, 그냥 style 위에서 지정된 것처럼 해석한다.
 style 밑에서 불러왔으면 나중에 지정한 것으로 해석했을 것!
- css는 정의되는 순서도 중요하다! 선택자의 구체성이 같다면 나중에 정의한 것이 우선한다.
→ css는 먼저 로딩하느냐, 나중에 로딩하느냐에 따라 결과에 영향을 줄 수 있다.

- 보통은 외부 css를 먼저 로딩하고 페이지 안에 들어가는 style부분은 나중에 정의하는 것이 일반적이다.
 전체에 외부 css를 적용하고, 이 페이지에서만 가지고 있어야 하는 css를 나중에 정의하거나 재정의(override)한다.

 


 

<Example1>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Step01_Example.html</title>
	<style>
		/* 
			p요소의 
			
			1. 배경색을 검정색으로
			2. 글자의 색상을 흰색으로
			3. 글자의 크기를 30px 로
			4. margin 을 제거 

			해 보세요.
		*/
		p{ 
			/* css 속성명은 이미 정해져 있다 */
			/* css 속성값은 정해진 카테고리 혹은 정해진 형식에서 원하는 값을 지정한다.*/
			background-color: #000000;
			color: rgb(255, 255, 255);
			font-size: 30px;
			margin: 0;	
		 }
	</style>
</head>
<body>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor, reiciendis. Magnam necessitatibus explicabo iure reiciendis dolorem quod illo excepturi maiores dignissimos fugit ad quaerat obcaecati, vitae, alias maxime? Ex, a.</p>	
</body>
</html>

- <style> 태그 안에 나오는 : 의 좌측이 속성명!

- css의 속성명은 이미 정해져 있다. 주로 케밥케이스로 표기한다.

 

- : 의 우측은 속성값.

- css 속성값은 정해진 카테고리 혹은 정해진 형식에서 원하는 값을 지정한다.

 (자유롭지 않고, 정해진 형식 안에서 작성한다.)

 

 


 

<Selector>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Step02_Selector.html</title>
	<style>
		/* 요소명 선택자 */
		div{
			border-width: 1px;
			border-style: solid;
			border-color: #ff0000;
		}
		/* 클래스 선택자 */
		.bg-yellow{
			background-color: #ffff00;
		}
		/* 아이디 선택자 */
		#myDiv{
			color: #0000ff;
		}
	</style>
</head>
<body>
<div>div1</div>
<div class="bg-yellow">div2</div>
<div class="bg-yellow">div3</div>
<div class="bg-yellow">div4</div>
<div id="myDiv">div5</div>
</body>
</html>

 

* 선택자 (Selector)

- 내,외부 css를 작성할때 어떤 요소에 어떤 디자인을 적용할지 지정하는 것

- 요소명 / 클래스 / ID 선택자가 있다.

 

- css를 잘하려면 다양한 선택자를 작성할 줄 알아야 한다.

- body 안에 있는 문서구조는 매우 복잡하다. 원하는 특정 요소를 딱 골라서 디자인을 적용할 수 있도록!

 

 

- Class 는 그룹으로 묶는다.

- ID 선택자는 특정 요소를 유일하게 식별하기 위해서! 겹치면 안된다.

 


 

<Selector2>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Step02_Selector2.html</title>
	<style>
		/*div{
			padding: 10px;
			background-color: #000;
			color: #fff;
		}*/

		/*.animals{
			padding: 10px;
			background-color: #000;
			color: #fff;
		}*/
		
		/* div 요소 이면서 클래스 속성값이 animals 인 요소 선택*/
		div.animals{
			padding: 10px;
			background-color: #000;
			color: #fff;
		}

		/*
			선택자를 붙여서 쓰면 and 조건으로 문서를 선택한다.

			div.animals => 요소명이 div 이면서 클래스명이 animal
			p.friends => 요소명이 p 이면서 클래스명이 friends
			div.a.b => 요소명이 div 이고 클래스명이 a 와 b 
			.a.b => 클래스명이 a 와 b 
		*/
	</style>
</head>
<body>
<div class="animals">
	<h2>Dog</h2>
	<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Debitis accusantium dignissimos minima ipsa, ut a exercitationem reiciendis quam dolores, nostrum ducimus, adipisci eius alias quia. Vitae magni dolorum delectus amet!</p>
</div>
<div class="animals">
	<h2>Cat</h2>
	<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Debitis accusantium dignissimos minima ipsa, ut a exercitationem reiciendis quam dolores, nostrum ducimus, adipisci eius alias quia. Vitae magni dolorum delectus amet!</p>
</div>
<div class="friends">
	<h2>바나나</h2>
	<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Expedita at esse facilis nisi quibusdam voluptates! Deserunt debitis error soluta, commodi labore et, quidem, ex blanditiis quisquam asperiores quasi laboriosam consequatur.</p>
</div>
<p class="animals">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nulla repudiandae ea iste, natus mollitia explicabo recusandae odio et consequuntur sapiente beatae veritatis adipisci, aliquid sequi porro maiores ullam enim. Repudiandae.</p>			
</body>
</html>

 

- 선택자의 조합: 요소명+클래스 (&&조건)

- 선택자를 붙여서 쓰면 and 조건으로 문서를 선택한다.

ex) div.animals : 요소명이 div 이면서 클래스명이 animal
p.friends : 요소명이 p 이면서 클래스명이 friends
div.a.b : 요소명이 div 이고 클래스명이 a 와 b 
.a.b : 클래스명이 a 와 b 

 

- 선택자를 조합해서 보다 구체적으로 선택 가능!

 


 

<Selector3>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Step02_Selector3.html</title>
	<style>
		.container{
			background-color: #cecece;
		}
		/* .container 의 자손 중에서 p 요소 선택 */
		.container p{ /* 띄어 쓰기 : 자손 선택 */
			color: #ffff00;
		}
	</style>
</head>
<body>
<div class="container">
	<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Exercitationem voluptates, velit, obcaecati ipsam consectetur iusto magnam natus qui facilis non debitis corrupti nesciunt sit. Omnis voluptatem at, soluta laboriosam dignissimos.</p>
</div>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptates amet consequatur, eos impedit exercitationem aliquam qui temporibus cupiditate non illum excepturi, ad debitis dolore sapiente, neque laudantium! Doloribus, obcaecati, autem!</p>	
</body>
</html>

- 띄어쓰기 : 해당요소의 자손 선택 

 

ex) .container p {} :  .container의 요소 아래에 포함된 요소중에서 p를 찾는다(자손)

 

- 자손 : 하위에 포함만 되어있으면 모두 자손이라고 부른다.

 


 

<Selector4>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Step02_Selector4.html</title>
	<style>
		/* #one 의 자손 중에서 li 선택 */
		#one li{
			color: #ff00ff;
		}
		/* .container 의 자손 중에서 li 선택 */
		.container li{
			background-color: #cecece;
		}
	</style>
</head>
<body>
<div class="container">
	<ul>
		<li>하나</li>
		<li>두울</li>
	</ul>
	<hr/> <!-- hr 은 수평 구분 선입니다. -->
	<ul id="one">
		<li>김구라</li>
		<li>해골</li>
	</ul>
</div>	
</body>
</html>

 

- #id가 걸려있는 것을 포함해서, container의 자손 li 4개 다 css 적용!

 


 

<Selector05>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Step02_Selector5.html</title>
	<style>
		/* .container 의 자손 중에서 p 선택*/
		.container p{
			background-color: yellow;
		}
		/* .constiner 의 자식 중에서 p 선택 */
		.container > p{
			color: blue;
		}

		/* 조금 더 구체적으로 선택 */
		.container > .sub > p{
			font-weight: bold;
		}
	</style>
</head>
<body>
<div class="container">
	<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sint error quasi exercitationem, quis voluptates! Consectetur, hic! Vel libero, maxime itaque error! Distinctio nam ducimus molestias, laboriosam aspernatur fuga cum sapiente!</p>
	<div class="sub">
		<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Repellendus reprehenderit ex quaerat aut, culpa error eligendi praesentium, magnam, corporis doloremque accusantium obcaecati! Necessitatibus dolore id corrupti velit nesciunt numquam fugit?</p>
		<p>p1</p>
		<p>p2</p>
		<p>p3</p>
	</div>
</div>		
</body>
</html>

 

- 자손, 자식 요소 구분하기!

 

.container p{ }

- .container 의 자손 중에서 p 선택


.container > p{ }
- .container 의 자식 중에서 p 선택

 

.container > .sub > p 

- .container 의 자식 요소 중 .sub 요소의 자식요소인 p 선택 (구체화)

 

 

- 바로 인접한 하위항목이 자식요소 / 하위 항목이기만 하면 전부 자손요소

- 꺾쇠 > 가 있으면 자식! 한 단계 하위에 있는 요소를 가리킨다.

 

- 초록색은 자식 요소, 빨간색은 자손 요소

 


 

<Selector06>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Step02_Selector6.html</title>
	<style>
		/* 모두 선택 */
		*{
			background-color: #cecece;
		}

		/* , 로 구분해서 다중 선택 */
		h1, .my, .your{
			color: blue;
		}
	</style>
</head>
<body>
<h1>h1 요소입니다.</h1>
<p class="my">
	Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur animi corporis pariatur facilis blanditiis saepe deserunt itaque excepturi atque tempora, doloribus dolores consequatur sit incidunt mollitia perferendis rem nihil tempore.
</p>
<p class="your">
	Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ab officiis labore error itaque, optio dolorem fugiat ullam. Tenetur incidunt, quasi et asperiores adipisci excepturi, sapiente iure architecto eligendi delectus id?
</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sit sapiente totam, voluptas atque, illum earum ut harum repellendus odio aperiam! Ipsum animi sapiente aut, hic ipsam cupiditate laudantium necessitatibus est.</p>			
</body>
</html>

 

*{ xxx }

- * 은 모두 선택하는 와일드카드 선택자!


h1, .my, .your{ xxx }

, 는 다중선택자. id, class, 요소 여러개를 함께 선택.

 


 

<Example01>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Step02_Example.html</title>
	<style>
		.bg-green{
			background-color: #00ff00;
		}
		.text-bold{
			font-weight: bold;
		}
		.text-red{
			color: #ff0000;
		}
	</style>
</head>
<body>
<p class="bg-green">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Vero magnam autem, accusantium quos quae assumenda a facere ut quod blanditiis voluptate ratione voluptatum debitis ipsam delectus quas minima corporis dicta?</p>	
<p class="bg-green text-bold">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quisquam itaque temporibus facilis dolor ex earum minima rerum magnam beatae praesentium, molestiae. Voluptatum cumque voluptatibus molestiae eligendi voluptate recusandae, ab nihil!</p>
<p class="bg-green text-bold text-red">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Magni et incidunt eveniet nulla, voluptatibus, dolores reiciendis ipsam rerum aliquam ea explicabo assumenda fugit ullam quia nemo inventore. Repudiandae, autem, magnam.</p>
</body>
</html>

 

- 클래스 속성을 사용해서 css를 적용한다.
- 클래스 여러개를 띄어쓰기로 구분하여 함께 적용하기

 


 

<Example2>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Step02_Example2.html</title>
    <style>
        /*
            선택자의 구체성이 같다면 나중에 정의한 css가 우선시된다.
            아래 div의 글자색과 배경색을 확인해 보세요.
        */


        div{
            color: rebeccapurple;
        }

        div{
            color:skyblue;
        }

        .my-class{
            background-color: aquamarine
        }
        .your-class{
            background-color: burlywood;
        }
        /*  
            css의 가중치를 대략 숫자로 표현해 보면
            요소명 선택자: 1
            클래스 선택자: 10
            아이디 선택자: 100
            인라인 css : 1000
            !important: 10000
        */

        .our-class{
            color: greenyellow !important;
        }
        
        p.our-class{
            color:brown;
        }
    </style>
</head>
<body>
    <div class="my-class your-class">div1입니다.</div>
    <!--javascript로 조작하는 css는 inline css를 조작하는 것입니다.-->
    <p class="our-class" style="color:blue">p 요소입니다.</p>
</body>
</html>

 

- 가중치가 같다면 나중에 정의한 것이 이긴다!

 

- 외부css에서 불러온 서식을 일부 바꾸고 싶다든가 하는 경우,

 뭔가의 css를 바꾸려고 하는데 바뀌지 않는다면 구체성이 떨어지기 때문일 가능성이 크다.

 

- 같은 요소에 부딪치는 두개가 정의되어 있을 경우 나중에 정의한 css가 이긴다. (하늘색)

 

- 위와 같이 클래스 선택자+요소 선택자로 더욱 구체성을 높여서 적용하면 수정 가능하다.

 

- <style>안에서 아무리 수정해도 inline CSS가 가장 강하다!

 

- javascript로 조작하는 css는 "inline css"를 조작하는 것

 

 

 

!important

- 정말 중요한것이어서 이 css는 사실상 바꿀 수 없음을 의미한다.