본문 바로가기
뒷북 정리 (국비 교육)/css

[css] step02. selector (선택자)

by 규글 2021. 12. 13.

step02. - 01~06 selector (선택자)

	<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>

어떤 항목의 css를 작성할지, 그것을 결정하는 위치가 바로 selector(선택자)이다. element(요소)가 될 수도 있고, id가 될 수도 있고, class가 될 수도 있다.

  1. 요소의 경우는 그대로 작성하면 된다. 작성한 요소에 해당하는 모든 곳의 css에 적용된다.
  2. id의 경우 앞에 #을 붙여서 작성한다. id는 유일하기때문에 해당하는 곳에만 css가 적용된다.
  3. class의 경우 앞에 .을 붙여서 작성한다. class는 일종의 group이기 때문에, 해당 class의 모든 곳에서 css가 적용된다.

 

	<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>

요소들 중에서도 특정 몇 가지만 따로 css를 적용할 수는 없을까? 가능하다.

  1. element, id, class를 붙여쓰게 되면 'and' 조건이 된다. div 요소 중 class가 animals인 css를 작성하기 위해서 'div.animals' 를 작성했다. 이는 html을 작성하는 것에도 도움이 된다. 'div.animals'를 입력하고 tab을 하게 되면 해당 animals 라는 class를 가지는 div 요소가 만들어진다. 이렇게 기억한다면 html과 css를 작성하는 것에 혼동이 줄고 편의성도 더해질 것이다.

    	<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>​
  2. class는 여러 개를 가질 수 있다. class 속성에서 띄어쓰기로 구분한다. 구분한 class의 css를 class.a.b{  } 로 작성한다.
  3. 띄어쓰면 안된다. 띄어쓰면 의미가 완전히 달라진다. 바로 다음의 예시를 보자.

    	<style>
    		.container{
    			background-color: #cecece;
    		}
    		/* .container 의 자손 중에서 p 요소 선택 */
    		.container p{ /* 띄어 쓰기 : 자손 선택 */
    			color: #ffff00;
    		}
    		/* 특정 class의 자식 요소 중에 또 특정 class라면?*/
    		.container .aa{
    			color:red;
    		}
    	</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>
    	<p class="aa">Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis molestias mollitia facilis consequuntur quis, temporibus expedita. Dolorum, veritatis! Dolorum possimus modi earum delectus aut! Commodi ducimus architecto aliquid dolores odit?</p>
        	<div>
    		<span class="aa">test1</span>
    		<p>test2</p>
    	</div>
    </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>
  4. 자식의 개념이 있고, 자손의 개념이 있다. 이것은 글자 그대로 받아들이면 된다. 자식은 바로 직계를 말한다. 예시에서 <div> 요소 안의 <p> 요소는 부모 자식의 관계이다. 만약 <div> 요소 안에 다른 <div> 요소가 있고, 그 자식 <div> 요소 안에 <p> 요소가 있다면 이것은 가장 상위의 <div> 요소와 부모 자식의 관계가 아니다. 이런 직계가 아닌 관계는 자손이라고 말한다. 나와 조부모님을 생각하면 된다.
  5. 선택자를 띄어쓰기로 작성하게 되면 앞선 무언가에 해당하는 모든 자손들에 대한 css를 작성하게 되는 것이다. 예시의 경우는 각각 container class를 가지는 모든 자손 <p> 요소, container class를 가지는 모든 자손 중에 aa class를 가지는 문서 객체의 css를 작성하겠다는 의미이다.

    	<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>
    	</div>
    </div>		
    </body>
  6. 띄어쓰기로 자손 객체들에 대한 css를 작성하는 것과 다르게, 자식 객체에 대한 css를 작성할 때는 '>'(꺾새)를 사용한다. 마찬가지로 꺾새를 여러차례 사용할 수도 있다.

    	<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>
  7. * : wild card 선택자이다. 해당하는 모든 것을 선택하겠다는 의미이다.
  8. 띄어쓰기나 꺾새가 아니라 ,(쉼표)로 이어서 표기한다면 그것은 해당하는 element나 id, class에 css를 모두 적용하겠다는 다중 선택의 의미이다.

'뒷북 정리 (국비 교육) > css' 카테고리의 다른 글

[css] step08. pseudo element  (0) 2021.12.13
[css] step07. position  (0) 2021.12.13
[css] step06. pseudo class  (0) 2021.12.13
[css] step03~05. margin / padding / border  (0) 2021.12.13
[css] step01. css란?  (0) 2021.12.13

댓글