[CSS] 기초 시작하기

    앞서서 먼저 jsp를 배우다보니 확장명은 jsp로 만들었습니다.

    또한 지금은 만드는 과정 중간부분이므로 html 문구는 100% 작성 형태는 아닙니다.

     

     

    JSP(HTML)

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="style.css">
    <title>Insert title here</title>
    <script src="https://kit.fontawesome.com/45fba14eff.js"
    	crossorigin="anonymous"></script>
    <link
    	href="https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@700&display=swap"
    	rel="stylesheet">
    <script src="main.js" defer></script>
    </head>
    <body>
    	<nav class="navbar">
    		<div class="navbar_logo">
    			<i class="fab fa-accusoft"></i> <a href="">DreamCoding</a>
    		</div>
    		<ul class="navbar_menu">
    			<li><a href="">Home</a></li>
    			<li><a href="">Gallery</a></li>
    			<li><a href="">Weddings</a></li>
    			<li><a href="">FAQ</a></li>
    			<li><a href="">Bookings</a></li>
    		</ul>
    		<ul class="navbar_icons">
    			<li><i class="fab fa-twitter"></i></li>
    			<li><i class="fab fa-facebook-f"></i></li>
    		</ul>
    
    		<a href="#" class="navbar_toogleBtn"><i class="fas fa-bars"></i></a>
    	</nav>
    </body>
    </html>

    가장 간단하게 nav로 영역을 지정하였습니다.

    메뉴를 만들고, 로고와 리스트를 만드는 과정입니다.

     

    평상시처럼 nav와 ul, li를 통해 만듭니다.

    테그 <ul><li>는 순서 없는 리스트를 만들 때 주로 사용합니다.

     

    여기서 css 로고에 관한 Tip을 드린다면,

    <script src="https://kit.fontawesome.com/45fba14eff.js"
    	crossorigin="anonymous"></script>

    이 사이트에 가입후 인증을 받게 된다면, 간단하게 스크립트에 링크 하나 주므로써 로고를 자유롭게 사용 할 수 있게 됩니다. 로고의 작업이 간편화 됩니다.

     

    저는 여기 사이트에서 사용하는 이미지 파일을 사용하므로 <i> 테그는 이 js파일에서 불러온 사이트 입니다.

     

     

    CSS - style.css

    /* CSS도 변수를 만들 수 있다. */
    :root { 
    	--text-color: #f0f4f5; 
    	--background-color: #263343; 
    	--accent-color: #d49466;
    }
    
    /*body 양 부분의 여백을 없앤다. */
    body {
    	margin: 0;
    	font-family: 'Source Sans Pro';
    }
    
    /* a 링크의 특징인 밑줄 제거, a링크의 텍스트는 하얀색으로 */
    a {
    	text-decoration: none;
    	color: var(--text-color);
    }
    
    .navbar {
    	/*navbar 클래스이름을 가진 테그는 flex 형식으로 정렬*/
    	display: flex;
    	/*justify-content: space-between = 플랙스 요소는 요소들 사이에만 여유 공간을 두고 배치*/
    	justify-content: space-between;
    	/*가운데 정렬*/
    	align-items: center;
    	background-color: #263343;
    	/* 안쪽 여백 좌, 우 길이 지정*/
    	padding: 8px 12px;
    }
    
    .navbar_logo {
    	font-size: 24px;
    	color: white;
    }
    
    .navbar_logo i {
    	color: #d49466;
    }
    
    .navbar_menu {
    	display: flex;
    	/* li 특징인 네모박스 스타일 제거 */
    	list-style: none;
    	/* navbar_menu의 왼쪽 여백을 지워서 가운데 정렬 */
    	padding-left: 0;
    }
    
    .navbar_menu li {
    	/* 리스트끼리 왼쪽여백 8, 오른쪽 여백 12 */
    	padding: 8px 12px;
    }
    
    /* 마우스 올렸을 때 변형되는 css*/
    .navbar_menu li:hover {
    	/* 배경색 변경 */
    	background-color: #d49466;
    	/*기본은 직각이므로, 테두리를 둥근모양으로 만든다. */
    	border-radius: 4px;
    }
    
    .navbar_icons {
    	list-style: none;
    	color: white;
    	display: flex;
    	padding-left: 0;
    }
    
    .navbar_icons li {
    	padding: 8px 12px;
    }
    
    /* 영역에 고정되어있지 않고, 무조건 최상단 오른쪽에 정렬해야 한다. 그러므로 position 사용한다.*/
    .navbar_toogleBtn {
    	/*화면이 작아졌을 때만 햄버거 버튼을 만들어야하므로, none을 지정한다.*/
    	display: none;
    	position: absolute;
    	/* 오른쪽 정렬, 여백 32px */
    	right: 32px;
    	font-size: 24px;
    	color: #d49466;
    	position: absolute;
    }
    
    /*길이가 낮아졌을 경우에, 반응형을 적용하기 위해 screen-max가 지정이 되었다.*/
    @media screen and (max-width:768px) {
    	.navbar {
    		/* 크기가 작아졌을 경우 컬럼형식으로 정렬이 된다. */
    		flex-direction: column;
    		align-items: flex-start;
    		/* 너무 화면에 꽉차 있으므로 padding으로 여유 공간을 제공 */
    		padding: 8px 24px;
    	}
    	.navbar_menu {
    		/* 햄버거 버튼 눌렀을 때만 나타나게 해야하므로 기본 상태는 안 보이게 설정한다. */
    		display: none;
    		/* 크기가 작아졌을 경우 컬럼형식으로 정렬이 된다. */
    		flex-direction: column;
    		align-items: center;
    		width: 100%;
    		flex-direction: column;
    	}
    
    	/* 마우스 올렸을 때 하이라이트를 늘리기 위해서 list 의 길이를 100% 늘렸다.*/
    	/* 그러나 다시 list가 100%가 되었으므로 자동으로 왼쪽정렬이 된다. 그러므로 가운데 정렬을 다시 한다. */
    	.navbar_menu li {
    		width: 100%;
    		text-align: center;
    	}
    	.navbar_icons {
    		/* 햄버거 버튼 눌렀을 때만 나타나게 해야하므로 기본 상태는 안 보이게 설정한다. */
    		display: none;
    		justify-content: center;
    		width: 100%;
    	}
    	/* 기본크기에서 안보이다가 보이게 해야하므로 block을 지정해서 보이게 한다. */
    	.navbar_toogleBtn {
    		display: block;
    	}
    	.navbar_menu.active, .navbar_icons.active {
    		display: flex;
    	}
    }

     

    JavaScript - main.js

    /*getElementById방식과 비슷하다. 그러나 선택하는 것은 더 구체적이고 한정적이다.*/
    const toggleBtn = document.querySelector('.navbar_toogleBtn');
    const menu = document.querySelector('.navbar_menu');
    const icons = document.querySelector('.navbar_icons');
    
    /* 토글 버튼이 클릭 했을 때, 전달하는 매개체다. */
    toggleBtn.addEventListener('click', () => {
    	menu.classList.toggle('active');
    	icons.classList.toggle('active');
    });

     

    결과

     

    기본 페이지 모습

     

    사이즈가 작아졌을 때, nav의 모습이 변형된다. 메뉴가 자동으로 가려진다. (반응형)

     

    햄버거 버튼을 눌렀을 때, 메뉴가 생긴다.

    반응형

    댓글

    Designed by JB FACTORY