[TIL] 내일배움캠프 React 과정 2022.11.14

Today I Learned

  • 웹 퍼블리싱 강의 1주차~2주차 수강

 

웹 퍼블리싱 강의 1주차 내용

CSS transition

transition: all 0.3s ease-in-out;

transition에 어떤 다양한 효과들이 있는지 궁금해서 검색해봤다.

https://poiemaweb.com/css3-transition

 

 

a태그 밑줄, 색상 제거하기

a {
  text-decoration: none;
  color: inherit;
}

color: inherit;

상위 클래스에서 지정한 색깔을 그대로 가져오는 문법

 

나는 color: white 로 색상을 직접 변경하는 방법을 사용했었는데 강의를 들으면서 inherit라는 더욱 간단한 속성도 알게 되었다. css에 이렇게 코드를 작성하면 모든 a 태그에 적용된다. 

 

 

CSS 가상 선택자

.dropbtn:hover,
.dropbtn:focus {
  background-color: #e8344e;
  color: white;
}

:hover는 마우스를 올렸을 때의 스타일을 설정

:focus는 해당 요소를 클릭했을 때의 스타일을 설정

:active는 해당 요소를 클릭하는 순간부터 떼는 순간까지의 스타일을 설정

 

CSS가 실제 구현된 모습은 아래 링크를 참조

https://hogni.tistory.com/110

 

 

toggle 기능

$('.dropbtn').on('click', function (evt) {
  const ulElement = $('ul');
  ulElement.toggle();
});

안 보이는 상태->보이는 상태->안 보이는 상태

display: none (안 보이는 상태)

 

 

미디어 쿼리

