오늘은 helbak를 구조를 카피해서 레이어아웃 구조짜는 걸 실습했다. 키즈가오랑 반대의 제작순으로 구성하였다.
전에 실습했던 키즈가오는 적응형 웹사이트로 제작단계는 pc(미디어쿼리 밖) -> mobile (미디어쿼리 안)순으로 제작하였다.
이번에 실습할 helbak은 반응형 웹사이트로
제작단계는 mobile(미디어쿼리 밖) -> pc(미디어쿼리 안)순으로 제작했다.
즉, 이번 실습은 모바일을 먼저 만든다.
css에 디폴트로 입력해야 되는 속성들
*{ margin: 0;
padding: 0;
box-sizing: border-box;}
html ,body{
width: 100%;
height: 100%;}
body{overflow-x: hidden;
font-family: sans-serif;
color: #585858;}
h1, h2, h3, h4, h5, h6, p{
font-weight: 400;}
li{ list-style: none;}
a{ text-decoration: none;}
img{ vertical-align: middle;}
span{display: block; }
*표시
html, body, h1, h2, h3, p등 태생적으로 마진값을 가진 태그들이 너무 많아, 하나하나 0 넣기가 번거로움이 있다.
이에 대한 해결법으로, 에 마진,패딩0 넣는다.
box-sizing: border-box;
:패딩으로 공간의 크기가 달라지는 것을 방지하기 위해서 박스사이징/볼더박스 적용하는 것이 좋다.
list-style: none;
margin:0; 를 입력시 화면에는 li앞의 동그라미가 안보이지만, 이는 사라진게 아니라 화면 왼쪽으로 빠진것으로 속성으로 없애주어야 한다.
font-weight:
폰트의 굵기는 100단위로 올라간다. 100~900존재, 올라갈수록 굵기가 굵어진다.
span:
스팬태그는 원래 인라인요소를 가지고 있으나 여기세어는 블록요소로 만든다.
즉 , 최종적으로 header의 높이가 h1의 높이로만 인식*
이를 해결하기 위한,
메뉴버튼까지 다 인식하기 위한 방법
ul태그에 overflow:hidden을 넣는다.
자식이 3차원 높이 값을 가짐/ 부모가 오버플로우 히든을 넣으면, 부모가 자식의 높이값을 인식할 수 있음을 이용.
#header .buttons .menu-button{
display: block;
width: 100%;
height: 100%;
text-align: center;}
-이미지는 inline 요소를 가진고,
text-align은 인라인요소만 사용이 가능하다.
position: relative; top를 사용하기 위해서
top: 50%;
transform: translateY(-50%);
모바일은 클릭이 쉽지 않기때문에 여유영역도 활성화하는 것이 좋다.
반대로 pc는 클릭이 쉽고, 의도치않은 클릭을 방지하기 위해서 클릭의 범위를 로고로 한정하는 것이 좋다.
미디어쿼리로 pc를 제작시 logo의 영역의 변화가 필요하다.
이미지 공간을 만들어놓은 a태그 들어맞게끔 작업을 해야된다.
이미지의 고정값이 있지만 화면의 100% 나오게 다시 설정하기
a를 실이미지값과 비슷하게 설정 > 이미지를 a 100%으로 설정.
.main-content .product-group-list{
position: relative;
display: block;
/*float: left;*/
width: 100%;
height: 56.25%;
border: solid 10px rebeccapurple ;
overflow: hidden;
}
.main-content .product-group-list img{
width: 100%;
height: 100%;
}
레이어 겹치는 문제를 해결
@media (min-width: 47em){
.main-content{
padding-top: 80px;}}
@media (min-width: 60em){
.main-content{
overflow: hidden;}
한 태그에서 클래스를 여러개 사용했을때 역활을 구분하면 좋다.
‼ 인라인 블록요소 구분하기
!? span클래스로 색상 구분하기
li nth-child로 색상 구분하기
차이점이 있는지?
클래스 입력시,
클래스간 띄어쓰기가 있는 경우, 부모자식관계
없는 경우, 부모자식관계가 아님 선택지.
footer의 padding-bottom
#footer{
position: relative;
background-color: yellow;
padding-bottom: 66px;
}
padding-bottom: 66px의 정체는 footer제일 하단에 나온다.
만약 사용하지 않으면, a태그와 하단의 다른 테그의 레이어 겹치게 된다.
즉, a태그의 공간을 만들기 위해서 벌린 것으로 보면된다.
우선 영역을 하나하나 공간을 만들고 난 후 배치작업을 하는 것이 좋다.
💥아이디는 하나만!!
하나의 문서안에서 동일한 아이디가 있어서는 안된다.
같은 아이디가 존재해서는 안되는 이유
<ul>
<li><a href="#one">one</a></li>
<li><a href="#two">two</a></li>
<li><a href="#three">three</a></li>
</ul>
<div id="one">one</div>
<div id="two">tw o</div>
<div id="three">three</div>
<div id="one">one</div>
li의 one을 눌렸을때, 동일한 아이디=one가 있는 경우 어디로 이동하는가?
가장 상단의 원만 이동를 한다. 잘못된 설계. 타 개발자가 볼때는 혼동만 될 수 가 있다.
즉, a태그에 이동값으로 id을 넣기도 하기 때문에 id는 중복은 html설계상 좋지가 않다.
아이디의 속성값은 하나의 문서안에서는 유일해야됨
글자가 감싸는 영역을 넣어가면 줄바꿈현상이 일어난다.
이를 해결하기 위해서,
white-space: nowrap; 입력한다.(nowrap를 감싸지않겠다는 말)
넘어가는 거 안보고 싶은면 overflow:hidden를 입력한다.
그러나 짤린 모습이 보기 좋지가 않다...
추가로 text-overflow: ellipsis 입력
이 세가지 속성 모두가 '줄바꿈'효과를 준다.
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
말 줄임을 자주 사용할경우
필요할때마다 코드를 복사+붙여넣기를 하는 것은 쓸데없이 코드양만 늘이게 된다.
해당코드를 클래스로 만들어서, 쓸때마다 클래스를 붙여사용!
css를 클래스를 만들어서 html에 추가한다.
.ellipsis{ white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;}
<h2 class="ellipsis">
html문서만 보도 빠르게 파악이 가능하다.( css를 보지 않더라도)
이런 역활을 하는 코드가 굉장히 많음
3일동안의 키즈가오 실습덕분인지, 오류를 찾는 시간이 굉장히 빨라졌다. 코드를 보는 요령이 생긴것 같다. 이번에는 모바일에서 pc로 제작하는 방법을 배웠는데 ...해당 웹사이트 구조가 단순해서 인지,css 문서가 한 개여서 인지 키즈가오보다는 편했다.