<ul class="media-menu">
<li><a href="#">menu 1</a></li>
<li><a href="#">menu 2</a></li>
<li><a href="#">menu 3</a></li>
</ul>
기본 pc브라우저에서 가로정렬(x축정렬)되도록 하기
.media-menu{
list-style: none;
margin: 0;
padding: 0; 디폴트 설정값!
display: flex;
justify-content: space-between;
align-items: center;x축정렬을 위해 flex코드를 주고, 양쪽 정렬한다. y축 기준으로 중앙정렬을 위해 align-items값도 center로 준다.
width: 700px;
background-color: black;
}
.media-menu a{
color: black;
text-decoration: none;
}
.media-menu li{
width: 150px;
background-color: yellow;
border: solid 5px red;
padding: 5px 15px;
text-align: center;
}
브라우저 크기가 작아졌을 때 세로정렬(y축정렬) 되도록하기
@media (min-width: 320px) and (max-width: 767px) {
.media-menu{
flex-direction: column;
width: 190px;
align-items: flex-start;
}width값을 메뉴의 크기와 같은 190px로 설정하고, y축정렬시 중앙정렬이 되있는데, 왼쪽으로 정렬하기 위해서 flex-start값을 준다.
.media-menu li{
margin-bottom: 10px;
}
.media-menu li:last-child {
margin-bottom: 0;
}메뉴 사이에 10px의 공간을 주기위해 마진값을 준다. 마지막 메뉴에서는 마진값이 없도록 설정해준다.
}
<header class="intro">
<h1></h1>
<nav>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
</nav>
</header>
<main role="main">
<h1>hello world? hello world? hello world? hello world? hello world? hello world? hello world? hello world? hello world? hello world? hello world? hello world? </h1>
</main>
PC화면일 때의 상단메뉴 설정을 한다. 메뉴들의 width는 일정비율에 따라 차지하게 하고, 스크롤을 내려도 상단메뉴가 화면에 고정되도록 지정해야한다.
.intro{
display: flex;
position: fixed;x축 정렬을 위해 flex를 지정하고, pc화면일때 상단메뉴가 스크롤을 내려도 항상 보이도록 하기위해 fixed를 지정해준다.
width: 100%;
height: 80px;
background-color: #ffffff;
}
.intro h1{
width: 50%;
height: 80px;
background-color: black;
}높이값은 브라우저크기를 줄여도 변하지않게 하기위해 높이값을 같게 설정해주고, width는 크기를 줄일때 항상 같은 비율을 차지하게하기위해 50%로 설정한다.
.intro nav {
width: 50%;
height: 80px;
background-color: yellow;
}나머지 50%에 자리하게 하기위해 역시 width를 50%로 설정한다.
.intro nav ul{
list-style: none;
padding: 0;
margin: 0;
}
.intro nav ul li{
width: 33.3333%;
height: 80px;
}3등분으로 나누기위해서는 정확하게 나누어떨어지지않으므로 오차를 가장 적게 하는 수 밖에 없다.
.intro nav ul{
display: flex;
}li태그는 기본적으로 y축정렬되므로 x축정렬로 해주기 위해서 flex를 설정한다.
.intro nav ul li:nth-child(1) {
background-color: aliceblue;
}
.intro nav ul li:nth-child(2) {
background-color: skyblue;
}
.intro nav ul li:nth-child(3) {
background-color: darkblue;
}각각의 영역에 대한 배경색을 지정
main {
width: 100%;
height: 2000px;
background-color: gold;
padding-top: 80px;
}현재 head태그는 fixed를 사용했기때문에 3차원이고, main태그는 2차원이다. 형제관계일때 먼저있는 태그의 영향을 받기때문에 main은 head의 뒤쪽에 위치하게 되고, main에 어떤 내용을 작성하더라도 head에 의해 가려지기 때문에 head와 같은 height값인 80px을 지정해준다.
모바일화면에서는 상단 메뉴가 두줄로 표시되도록 하고, 스크롤을 내리면 상단영역이 따라올라가서 보이지않도록 한다.
@media(min-width: 320px) and (max-width: 767px){
.intro{
position: static;스크롤 올릴때 따라올라가게 하기위해서 기본설정값대로 하기위해 static포지션을 준다. 이때 이전에 설정했던 padding 80px이 빈공간으로 나타나게되기때문에 아래쪽에서 padding값을 없애줘야한다.
flex-direction: column;
height: 160px;
} 두줄로 보이게하기위해서 column정렬이 되도록하고 그 height는 원래 높이의 두배인 160px로 설정한다.
.intro h1{
width: 100%;
}
.intro nav{
width: 100%;
}
main{
padding-top: 0;
}static포지션으로 바꿔줬을 때 이전에 설정했던 padding 80px이 빈공간으로 나타나게되기때문에 아래쪽에서 padding값을 없애줘야한다.
}
<div class="container">
<div class="column">
<img src="https://via.placeholder.com/250X150">
<div class="image-info">
<h2>Title</h2>
</div>
</div>
</div>
위의 코드를 복사하여 제일 첫번째 div(container)안에 6개의 div(column)을 붙여준다.
<style media="(min-width:300px) and (max-width: 700px)">
body{
background: red;
}
</style>
이 중에서도 첫번째와 두번째 방법 정도만 기억해 두도록 하자.
아직 이미지와 텍스트 사이의 미세한 공간이 있다는 점과 같은 기본설정값에 대한 이해가 부족하다는 생각이 든다.
그리고 오늘 세번째 실습에서 div태그 안에 div를 만들어 이미지버튼을 여러개 넣어야했는데, 부모 div태그인 container자체를 여섯개를 만들었더니 실습하면서 계속 잘못 적용되었었다.
꼼꼼하지 않으면 계속 잊을 수 있는 부분같다. 연습이 답이다.
div가 헷갈렸던 부분은 어떤 영억에 대해 여러 자식태그를 모두 감싸는 큰 부모태그가 하나 있어야한다고 항상 유념하고 임해야 할 것같다.
오늘 수업 시간은 짧았지만 여러실습을 많이 해서 굉장히 알차게 많은 것을 한 것 같다. 아직은 각 코드가 이 부분에서 왜 들어갔는지, 다음에 복습할때 보면 헷갈릴 것 같아서 오늘 개발일지처럼 꼼꼼하게 설명을 달아두어야할 것같다..