@media (max-width: 768px) {
        .button {
          width: 100%;
}

주로 화면 크기가 다른 장치(PC, 태블릿, 스마트폰) 마다 다른 디자인을 보여주기 위해 사용한다.

반응형 웹을 구현하기 위해 사용하는 대표적인 CSS 기술.

@media (조건) {스타일}

 

 

 

웹 퍼블리싱 2주차 강의 내용

GNB란?

Global Navigation Bar의 약자로, 웹사이트 전체에 동일하게 적용되는 내비게이션 바를 의미한다.

 

 

form 태그

<form action="#" accept-charset="utf-8" name="information" method="get">
      <fieldset >
        <legend>개인정보</legend>
        <div>이름 : <input type="text" name="name" /></div>
        <div>나이 : <input type="text" name="age" /></div>
      </fieldset>
</form>

form 태그는 주로 사용자가 입력하는 값(데이터)을 받아 처리하기 위해 사용된다. 주로 내부 input 요소들이 배치되어 있으며 이러한 정보들을 입력받아 서버와 통신할 수 있다.

 

<fieldset> 태그는 <form> 요소에서 연관된 요소들을 하나의 그룹으로 묶을 때 사용합니다.

 

<fieldset> 요소는 하나의 그룹으로 묶은 요소들 주변으로 박스 모양의 선을 그려줍니다.

또한, <legend> 요소를 사용하면 <fieldset> 요소의 캡션(caption)을 정의할 수 있습니다.

출처 http://www.tcpschool.com/html-tags/fieldset

 

 

label 태그

<label><input type="checkbox" id="checkbox"/> 아이디 패스워드 저장</label>

아이디 패스워드 저장이라는 input 태그를 label 태그 안에 넣어 놓으면 체크박스 뿐만 아니라 '아이디 패스워드 저장'이라는 텍스트를 클릭했을 때도 체크박스를 선택할 수 있다.

 

event.preventDefault( )

<script>
      $('#login').submit(function (event) {
        event.preventDefault(); // submit하면 기본적으로 실행되는 새로고침 동작을 막는 함수
        var username = $('#username').val();
        var password = $('#password').val();
        var isChecked = !!$('#checkbox:checked').val(); // !! 출력되는 값을 boolean으로 바꿔 줌
      });
</script>

event.preventDefault();

아이디 비밀번호 값을 입력해서 submit 하면 기본적으로 창이 새로고침 되도록 설정되어 있는데 이 함수를 사용하면 새로고침 동작을 막을 수 있다.

 

 

input 태그의 다양한 속성

<div class="green_window">
    <input
      id="query"
      name="query"
      type="text"
      maxlength="255"
      class="input_text"
      tabindex="1"
      autocomplete="off"
      placeholder="검색어를 입력해 주세요."/>
</div>

 

tabindex

tab키를 눌러서 다음 요소로 이동하도록 설정할 때 tabindex 값으로 순서를 설정해 줄 수 있다.

참고 https://www.daleseo.com/html-tabindex/

 

autocomplete

자동 완성 기능 on off

 

 

눈에 보이지 않는 부분?

.search_area .input_text::placeholder {
  color: transparent;
}
.blind {
  position: absolute;
  clip: rect(0 0 0 0);
  width: 1px;
  height: 1px;
  margin: -1px;
  overflow: hidden;
}​

 

실제로 눈에 보이지는 않지만 검색 엔진의 봇을 위해서, 또는 이 엘리먼트가 어떤 역할을 하는지 정보를 기록하기 위해서 정보를 숨겨놓기도 한다. 눈에 보이는 부분만이 전부는 아니다!

 

 

중앙 정렬하는 또 다른 방법

  position: absolute;
  top: 50%;
  left: 50%;

특정 블록 안에서 안에 들어있는 아이콘이나 텍스트를 가운데 정렬할 때 이용한다. 여기에 margin 값을 넣어서 세부적으로 설정할 수도 있다.

 

 

button 태그에 title 속성

<button id="search_btn" type="submit" title="검색" tabindex="3" class="btn_submit">

button에 title 값을 넣으면 마우스를 올렸을 때 검색이라는 텍스트 박스가 뜬다.

 

 

 

navigation을 리스트 형태로 만드는 이유

<div class="group_nav">
          <ul class="list_nav type_fix">
            <li class="nav_item">
              <a href="https://mail.naver.com/" class="nav" data-clk="svc.mail"><i class="ico_mail"></i>메일</a>
            </li>
            <li class="nav_item">
              <a href="https://section.cafe.naver.com/" class="nav" data-clk="svc.cafe">카페</a>
            </li>
            <li class="nav_item">
              <a href="https://section.blog.naver.com/" class="nav" data-clk="svc.blog">블로그</a>
            </li>
          </ul>
</div>

<div>로 만들어도 되지만 서로 연관있는 리스트라는 것을 보여주기 위해서 <ul>과 <li> 태그의 리스트 형태로 만든다.

 

 

<dl> 태그란?

<div class="group_service NM_FAVORITE_ALL_LY">
         <dl class="list_service">
            <dt class="service_title">ㄱ-ㅁ</dt>
            <dd class="service_data"><a href="https://weather.naver.com/" name="weather" data-clk="map.weather">날씨</a></dd>
            <dd class="service_data"><a href="https://game.naver.com/" name="ngame" data-clk="map.ngame">네이버 게임</a></dd>
            <dd class="service_data"><a href="https://booking.naver.com/booked/list" name="booking" data-clk="map.booking">네이버 예약</a></dd>
         </dl>
</div>

 

<dl> 태그는 정의형 목록이라고 하고 <dl> 태그 안에 <dt> 타이틀 태그, <dd> 설명 태그를 넣을 수 있다. 굳이 <dl> 태그를 사용한 것은 리스트 안에서 <dt> 태그를 사용하여 전체 서비스를 자음에 따라 ㄱ-ㅁ ㅂ-ㅅ 등으로 구역을 나눠서 타이틀을 넣고 구분을 하기 위함이 아니었을까 싶다. 

더욱 자세한 개념은 아래 링크를 참조할 것.

https://abcdqbbq.tistory.com/36

 

 

 

CSS overflow 속성

overflow: hidden;

영역을 벗어나는 부분은 보이지 않는 속성이다. 보통 작업을 할 때는 결과를 보면서 작업해야 하기 때문에 overflow: hidden;을 설정해놓지 않고 작업이 끝나면 overflow: hidden;로 숨겨둔다고 한다.

 

overflow에는 hidden 말고도 다양한 속성 값이 있는데 아래 블로그에 자세히 나와 있다. 이유는 모르겠지만 왠지 overflow 공부하면서 재밌었음ㅋㅋ

https://offbyone.tistory.com/296

 

 

 

display: table

상위에 있는 요소를 display: table로 만들고 그 자식 요소를 display: table-cell;로 정의하면 table 안의 cell은 가로로 배치된다.

 

 

a href="#"는 무슨 의미일까?

1. 클릭 이벤트 발생시 페이지 전환을 하지 않도록 하기 위해서 쓰인다.

2. 만약 화면 최상단으로 이동을 목적으로 #을 쓴다면 다음 코드와 같이 window.scrollTo()를 쓰는게 더 좋은 방식이다.

<input id="btnTop" type="button" onclick="window.scrollTo(0,0);" value="TOP">

출처

https://velog.io/@muchogusto/a-href-%EB%AC%B4%EC%97%87%EC%9D%84-%EC%9D%98%EB%AF%B8

 

CSS before after 가상 요소

#gnb .btn_more::after {
  display: inline-block;
  width: 11px;
  height: 7px;
  background-position: -83px -296px;
  background-repeat: no-repeat;
  vertical-align: top;
  content: "";
  margin-left: 7px;
  vertical-align: 2px;
}

