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

[css] step10. display

by 규글 2021. 12. 13.

step10. - 01~04. display

	<style>
		#one{
			/* 문서 객체는 만들어 졌지만 공간을 차지하지 않고
			보이지 않게 하기  */
			display: none;
		}
	</style>
</head>
<body>
	<h1>display 속성 테스트</h1>
	<button id="showBtn">눌러보셈</button>
	<p id="one">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Possimus cupiditate ea earum sequi aspernatur reprehenderit at quia, consequuntur consequatur iste quos necessitatibus eveniet ipsam, vero, eaque iusto maiores, ipsum explicabo.</p>	
	<br>
	<img src="images/kim1.png" />
	<script>
		document.querySelector("#showBtn")
		.addEventListener("click", function(){
			document.querySelector("#one")
			.style.display="block";
		});
	</script>
</body>
  1. display 설정을 none으로 하면 loading 했을 때 일단 보이지 않는다. (특정한 상황에서 보이게끔 하려는 목적)
  2. display 설정을 block으로 바꾸면 다시 보이게 된다. (경우에 따라 block이 아니라 inline을 쓴다.)
    	<style>
    		.wrapper{
    			border: 1px solid red;
    		}
    		span{
    			border: 1px solid green;
    		}
    		#one{
    			display: none;
    		}
    	</style>
    </head>
    <body>
    <h1>인라인 요소의 display 조작</h1>
    <button id="showBtn">눌러보셈</button>
    <div class="wrapper">
    	<span>하나</span><span id="one">두울</span><span>세엣</span>
    </div>
    <script>
    	document.querySelector("#showBtn")
    	.addEventListener("click", function(){
    		document.querySelector("#one")
    		.style.display="inline";
    	});
    </script>	
    </body>
  3. javascript를 통해 display를 inline, block으로 조작할 수 있다.
    	<style>
    		/*
    			[ inline 요소 ]
    			- width 와 height 를 지정할수 없다.
    			- left & right margin, padding 을 가질수 있다.
    			- top & bottom margin, padding 을 가질수 없다. 
    			- 왼쪽과 오른쪽에 다른 요소가 올수 있다. 
    		*/
    		#one{
    			border: 1px solid red;
    			display: inline;
    		}
    		/*
    			[ inline-block 요소 ]
    			- width, height, margin, padding 모두 가능
    			- 왼쪽과 오른쪽에 다른 요소가 올수 있다.
    		*/
    		#two{
    			border: 1px solid blue;
    			display: inline-block;
    		}
    	</style>
    </head>
    <body>
    <h1>inline vs inline-block</h1>
    <div id="one">Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet</div>
    <div id="two">Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet</div>	
    </body>
  4. inline과 block의 display는 요소를 참고하면 이해가 쉬울 것 같다.
  5. inline-block 은 inline과 block의 특징을 둘 다 가지고 있다.
    	<style>
    		span{
    			border: 1px solid red;
    			width: 100px;
    			height: 100px;
    		}
    		img{
    			width: 100px;
    			height: 100px;
    		}
    	</style>
    </head>
    <body>
    <h1>img 요소는 inline 요소 이지만 inline-block 요소 처럼 동작한다.</h1>
    <img src="images/1.jpg"/>
    <img src="images/2.jpg"/>
    <span>span 요소</span>
    <span>span 요소</span>	
    </body>​
  6. <img> 요소는 inline 요소이지만 inline-block 요소처럼 동작한다. inline-block 처럼 동작한다는 것은 어떤 의미일까? <span> 요소와 같은 line 요소는 좌우로 나열되면서 요소 사이에 공백이 없고, width나 height의 크기 조절이 불가능하다. 그저 content만큼의 공간만을 차지할 뿐이다. <div>와 같은 block 요소는 위아래로 나열되면서 요소 사이에 공백이 없고, width나 height의 크기 조절이 가능하다.
    inline-block 요소는 좌우로 나열되고 크기 조절이 가능하다. inline-block 요소 사이에 공백이 생긴다는 글도 몇 개 발견했지만[각주:1] [각주:2], 사실 이 공백은 엔터로 줄 나눔을 했기 때문에 생기는 것이지 옆으로 <img> 요소를 이어붙인다면 공백이 생기지 않는다. 예시의 <span>도 엔터로 줄 나눔을 하면 사이에 공백이 생기더라. 이어붙이면 공백이 사라진다.

 

step10. example

<body>
<h1>display 속성 활용</h1>
<button id="hideBtn">숨기기</button>
<button id="showBtn">보이기</button>
<button id="toggleBtn">토글</button>
<br/>
<img src="images/kim1.png" id="one"/>
<script>
	document.querySelector("#hideBtn")
	.addEventListener("click", function(){
		document.querySelector("#one")
		.style.display="none";
	});
	document.querySelector("#showBtn")
	.addEventListener("click", function(){
		document.querySelector("#one")
		.style.display="inline";
	});

	//보였다 숨겼다를 반복(토글) 시키기
	document.querySelector("#toggleBtn")
	.addEventListener("click", function(){
		//현재 display 의 value 값을 읽어온다. 
		let current=document.querySelector("#one").style.display;
		if(current=="none"){
			//보이게 한다.
			document.querySelector("#one").style.display="inline";
		}else{// "" or "inline"
			//안보이게 한다.
			document.querySelector("#one").style.display="none";
		}
	});
</script>	
</body>

 

step10. quiz

	<style>
		#two, #three{
			display: none;
		}
	</style>
</head>
<body>
<ul class="nav">
	<li><a href="#one">one</a></li>
	<li><a href="#two">two</a></li>
	<li><a href="#three">three</a></li>
</ul>
<p class="nav-content" id="one">one Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquid quis commodi dicta suscipit, deleniti, voluptas adipisci aliquam, aspernatur laboriosam a quam ut excepturi accusamus cupiditate dolor nihil ducimus reiciendis qui!</p>	
<p class="nav-content" id="two">two Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquid quis commodi dicta suscipit, deleniti, voluptas adipisci aliquam, aspernatur laboriosam a quam ut excepturi accusamus cupiditate dolor nihil ducimus reiciendis qui!</p>	
<p class="nav-content" id="three">three Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquid quis commodi dicta suscipit, deleniti, voluptas adipisci aliquam, aspernatur laboriosam a quam ut excepturi accusamus cupiditate dolor nihil ducimus reiciendis qui!</p>	
<script>
	//모든 a 요소의 참조값을 배열에 담아오기 
	let links=document.querySelectorAll(".nav a");

	//반복문 돌면서 이벤트 리스너 등록하기 
	for(let i=0; i<links.length; i++){
		links[i].addEventListener("click", function(){
			//일단 모두다 숨기기 
			let navContents=document.querySelectorAll(".nav-content");

			navContents.forEach(function(item){
				item.style.display="none";
			});

			//이벤트가 일어난 a 요소의 href 속성 value 값 읽어오기 
			let sel=this.getAttribute("href");
			console.log("sel:"+sel);
			//읽어온 문자열을 선택자로 활용해서 보이게 하기 
			document.querySelector(sel).style.display="block";
		});
	}
</script>
</body>
  • querySelector("xxx") 함수 안의 문자열에 들어가는 방식은 css selector(선택자) 가 들어가는 방식과도 유사하다.

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

[css] step12. text  (0) 2021.12.14
[css] step11. z-index  (0) 2021.12.14
[css] step09. float  (0) 2021.12.13
[css] step08. pseudo element  (0) 2021.12.13
[css] step07. position  (0) 2021.12.13

댓글