제작기간 : 23.03.04 ~ 23.03.06 (3일)
사용 : HTML, CSS
분류 : 클론코딩, 반응형
- index.html
 - assets/css/common.css
 - assets/css/fonts.css
 - assets/css/layout.css
 - assets/css/main.css
 - assets/css/reset.css
 - assets/fonts/폰트파일
 - assets/images/이미지파일
 - assets/js/main.js
 
반응형 웹 디자인 : 하나의 웹사이트에서 PC, 태블릿, 모바일 기기 등 접속하는 디스플레이의 종류에 따라 화면의 크기가 자동으로 변하도록 만든 웹페이지 접근 기법




/* PC : 1025px 이상 1280px 이하 */
@media (max-width:1280px) {
	...
}
/* 태블릿 : 768px 이상 1024px 이하 */
@media (max-width:1024px) {
	...
}
/* 모바일 : 320px 이상 767px 이하 */
@media (max-width:767px) {
	...   
}

📌css
.header.on::before{ /* 헤더에 on 클래스가 들어가면, before로 흰 배경을 넣어라 */
    position: absolute;
    top: 100%;
    width: 100%;
    height: 182px;
    content: '';
    background: #fff;
    opacity: 0.98;
}
.gnb .nav-list .nav-item .sub{ 
	/* 기본적으로 대메뉴의 하위메뉴 .sub는 보이지 않음*/
    display: none;
    flex-direction: column;
    justify-content: center;
    position: absolute;
    top: 100%;
    height: 182px;
    white-space: nowrap;
}
.gnb .nav-list .nav-item .sub.on{
	/* 하위메뉴 .sub에 on 클래스가 들어가면, display: flex가 추가되어 눈에 보임 */
    display: flex;
}
📌js
$('.gnb .nav-item').hover(function(){ // 마우스를 호버하면,
    if($(this).has('.sub').length){ // 가져다 댄 대상의 하위요소가 .sub 클래스를 가졌다면,
    // .length : 요소의 개수를 구함.
        $('.header').addClass('on'); // on 클래스를 추가
        $(this).find('.sub').addClass('on'); // .sub 클래스를 가진 하위요소에 on 클래스 추가
    }},function(){ // 호버한 마우스를 치우면,
        $('.header,.header .sub').removeClass('on'); // on 클래스 제거
    }
);
<form> 내부에서 사용됨label의 for 값 및 data-sort값, input의 id 값, 하위 요소를 감싸는 부모 요소의 id 값을 이용하여 ➊ 체크박스를 꾸미고, ➋ 요소 전체선택 및 해제를 할 수 있음.

📌html
<ul class="career-list">
    <li class="career-item">
        <h3>직군/직무</h3>
        <ul class="list">
            <li class="item">
                <button class="career">Tech</button>
                <div class="chk-box">
                    <input type="checkbox" id="allT"> 
                  	<!-- id와 for의 연결 -->
                    <label for="allT" class="all" data-sort=".allT">전체</label>
                  	<!-- data-sort 속성으로 클래스를 연결하여 input checked 전체선택 및 해제 -->
                </div>
                <div class="depth2">
                    <ul class="list2">
                        <li class="item2">
                            <button class="sub">Software Development</button>
                            <div class="depth3">
                                <ul class="sub-area allT">
                                    <li class="chk-box">
                                        <input type="checkbox" id="tFE">
                                        <label for="tFE">Frontend</label>
                                    </li>
                                  	...
                              	</ul>
                          	</div>
                      	</li>
                      	...
                  	</ul>
              	</div>
            </li>
          	...
		</ul>
	</li>
  ...
</ul>
📌css
.sc-team .group-career2 .chk-box label::before{
	/* label의 before로 새로운 체크박스 만들기 */
    display: inline-block;
    width: 8px;
    height: 8px;
    border: 1px solid #d0d0d0;;
    border-radius: 50%;
    margin-right: 8px;
    content: '';
}
.sc-team .group-career2 .chk-box input:checked+label::before{
	/* input이 check 됐을 때 label의 before 체크박스 꾸미기 */
    border: 1px solid #000;;
    background: #000;
}
📌js
/**
 * @모바일검색_전체선택및삭제
 */
$('.all').click(function(){
    sort=$(this).data('sort');
  	// 데이터 속성값 가져와서 sort 변수에 담음
    if($(this).prev().prop('checked')){ 
    // 클릭된 요소의 이전 형제요소의 checked 속성이 true라면,
        $(sort).find('input').prop('checked',false);
      	// sort 변수로 요소를 선택하고, 
      	// 그 자식인 input 요소의 checked 속성을 false로 설정
    }else{ // checked 속성이 false라면,
        $(sort).find('input').prop('checked',true);
    };
});
/**
 * @모바일검색_전체영역checked삭제
 */
$('.group-career2 .btn-clear').click(function(){
    $('.group-career2 input[type=checkbox]').prop('checked',false);
});
📌html
<ul class="swiper-wrapper">
    <li class="swiper-slide">
        <a href="">
            <div class="img-area"> <!-- 부모 요소 -->
                <img src="" alt=""> <!-- 자식 요소 -->
            </div>
            <div class="text-area">
            	...
            </div>
        </a>
    </li>
  	...
</ul>
📌css
.sc-people .swiper-slide a{ 
    display: block; 
}
.sc-people .swiper-slide .img-area{ 
    position: relative; 
    padding-bottom: calc((520/1097)*100%); 
}
.sc-people .swiper-slide img{ 
    position: absolute; 
    top: 0; 
    left: 0; 
    width: 100%; 
    height: 100%; 
    object-fit: cover; 
}
🔷다양한 비율 만들기
.container {
/* 1:1 비율 */
padding-bottom: 100%;
.container {
/* 1:2 비율 */
padding-bottom: 200%;
.container {
/* 2:1 비율 */
padding-bottom: 50%;
.container {
/* 4:3 비율 */
padding-bottom: 75%;
.container {
/* 16:9 비율 */
padding-bottom: 56.25%;
The W3C Markup Validation Service의 Nu Html Checker를 통해 index.html의 마크업이 웹 표준에 적합함을 확인했습니다.