학습한 내용
[html]
<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>
[css]
.media-menu {
list-style: none;
margin: 0;
padding: 0;
display:flex;
justify-content: space-between;
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;
}
@media (min-width: 320px) and (max-width: 767px) {
.media-menu {
flex-direction: column;
align-items: flex-start;
width: 190px;
}
.media-menu li {
margin-bottom: 10px;
} /*메뉴 버튼 바닥에 공백 넣고*/
.media-menu li:last-child {
margin-bottom: 0;
} /*마지막 메뉴의 공백 제거*/
}
display:flex;
사용flex-direction:column;
추가, 다른 내용은 이전값(.media-menu)에서 상속width: 190px;
[html]
<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 Hello World Hello World Hello World </h1>
</main>
[css]
.intro {
width: 100%;
height: 80px;
background-color: #ffffff;
display: flex;
position: fixed;
}
.intro h1 {
width: 50%;
height: 80px;
background-color: black;
}
.intro nav {
width: 50%;
height: 80px;
background-color: yellow;
}
.intro nav ul {
list-style: none;
padding: 0;
margin: 0;
display: flex;
}
.intro nav ul li {
width: 33.3333%;
height: 80px;
}
.intro nav ul li:nth-child(1) {
background-color: blue;
}
.intro nav ul li:nth-child(2) {
background-color: gray;
}
.intro nav ul li:nth-child(3) {
background-color: green;
}
main {
width: 100%;
height: 2000px;
background-color: gold;
padding-top: 80px;
}
@media (min-width: 320px) and (max-width: 767px) {
.intro {
height: 160px;
flex-direction: column;
position: static;
}
.intro h1 {
width: 100%;
}
.intro nav{
width: 100%;
}
main {
padding-top: 0;
}
}
※ 스크롤 고정 유무 -> position:fixed;
유무
width: 50%;
width: 50%;
width: 33.3333%;
.intro nav ul li:nth-child() {}
display: flex;
사용하여 x축 정렬display:flex;
사용※ y축 정렬되어 있는 형제 태그를 x축 정렬할 때,
그 형제 태그를 감싸는 부모 태그에 display:flex;
와 다른 요소들을 추가한다.
position:fixed;
: pc 버전에서 header를 스크롤 고정padding-top: 80px;
height: 160px;
-> 기존 height(80px) 고정, 두 줄로 변경flex-direction: column;
-> h1과 nav 태그의 y축 정렬position: static;
-> 상단 고정 해제, 기본값[html]
<div class="container">
<div class="column">
<img src="https://via.placeholder.com/250x150">
<div class="image-info">
<h2>Title</h2>
</div>
</div>
<div class="column">
<img src="https://via.placeholder.com/250x150">
<div class="image-info">
<h2>Title</h2>
</div>
</div>
<div class="column">
<img src="https://via.placeholder.com/250x150">
<div class="image-info">
<h2>Title</h2>
</div>
</div>
<div class="column">
<img src="https://via.placeholder.com/250x150">
<div class="image-info">
<h2>Title</h2>
</div>
</div>
<div class="column">
<img src="https://via.placeholder.com/250x150">
<div class="image-info">
<h2>Title</h2>
</div>
</div>
<div class="column">
<img src="https://via.placeholder.com/250x150">
<div class="image-info">
<h2>Title</h2>
</div>
</div>
</div>
[css]
.container {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
width: 1140px;
margin: 0 auto;
background-color: lightpink;
}
.container .column {
width: 355px;
background-color: #ffffff;
border: solid 2px red;
margin-bottom: 10px;
}
.container .column:nth-child(4),
.container .column:nth-child(5),
.container .column:nth-child(6) {
margin-bottom: 0;
}
.container .column img {
width: 100%;
vertical-align: middle;
}
.container .column .image-info {
padding: 20px 0;
text-align: center;
}
.container .column .image-info h2 {
margin: 0;
}
@media (min-width: 540px) and (max-width: 720px) {
.container {
width: 720px
}
.container .column:nth-child(4) {
margin-bottom: 10px;
}
}
@media (min-width: 320px) and (max-width: 539px) {
.container {
width: 100%;
box-sizing: border-box;
padding: 0 20px;
}
.container .column {
width: 100%;
}
.container .column:nth-child(4),
.container .column:nth-child(5) {
margin-bottom: 10px;
}
}
flex-wrap:wrap;
justify-content: space-between;
img의 width = 250 / .column의 width = 355
-> column에 img를 꽉 채우고자 함
-> .column img {width: 100%;}
img 태그와 div(class=“image-info”) 태그 사이의 기본 공백 제거
-> .column img {vertical-align: middle;}
padding: 20px 0;
-> 상하 공백 20text-align: center;
-> x축 중앙 정렬(하위 모든 내용에 대해)flex-wrap:wrap;
) 설정으로 미디어쿼리 범위와 .container의 width 설정값에 따라 줄바꿈이 일어난다. margin-bottom 값을 크기에 맞게 조절하여 보기 좋게 정렬한다.(1) style.css에 PC 버전, Mobile 버전 css를 모두 입력한다.
@media (min-width: 320px) and (max-width: 539px)
사용(2) 모바일용 css 파일을 따로 만든다. mobile.css
<link rel="stylesheet" type="text/css" href="css/mobile.css">
(3) html의 head에 직접 style 태그 사용한다.
<style media="(min-width:300px) and (max-width:700px)">
body {
background-color: red;
}
</style>
학습한 내용 중 어려웠던 점 또는 해결 못한 것들
저번 수업 시간에 일반적으로 모바일 버전을 먼저 만들고 pc 버전으로 확장해 나간다고 말씀하신 내용을 기억해 두 번째 실습을 기본값을 모바일 버전으로 만들고 미디어쿼리를 이용하여 pc 버전으로 만드는 실습을 스스로 해보았다.
해결 방법 작성
[hmtl]
<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 Hello World Hello World Hello World </h1>
</main>
[css]
html, body {
margin: 0;
padding: 0;
}
h1 {
margin: 0;
padding: 0;
}
.intro {
width: 100%;
height: 160px;
background-color: #ffffff;
}
.intro h1 {
width: 100%;
height: 80px;
background-color: black;
}
.intro nav {
width: 100%;
height: 80px;
background-color: yellow;
}
.intro nav ul {
list-style: none;
padding: 0;
margin: 0;
display: flex;
}
.intro nav ul li {
width: 33.3333%;
height: 80px;
}
.intro nav ul li:nth-child(1) {
background-color: blue;
}
.intro nav ul li:nth-child(2) {
background-color: gray;
}
.intro nav ul li:nth-child(3) {
background-color: green;
}
main {
width: 100%;
height: 2000px;
background-color: gold;
}
@media (min-width: 768px) {
.intro {
height: 80px;
display: flex;
position: fixed;
}
.intro h1 {
width: 50%;
}
.intro nav{
width: 50%;
}
main {
padding-top: 80px;
}
}
height: 160px;
height: 80px;
width: 50%;
padding-top: 80px;
결과는 같은 결과가 나왔다.
학습 소감
혼자서 실습을 해보면서 간단히 코드 몇 개만 수정하는 데에도 쉽지 않았다. 단순히 수정하는 것보다 수정하면서 세미콜론 등 당연히 있어야 하는 부분들이 지워지고 하는 경우가 많았는데 생각보다 한눈에 찾기가 어려웠다. 처음 디자인을 만드는 것도 중요하지만 만든 코드를 수정하는 연습도 필요하다는 것을 느꼈다.