.btn_more:after 더보기 옆에 화살표 아이콘을 넣기 위해서 사용한 가상 요소인데 after를 입력하니까 아이콘이 텍스트 우측에 나타난 것을 볼 수 있다. 만약 .btn_more:before라고 작성한다면 아이콘이 텍스트 좌측에 삽입된다.

 

자세한 내용은 아래 링크 참고

https://hianna.tistory.com/726

 

 

아이콘을 넣는 두 가지 방법

<a href="https://mail.naver.com/" class="nav" data-clk="svc.mail"><i class="ico_mail"></i>메일</a>
#gnb .btn_more:after {
}

i 태그 이용하거나 before after 가상 요소 이용하기

 

 

 

float 속성으로 정렬하기

#gnb .list_nav {
  float: left;
  font-size: 15px;
  line-height: 30px;
  font-weight: 700;
  color: #000;
  letter-spacing: -0.3px;
}

네비게이션 바를 정렬하는 데 float 속성을 사용했다. float: left로 설정하면 메일, 카페, 블로그 등 리스트의 각 항목이 왼쪽부터 차례대로 정렬된다.

 

만약에 크롬 개발자 도구에서 float: left를 해제하면 다음과 같이 정렬이 깨진다.

 

더욱 자세한 정보는 아래 링크 참고

https://electronic-moongchi.tistory.com/21

 

 

.toggleClass()

$gnb.toggleClass("ly_open");
#gnb .ly_service {
  display: none;
}
/* ly_open 클래스가 부여되면 ly_service의 display 속성을 block으로 바꾼다.
즉 드롭다운 리스트가 보이게 된다. */
#gnb.ly_open .ly_service {
  display: block;
}

jQuery의 .toggleClass()로 선택한 요소에 클래스 값을 넣었다 뺐다 할 수 있다. .toggleClass() 메서드를 이용해서 ly_service 영역에 ly_open 클래스 값을 부여하면 ly_service의 display 속성이 none에서 block로 바뀐다. 즉 드롭다운 리스트가 보이게 되는 것이다.

 

 

신기한 기능 알게 됐다. vscode에서 색상값에 마우스 올리면 이렇게 색상 창이 뜨는데 여기서 바로 컬러 눌러서 변경해 줄 수 있다..! 나만 몰랐을 수 있음ㅋㅋ

 

 

느낀 점

일단은 알고리즘 강의는 미뤄두고 바로 이번 주 금요일에 시작하는 팀 프로젝트를 위해 웹 퍼블리싱 강의를 먼저 듣기로 했다. 크롬 개발자 도구를 어떻게 쓸 수 있는지 웹 퍼블리싱 강의에서 자세하게 배웠는데 웹페이지의 구조를 더욱 자세하게 살펴볼 수 있어서 좋았다.

 

웹 퍼블리싱 강의는 완성된 코드를 제공해주고 그것을 하나하나 같이 살펴보는 방식으로 진행된다. 먼저 강의를 들으면서 강사님의 설명과 함께 코드 구조를 살펴보고 처음 보거나 궁금한 코드가 있으면 중간중간 구글링을 한다. 그리고 한 강을 다 듣고 나면 강의에서 제공해 준 완성 코드를 옆에 두고 내 손으로 처음부터 따라 써본다.(강의가 진행될수록 전부를 따라 쓴다는 건 불가능하다는 것을 깨달았다ㅋㅋ) 이 과정에서 추가적으로 궁금한 부분이 있으면 검색해 보고, 한 단계씩 완성할 때마다 크롬 창을 열어 확인한다.(특히 css 작성할 때 점점 완성되는 모습 지져보는 게 너무 재밌음ㅋㅋ) 이런 식으로 공부하면 시간이 오래 걸리더라도 코드를 그냥 읽기만 하는 것보다는 많이 배울 수 있는 거 같다.

 

github push 오류와 함께 개고생 하다가 마무리하는 하루 너무나도 익숙하다ㅋㅋㅋㅋ github 해결하느라 생각보다 늦게까지 남아서 너무 피곤하다. 근데 오늘 글이 유독 내용이 많은 거 같은 느낌..