<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>TurtleHwan.log</title>
        <link>https://velog.io/</link>
        <description>느리더라도 꾸준히 https://turtle-hwan.tistory.com/</description>
        <lastBuildDate>Tue, 03 Oct 2023 15:26:10 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>TurtleHwan.log</title>
            <url>https://velog.velcdn.com/images/turtle-hwan/profile/2888e31b-e887-4f66-8b52-50068b1f9cf1/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. TurtleHwan.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/turtle-hwan" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[4. javascript 심화]]></title>
            <link>https://velog.io/@turtle-hwan/4.-javascript-%EC%8B%AC%ED%99%94-bgmcoazr</link>
            <guid>https://velog.io/@turtle-hwan/4.-javascript-%EC%8B%AC%ED%99%94-bgmcoazr</guid>
            <pubDate>Tue, 03 Oct 2023 15:26:10 GMT</pubDate>
            <description><![CDATA[<ul>
<li>노마드코더 JS 기초 강의 들으며 TODO LIST 만들어 보기!</li>
<li><a href="https://turtle-hwan.github.io/frontend_study/VanilaJS%20prac/">결과물</a></li>
</ul>
<h2 id="html에서-js를-불러오는-법">html에서 js를 불러오는 법</h2>
<ul>
<li><code>&lt;body&gt;가 끝난 후에 &lt;script type=&quot;text/javascript&quot; src=&quot;prac.js&quot;&gt;&lt;/script&gt;</code></li>
<li><code>&lt;body&gt; 이전에 &lt;script async type=&quot;text/javascript&quot; src=&quot;prac.js&quot;&gt;&lt;/script&gt;</code></li>
</ul>
<h2 id="template-literals-with-use-backtick-es6">template literals with use backtick(`) (ES6)</h2>
<ul>
<li>backtick(`) 문자를 사용해서 줄바꿈을 쉽게 할 수 있으며, 수식과 문자열을 한꺼번에 표현 가능(표현식 삽입)하다.</li>
</ul>
<pre><code class="language-jsx">var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and
not ${2 * a + b}.`);
// &quot;Fifteen is 15 and
// not 20.&quot;

//줄바꿈이 자동으로 되며, 수식의 결과를 $로 나타낼 수 있다.</code></pre>
<h2 id="js-dom-functions">JS DOM functions</h2>
<ul>
<li>JS에서도 CSS 처럼 HTML element를 선택하고, 변형할 수 있다.</li>
<li>JS에서 HTML element에 접근하는 방법은 document를 쓰는 것이다.</li>
<li>document.get... 으로 여러 element를 가져올 수 있다.</li>
<li>이 가져온 객체를 DOM (document object module) 이라 부른다.</li>
<li>JS는 모든 HTML element를 가져온 후, DOM객체로 바꿈.<pre><code class="language-jsx">const title = document.getElementById(&quot;title&quot;);
title.innerHTML = &quot;hi!!&quot;
</code></pre>
</li>
</ul>
<p>//<code>.innerHTML</code> 사용으로 HTML 문서에서 작성했던 title을 바꿀 수 있다!!</p>
<pre><code>
## Modifying the DOM with JS
- `console.dir(document)` 로 무엇을 할 수 있는지 확인! (사용 가능한 JS 객체들 확인 가능하다)
- `document.querySelector(&quot;선택자&quot;)` CSS 선택자와 일치하는 노드의 첫 번째 자식 반환.
- `DOM 객체.style.colors = &#39;red&#39;` 이 명령어로 색을 수정 가능!


## Events and event handlers
* JS는 이벤트와 반응하기 위해 만들어짐.

```jsx
function handleResize(event) {
    console.log(event);   //event 객체를 호출함! (timestamp, path 등 포함..)
    console.log(&quot;resized&quot;);
}
window.addEventListener(&quot;resize&quot;, handleResize);
//window.addEventListener(&quot;resize&quot;, handleResize());
//중요! 만약 이렇게 쓰면 함수가 즉시 호출이 되면서 resize 되지 않았는데도 handleResize를 호출함!!!</code></pre><p><a href="https://turtle-hwan.github.io/frontend_study/VanilaJS%20prac/practice/eventListener1/">클릭 시 글자 색 바뀌는 js</a></p>
<h2 id="dom-html-class-in-js">DOM HTML class in JS</h2>
<ul>
<li>JS 파일에서 HTML class 수정하기</li>
<li><code>className</code> : 새 class를 추가하면 기존 class가 삭제되고, 기존 class의 CSS가 적용되지 않는다. (빈 문자열을 할당하면 모든 class 삭제됨.) <ul>
<li><strong>원래 class 전부를 삭제한 후, 변경한다.</strong></li>
<li>다른 class가 사용되지 않을 것이 확실할 때 써야 좋다.</li>
</ul>
</li>
<li><code>classList</code> :  다른 element에 영향을 주지 않고 class를 추가하거나 제거할 수 있다. <ul>
<li><strong>변경되는 부분을 제외한 class의 다른 부분에 영향을 주지 않는다.</strong></li>
<li>toggle, replace 함수를 편리하게 사용 가능.</li>
</ul>
</li>
</ul>
<h2 id="queryselector--local-storage">querySelector &amp; local storage</h2>
<ul>
<li><p><code>querySelector</code> : 찾은 첫 번째 element 가져옴. 없으면 null</p>
</li>
<li><p><code>querySelectorAll</code> : 선택자를 만족하는 모든 element 가져옴 (array 형태)</p>
</li>
<li><p>local storage로 유저의 브라우저에 정보를 저장할 수 있다!</p>
<ul>
<li>local storage에는 key : value 형태로 저장되고, key 값으로 조회 가능하다.</li>
<li>창을 새로고침 하거나 껏다 켜도 저장된 상태가 남아있다.</li>
</ul>
</li>
<li><p>local storage에 자바스크립트의 data(object)를 저장하면 읽을 수 없고, 오직 string만 바로 읽기 가능하다.</p>
<pre><code class="language-js">localStorage.setItem(&quot;toDos&quot;, []);
// [object Object] 로 나온다.</code></pre>
</li>
<li><p>javascript object notation 줄임말 JSON</p>
<ul>
<li>JSON.stringify : JS object를 string으로 바꿔줌.</li>
<li>JSON.parse : string을 object로 바꿔줌.</li>
</ul>
</li>
</ul>
<h2 id="event">event</h2>
<ul>
<li><p>event의 default 동작</p>
<ul>
<li>보통 event가 발생하면 root, form에서 일어남.</li>
<li>다른 모든 것들이 event에 반응함.</li>
<li>form submit (엔터로) → 이를 감지해서 event를 보내고 새로고침</li>
<li>form에서 submit event 발생하면 이 event는 document까지 계속 올라간다.</li>
</ul>
</li>
<li><p><strong>event.preventDefault</strong> (event의 기본 동작을 막음 ⇒ input에 적은 text가 사라지지 않음)</p>
<ul>
<li>이후 input.placeholder, input.value 로 값을 받아올 수 있음.</li>
</ul>
</li>
<li><p>event.target (이벤트가 일어난 타겟의 html 반환)</p>
<ul>
<li>console.dir(event.target)으로 dom 반환해서 원하는 명령어 찾아볼 수 있다.</li>
<li>→ 부모를 찾는 것 .parentNode ⇒ event.target.parentNode 로 부모 반환</li>
</ul>
</li>
</ul>
<h2 id="스크립트의-로딩">스크립트의 로딩</h2>
<ul>
<li>JS가 조작 대상인 HTML보다 먼저 실행된다면 조작할 요소가 존재하지 않는 상태이기 때문에 제대로 동작하지 않는다.</li>
</ul>
<h3 id="body가-해석되기-전에-script가-로드-및-실행되면-동작하지-않는-문제의-해결-방법">body가 해석되기 전에 script가 로드 및 실행되면 동작하지 않는 문제의 해결 방법</h3>
<ol>
<li><p>&quot;DOMContentLoaded&quot; 이벤트는 브라우저가 완전히 로드 및 해석될 때 발생함.</p>
<pre><code class="language-jsx"> document.addEventListener(&quot;DOMContentLoaded&quot;, function() {
   ...
 });</code></pre>
</li>
<li><p>async을 사용하면 비동기 방식으로 <code>&lt;script&gt;</code> 태그에 도달해도 브라우저가 HTML 요소를 멈추지 않고 계속 다운받음. </p>
<pre><code class="language-jsx"> &lt;script src=&quot;script.js&quot; async&gt;&lt;/script&gt;</code></pre>
</li>
</ol>
<ul>
<li>즉 script와 HTML이 동시 로드 및 작동함.</li>
<li>단, async 속성은 <strong>외부 스크립트인 경우만 동작함</strong>.</li>
</ul>
<ol start="3">
<li>async &amp; defer 차이<pre><code class="language-jsx"> &lt;script async src=&quot;js/vendor/jquery.js&quot;&gt;&lt;/script&gt;
 &lt;script async src=&quot;js/script2.js&quot;&gt;&lt;/script&gt;
 &lt;script async src=&quot;js/script3.js&quot;&gt;&lt;/script&gt;</code></pre>
</li>
</ol>
<ul>
<li><p>async은 나머지 페이지가 나타나는 동안 스크립트들이 비동기 방식으로 다운되며 중단되지 않는다는 것만 보장한다. 스크립트의 다운이 끝나자마자 이를 실행.</p>
</li>
<li><p><strong>구체적인 실행 순서는 보장하지 않는다</strong>.</p>
<pre><code class="language-jsx">  &lt;script defer src=&quot;js/vendor/jquery.js&quot;&gt;&lt;/script&gt;
  &lt;script defer src=&quot;js/script2.js&quot;&gt;&lt;/script&gt;
  &lt;script defer src=&quot;js/script3.js&quot;&gt;&lt;/script&gt;</code></pre>
</li>
<li><p>defer는 다운로드 한 후 모든 스크립트와 내용이 다운되었을 때 실행되며, <strong>순서가 보장</strong>된다. (jquery → script2 → script3)</p>
</li>
</ul>
<h2 id="연산자-과-의-차이">연산자, ==과 ===의 차이</h2>
<h3 id="equality-operator">Equality operator</h3>
<ul>
<li>추상(동등) 비교 ⇒ 비교 전에 두 피연산자를 동일한 자료형으로 바꿈.
<code>==</code> <code>!=</code> </li>
</ul>
<h3 id="identity-operator">Identity operator</h3>
<ul>
<li><p>엄격(일치) 비교 ⇒ 두 피연산자가 다른 자료형이면 false 반환
<code>===</code> <code>!==</code> </p>
</li>
<li><p>==은 강제로 자료형을 변환시키기 때문에 의도치 않은 결과가 발생할 수 있어 조심해야 한다.</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[3. javascript 기초 학습
]]></title>
            <link>https://velog.io/@turtle-hwan/3.-javascript-%EA%B8%B0%EC%B4%88-%ED%95%99%EC%8A%B5</link>
            <guid>https://velog.io/@turtle-hwan/3.-javascript-%EA%B8%B0%EC%B4%88-%ED%95%99%EC%8A%B5</guid>
            <pubDate>Mon, 25 Sep 2023 08:06:45 GMT</pubDate>
            <description><![CDATA[<h1 id="javascript-기초-학습">javascript 기초 학습</h1>
<h2 id="학습-목표">학습 목표</h2>
<ul>
<li><p><input disabled="" type="checkbox">  JS 이해 : JS에서 변수 선언법 및 조건문, 반복문을 이해하고 사용할 수 있다.</p>
</li>
<li><p><input disabled="" type="checkbox">  JS 이해 : JS에서 논리연산자를 이해하고 사용할 수 있다.</p>
</li>
<li><p><input disabled="" type="checkbox">  JS 이해 : JS에서 함수를 이해하고, 함수 표현식과 화살표 함수를 사용할 수 있다.</p>
</li>
<li><p><input disabled="" type="checkbox">  JS 이해 : 객체와 배열에 대해 이해하고 사용할 수 있다.</p>
</li>
<li><p><input disabled="" type="checkbox">  JS 이해 : 필수 문제들을 풀어보며 JS문법을 익힐 수 있다.</p>
</li>
<li><p><input disabled="" type="checkbox">  JS 심화 : 콜백 함수의 개념과 (addEventListener), map, filter, reduce 개념을 알 수 있다.</p>
</li>
<li><p><a href="https://paullab.co.kr/codefestival.html">문제</a> 선별 &lt;37개&gt; / 최소 12문제</p>
<ul>
<li>chap 1) 1, 2, 3, <strong>4, 5, 6</strong>, 7, 9, &lt;8개&gt;</li>
<li>chap 2) <strong>11</strong>, 13, 14, 15, 16, <strong>17</strong>, 18, 19, 20 &lt;9개&gt;</li>
<li>chap 3) 21, <strong>22</strong>, 23, 24, <strong>25</strong>, 26, 27, 28, 29, 30 &lt;10개&gt;</li>
<li>chap 4) 32, <strong>33,  36</strong>, 37, 38, 39, <strong>40</strong> &lt;7개&gt;</li>
<li>chap 5) 44, <strong>45, 49</strong> &lt;3개&gt;</li>
</ul>
</li>
<li><p>스터디 시 발표 부분</p>
<ul>
<li>변수, 변수 선언 키워드 &amp; 대화상자</li>
<li>변수 type - primitive</li>
<li>변수 type - reference</li>
<li>함수</li>
<li>제어문 (조건문, 반복문)</li>
<li>(콜백함수, map, filter, reduce)</li>
</ul>
</li>
</ul>
<h2 id="js-변수-문법-및-자료형">JS 변수, 문법 및 자료형</h2>
<h3 id="js-변수">JS 변수</h3>
<ul>
<li><p>예전에는 <code>var</code>을 썼으나, 현재엔 <code>let</code>, <code>const</code>을 쓴다.</p>
</li>
<li><p>var : var로 선언한 변수는 블록 기준으로 스코프가 생기지 않아서, 블록 밖에서 접근 가능하다.</p>
<pre><code class="language-js">if (true) {
  var test = true;
}

alert(test); // true(if 문이 끝났어도 변수에 여전히 접근)</code></pre>
<pre><code class="language-js">for (var i = 0; i &lt; 10; i++) {
  // ...
}

alert(i); // 10, 반복문이 종료되었지만 &#39;i&#39;에 접근 가능.</code></pre>
<ul>
<li><p>코드 블록이 함수 블록 안에 있으면 var는 함수 레벨 변수가 된다.</p>
<pre><code class="language-js">function sayHi() {
  if (true) {
    var phrase = &quot;Hello&quot;;
  }

  alert(phrase); // 제대로 출력됩니다.
}

sayHi();
alert(phrase); // Error: phrase is not defined</code></pre>
</li>
<li><p>var는 if, for 등의 코드 블록을 관통하는데, 옛날 js에서 블록 수준 <a href="https://developer-alle.tistory.com/407">렉시컬 환경</a>(Lexical Environment)이 없었기 때문이다.</p>
</li>
<li><p>var는 동일 이름 변수 중복 선언이 된다.. 하지만 두 번째 선언문은 무시된다.</p>
</li>
<li><p>var는 호이스팅(선언 전 사용 가능)이 된다. </p>
<ul>
<li>var 선언은 위치에 관계없이 함수의 시작 시 처리되고, 만약 전역 변수라면 스크립트 시작 시 처리되어 실제 선언문 위치와 관계없이 사용 가능하다.</li>
<li>단, 할당은 할당문에서 할당이 된다.</li>
<li>let, const도 호이스팅이 되지만 <a href="https://ui.toast.com/weekly-pick/ko_20191014">TDZ에 의해</a> 오류 메세지가 나오게 된다.</li>
</ul>
</li>
</ul>
</li>
<li><p>let : 추후 변경 가능한 일반적인 변수 선언법이다.</p>
<ul>
<li>C, JAVA의 변수와 비슷.</li>
</ul>
</li>
<li><p>const : 추후 변경 불가능한 상수 선언이다. 변경 시도 시 에러를 보여준다.</p>
</li>
</ul>
<h3 id="js-문법-및-자료형"><a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Grammar_and_types">JS 문법 및 자료형</a></h3>
<ul>
<li><p>명령문이 한 줄을 다 차지할 경우는 세미콜론이 필요하지 않다. 한 줄에 두 개 이상 명령문을 쓴다면 세미콜론이 필요하다.</p>
</li>
<li><p>초기값 없이 선언만 된 변수는 <code>undefined</code> 값을 가진다.</p>
<ul>
<li><code>undefined</code>는 boolen context에서 사용될 때 <code>false</code>로 동작한다.</li>
<li><code>undefined</code>는 number context에서 사용될 때 <code>NaN</code>으로 변환된다.</li>
<li><code>null</code> 값은 number context 에서 <code>0</code>으로, boolen context에서 <code>false</code>로 동작한다.</li>
</ul>
</li>
<li><p>JS의 자료형은 8가지이다. 7가지 primitive 자료형 + Object</p>
</li>
</ul>
<ol>
<li>Boolean : <code>true</code>, <code>false</code></li>
<li>null : <code>null</code>, null값 나타내는 키워드 (JS는 대소문자를 구분하므로, Null이나 NULL과는 다르다!)</li>
<li>undefined : 값이 정의되어 있지 않은 최상위 속성</li>
<li>Number : 정수 or 실수형 숫자</li>
<li>BigInt : 임의 정밀도의 정수</li>
<li>String : 문자열</li>
<li>Symbol : (ECMAScript 2015에 도입) 인스턴스가 고유하고 불변인 자료형</li>
</ol>
<ul>
<li><a href="https://developer.mozilla.org/ko/docs/Glossary/Object">Object</a> : object는 속성의 모음이다.<ul>
<li>JSON(JavaScript Object Notation)이라는 데이터 표현 방식이 있다. (중괄호와 key, value 값)</li>
</ul>
</li>
</ul>
<h2 id="js-대화상자">JS 대화상자</h2>
<ul>
<li><p>prompt</p>
</li>
<li><p>alert</p>
</li>
<li><p>confirm</p>
</li>
<li><p><a href="https://getbootstrap.kr/docs/5.0/components/modal/">모달 창 (Modal)</a></p>
<pre><code class="language-js">&lt;!-- Button trigger modal --&gt;
&lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot; data-bs-toggle=&quot;modal&quot; data-bs-target=&quot;#exampleModal&quot;&gt;
Launch demo modal
&lt;/button&gt;
</code></pre>
</li>
</ul>
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>
```

<h2 id="js-함수">JS 함수</h2>
<pre><code class="language-js">function abc(n) {
  실행 구문
}

abc (dd);</code></pre>
<h2 id="js-제어문-조건문-반복문">JS 제어문 (조건문, 반복문)</h2>
<ul>
<li>조건문 : if</li>
<li>반복문 : while, for</li>
</ul>
<h2 id="콜백함수"><a href="https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%BD%9C%EB%B0%B1-%ED%95%A8%EC%88%98">콜백함수</a></h2>
<ul>
<li><p>콜백 함수 : 매개변수로 함수 자체를 전달하는 것.</p>
</li>
<li><p>이벤트 리스너로 많이 사용된다.</p>
<pre><code class="language-js">let button = document.getElementById(&quot;button&quot;); // 버튼 요소를 선택
</code></pre>
</li>
</ul>
<p>// 버튼에 클릭 이벤트 리스너를 추가
button.addEventListener(&quot;click&quot;, function () { // 콜백 함수
  console.log(&quot;Button clicked!&quot;); 
});</p>
<pre><code>
## [map, filter, reduce](https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EB%B0%B0%EC%97%B4-%EA%B3%A0%EC%B0%A8%ED%95%A8%EC%88%98-%EC%B4%9D%EC%A0%95%EB%A6%AC-%F0%9F%92%AF-mapfilterfindreducesortsomeevery)
* 고차 함수 : 함수를 파라미터로 받거나 함수를 return 해주는 함수.
함수형 프로그래밍 방식

* JS에서는 특히 배열(object)를 잘 다룰 수 있는 편리한 고차 함수들을 제공한다.


* map() : 콜백함수에서의 실행결과를 리턴한 값으로 이루어진 배열을 만들어 반환
```js
const numberArr = [1, 2, 3, 4, 5];
const numberMapArr = numberArr.map((item) =&gt; {
  if (item % 2 === 0)
    return &#39;even&#39;;
  else
    return &#39;odd&#39;;
    // 연산한 결과값을 넣어 배열 반환
});

console.log(numberMapArr); // [&#39;odd&#39;, &#39;even&#39;, &#39;odd&#39;, &#39;even&#39;, &#39;odd&#39;]</code></pre><ul>
<li>filter() : 주어진 배열을 순회하면서 콜백 함수의 반환값이 true에 해당하는 요소로만 구성된 새로운 배열을 생성하여 반환.
find() + map()<pre><code class="language-js">const numberArr = [1, 2, 3, 4, 5];
</code></pre>
</li>
</ul>
<p>const numberFilterArr = numberArr.filter((item) =&gt; {
    return item % 2 === 0; // 해당조건에 부합으면 item을 넣어 배열 반환
});</p>
<p>console.log(numberFilterArr); // [2, 4]</p>
<p>```</p>
<ul>
<li>reduce() : 
forEach, map, filter 가능 모두 구현 가능.</li>
</ul>
<h2 id="js-문제풀이">JS 문제풀이</h2>
<ol start="4">
<li><p><code>2) typeof(2.22)</code> float 형이기 때문에 출력이 number로 나온다.</p>
</li>
<li><pre><code class="language-js"> var a = 10;
 var b = 2;

 for(var i=1; i&lt;5; i+=2){
     a += i;
 }

 console.log(a+b);</code></pre>
<p> i가 1, 3 일때 더해지므로 a + b = 10 + 1 + 3 + 2 = 16 <code>4)</code></p>
</li>
<li><p><code>2)</code> null, undefined, 0, 빈 문자열, NaN, false 제외하고 모두 참인 값.</p>
</li>
<li><pre><code class="language-js">let s = 0;

for (let i = 1; i &lt;= 100; i++) {
  s += i;
}

console.log(s);</code></pre>
</li>
<li><p>키 주어졌을때, 150 넘으면 yes, 미만이면 no</p>
<pre><code class="language-js">const height = prompt(&quot;키를 입력하세요.&quot;);

if (height &gt;= 150) {
 console.log(&quot;YES&quot;);
} 
else {
 console.log(&quot;NO&quot;);
}</code></pre>
</li>
<li><p>나머지가 0인 것을 나타내야 하므로, <code>2)</code>번이다.</p>
</li>
<li><pre><code class="language-js">function circle(n) {
  let space = n * n * 3.14;
  console.log(space);
}

let input = prompt(&quot;반지름 입력&quot;);
circle(input);</code></pre>
</li>
<li><pre><code class="language-js">prompt()</code></pre>
</li>
<li></li>
<li></li>
<li></li>
<li></li>
</ol>
<h2 id="참고-사이트">참고 사이트</h2>
<p><a href="https://ko.javascript.info/first-steps">javascript info</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2. CSS 기초학습]]></title>
            <link>https://velog.io/@turtle-hwan/2.-CSS-%EA%B8%B0%EC%B4%88%ED%95%99%EC%8A%B5</link>
            <guid>https://velog.io/@turtle-hwan/2.-CSS-%EA%B8%B0%EC%B4%88%ED%95%99%EC%8A%B5</guid>
            <pubDate>Mon, 18 Sep 2023 08:35:17 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>&lt;학습 목표&gt;<br>CSS 이해 : CSS 파일을 사용하는 이유와 HTML에서 CSS 파일을 불러오는 방법에 대해 설명할 수 있다.<br>CSS 이해 : CSS 파일내에서 원하는 HTML 태그를 선택하는 방법 (4번 영상)(id, class로 선택하는 방법 등)에 대해 설명할 수 있다.<br>CSS 이해 : CSS에서 원하는 태그를 선택한 후, 해당 태그에 원하는 속성을 부여할 수 있다.<br>CSS 이해 : margin, border, padding 의 차이에 대해 이해하고 설명할 수 있다.<br>CSS 이해 : flex 속성을 이해하고 여러 태그를 화면 상의 원하는 위치에 배치할 수 있다.<br>CSS 심화 : media query에 대해 이해하고, 특정 조건에 반응하는 속성을 줄 수 있다.<br>CSS 심화 : transition, animation 등 실시간 화면 움직임에 대한 속성을 이해하고, 설명할 수 있다.<br>추가 학습 : github profile md 꾸미기 / figma 알아보기</p>
</blockquote>
<hr>
<h2 id="css-개념-및-사용법">CSS 개념 및 사용법</h2>
<h3 id="css-개념">CSS 개념</h3>
<p>CSS : Cascading Style Sheet<br>HTML로 만든 기본 구조 위에 색, 배치 방법, 위치, 모양 등 다양한 디자인을 가능하게 한다.</p>
<ul>
<li>bootstrap 처럼 잘 만들어진 CSS 테마를 여러 곳에 적용할 수 있다.</li>
<li>문서 내용과 관계없이 디자인 바꾸기 가능.</li>
<li>여러 상황에 맞는 디자인 가능 - 반응형 디자인</li>
</ul>
<p>cascading은 폭포처럼 떨어져 내린다는 뜻인데, html 문서의 DDM(document object model) tree 구조에서, 디자인 속성을 한 요소(element)에 적용하면 그 하위 요소로 전달 및 적용되는 특성을 갖고 있다는 의미이다.</p>
<ul>
<li>상위 요소에 적용된 디자인 속성은 하위 요소에서 상속받는다. (동일하게 적용된다.)</li>
<li>하위 요소에서 상속받은 속성을 변경 가능하다.<pre><code class="language-html">&lt;!-- body 태그 안에 있는 모든 태그 요소들은 빨간색 글자로 표시됨 --&gt;
&lt;body style=&quot;font-color:red&quot;&gt;
  &lt;h1&gt;Hello&lt;/h1&gt;
&lt;/body&gt;</code></pre>
</li>
</ul>
<h3 id="사용법-css-적용-방법">사용법, CSS 적용 방법</h3>
<ol>
<li><p>내부 스타일시트<br><code>&lt;head&gt;&lt;/head&gt;</code> 사이에 <code>&lt;style&gt;&lt;/style&gt;</code> 부분에 css를 바로 삽입 가능하다.<br>단, CSS의 재사용이 안되므로 외부 스타일시트에 작성하는 것이 좋다.</p>
</li>
<li><p>외부 스타일시트<br>별도의 .css 파일에 작성 후, 이를 html에서 불러오는 방식.<br>css는 외부 서버에서 불러오는 것도 가능.  </p>
<pre><code class="language-html">&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;mystyle.css&quot;&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;http://cdn.site.com/css/mystyle.css&quot;&gt;</code></pre>
</li>
<li><p>인라인 스타일<br>html 태그 내에 필요한 속성을 바로 집어넣는 방식.<br>빠르게 개발하거나 그때 그때 필요할 때는 편하지만, 유지 보수나 큰 프로젝트의 경우 좋은 방법은 아니다.  </p>
<pre><code class="language-html">&lt;h1 style=&quot;color:blue; margin-left:30px;&quot;&gt;This is a heading&lt;/h1&gt;</code></pre>
<p>동일한 속성값이 외부 스타일, 내부 스타일, 인라인 스타일로 적용되어 있는 경우, 우선순위는 가장 나중에 정의되는 스타일이 가져간다.<br>따라서 인라인 스타일의 우선순위가 가장 높고, 외부와 내부 스타일 시트는 문서 상 정의된 순서에 따라 우선순위가 결정된다.<br>웹 브라우저 자체에서도 html element에 대한 자체적 css 혹은 사용자 정의 css를 가질 수 있다.<br>일반적인 우선순위 : <code>브라우저 디자인 정의 -&gt; 외부 스타일시트 -&gt; 내부 스타일시트 -&gt; 인라인 스타일시트</code></p>
</li>
</ol>
<h2 id="css-기본-문법--선택자selector">CSS 기본 문법 : 선택자(selector)</h2>
<p>선택자 : 스타일을 지정할 HTML 요소를 가리키는 것
선언부 : 특정 CSS 속성 이름과, 지정하고 싶은 값을 표현하는 곳</p>
<pre><code class="language-css">선택자 {선언부}

h1 {color: green; font-size: 10px}</code></pre>
<ul>
<li>CSS는 선택자(selector) + 선언부(declaration)</li>
<li>선택자로 원하는 HTML 요소만 잘 골라내야 하므로, 잘 정의해서 써야 한다.</li>
<li>주석은 <code>/* */</code></li>
</ul>
<h3 id="셀렉터">셀렉터</h3>
<table>
<thead>
<tr>
<th>선택자(selector)</th>
<th>예시</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>.class</td>
<td>.intro</td>
<td>html 태그에서 class=”intro”로 된 모든 태그 영역 선택</td>
</tr>
<tr>
<td>#id</td>
<td>#banner</td>
<td>html 태그에서 id=”banner”로 된 태그 영역 선택</td>
</tr>
<tr>
<td>*</td>
<td>*</td>
<td>문서내 모든 요소를 선택</td>
</tr>
<tr>
<td>태그</td>
<td>p</td>
<td>문서내 모든 <code>&lt;p&gt;</code> 태그 영역 선택</td>
</tr>
<tr>
<td>태그, 태그</td>
<td>div, p</td>
<td>모든 <code>&lt;div&gt;</code> 와 <code>&lt;p&gt;</code> 태그 영역 선택</td>
</tr>
<tr>
<td>태그 태그</td>
<td>div p</td>
<td><code>&lt;div&gt;</code> 태그 안에 있는 모든 <code>&lt;p&gt;</code> 태그 영역 선택</td>
</tr>
</tbody></table>
<h3 id="기본-셀렉터">기본 셀렉터</h3>
<ol>
<li>태그 셀렉터 : 문서 내 모든 태그 선택, 다중 선택 가능<pre><code class="language-css">p {
text-align: center;
color: red;
}
</code></pre>
</li>
</ol>
<p>h1,h2,h3,h4 { color: blue; }</p>
<pre><code>특정 속성을 가진 태그만 선택 가능
```css
input[type=text] {
  background-color: blue;
  color: white;
}</code></pre><ol start="2">
<li>id 셀렉터 : 해당 id 선택, id는 페이지 내 유일한 값이므로 고유 요소 선택에 활용<pre><code class="language-css">#id_name { color: blue; }
</code></pre>
</li>
</ol>
<hr>
<div id="id_name">
...
</div>
```

<ol start="3">
<li>class 셀렉터 : 특정 class들을 전부 선택할 때 사용. 태그와 클래스 결합 가능<pre><code class="language-css">.class_name1 { color: blue; }
p.class_name2 { color: red; }
</code></pre>
</li>
</ol>
<p>h1.header { color: blue;}
h2.header { color: green;}</p>
<hr>
<div class="class_name1">
...
</div>
```

<h2 id="css-속성-부여">CSS 속성 부여</h2>
<ol>
<li>텍스트 속성</li>
</ol>
<ul>
<li>color: 글자색 지정   </li>
<li>text-align: 주어진 영역에서 글자의 정렬 방식 지정(left/right/center)  </li>
<li>text-align: justify 의 경우 양쪽 정렬  </li>
</ul>
<ol start="2">
<li>폰트 속성</li>
</ol>
<ul>
<li><p>폰트 설정의 경우 컴퓨터에 폰트가 설치되어 있어야 하며 설치된 폰트와 상관없이 폰트 적용을 위해서는 구글 등에서 제공하는 web font 라는 것을 사용해야 함.</p>
</li>
<li><p>font-family : 폰트 이름과 유형을 지정하는 속성. 영문을 기준으로 폰트의 유형은 세가지로 구분.</p>
<ul>
<li>Serif: 바탕체 계열의 폰트. Times New Roman, Georgia</li>
<li>Sans-serif: 굴림 계열의 폰트. Arial, Verdana</li>
<li>Monospace: 고정폭 폰트. Courier New, Lucida Console<pre><code class="language-css">h1 {
  font-family: &quot;Times New Roman&quot;, verdana, arial;
}</code></pre>
</li>
<li>폰트 이름이 두 단어 이상인 경우 반드시 &quot; &quot;로 감싸야 하며, 나열된 순서로 폰트가 적용됨.</li>
<li>마지막에는 <code>fall back font</code>라는 지정된 폰트가 없을 때 사용하는 기본 폰트를 지정해야 하는데, 이름 보다는 폰트 유형을 지정하는 것이 좋다.</li>
</ul>
</li>
<li><p>font-style : 폰트의 스타일을 지정하는 속성. normal, italic, oblique가 있다. oblique 는 italic 과 유사하며 잘 사용되지 않는다.</p>
<pre><code class="language-css">.text1 { font-style: normal}
.text2 { font-style: italic}</code></pre>
</li>
<li><p>font-size : 폰트 크기를 지정 속성. px, %, rem, em 등 여러 단위로 사용가능.</p>
<pre><code class="language-css">.text1 { font-size: 10px}
.text2 { font-size: 2em}</code></pre>
</li>
<li><p>font-weight : 폰트의 두께 지정 속성. normal, bold, bolder 등 사용 가능.</p>
<pre><code class="language-css">.text1 { font-weight: normal}
.text2 { font-weight: bold}</code></pre>
</li>
<li><p>font-variant : 폰트의 변형 지정 속성. normal, small-caps등 사용 가능. small-caps 는 소문자 크기를 유지하며 대문자로 변형해 주는 속성.</p>
</li>
</ul>
<ol start="3">
<li>정렬 속성</li>
</ol>
<ul>
<li>text-align: 요소내 텍스트의 정렬</li>
<li>vertical-align: 인라인 혹은 테이블 셀에서 수직 정렬</li>
</ul>
<ol start="4">
<li>링크 속성<blockquote>
<p><code>&lt;a&gt;&lt;/a&gt;</code>에 적용되는 가상 셀렉터들</p>
</blockquote>
</li>
</ol>
<ul>
<li>a:link - 방문한적 없는 기본 링크</li>
<li>a:visited - 방문한 링크</li>
<li>a:hover - 마우스가 링크위에 올라갔을 때</li>
<li>a:active - 링크를 클릭 했을 때<pre><code class="language-css">a:link {
color: red;
text-decoration: none;
}
</code></pre>
</li>
</ul>
<p>a:visited {
  color: blue;
  text-decoration: none;
}</p>
<p>a:hover {
  color: hotpink;
  text-decoration: underline;
}</p>
<p>a:active {
  background-color: blue;
  text-decoration: underline;
}</p>
<pre><code>
5. 컬러 속성
* CSS에서 Color속성은 색상이름, HEX(#)코드, rgb, hsl로 나타낼 수 있다.
* hsl 은 Hue(색조), Saturation(채도), Lightness(밝기) 의 조합이다.
* 색상에 투명도(alpha)를 적용시킬 때는 rgba, hsla를 사용하며, 0.0(완전투명)~1.0(완전불투명) 사이의 숫자로 나타낸다.
  ```css
  #text1 { color: red; }
  #text2 { color: #FF0000; }
  #text3 { color: rgb(255, 0, 0); }
  #text4 { color: rgba(255, 99, 71, 0.5) }
  #text5 { color: hsla(9,100%, 64%, 0.5) }</code></pre><ol start="6">
<li>배경 속성</li>
</ol>
<ul>
<li>background-color: 글자색 지정</li>
<li>background-image: 배경이미지 지정, 상대경로, 절대경로, url 사용가능</li>
<li>background-repeat: 이미지 반복</li>
<li>background-position: 이미지의 위치를 지정</li>
<li>background-attachment: 이미지의 스크롤이나 고정을 지정함</li>
</ul>
<h2 id="css-단위">CSS 단위</h2>
<h3 id="절대단위">절대단위</h3>
<table>
<thead>
<tr>
<th>단위</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>cm</td>
<td>centimeter</td>
</tr>
<tr>
<td>mm</td>
<td>millimeter</td>
</tr>
<tr>
<td>in</td>
<td>inch (1in = 2.54cm)</td>
</tr>
<tr>
<td>px</td>
<td>픽셀, pixel</td>
</tr>
<tr>
<td>pt</td>
<td>포인트, point (1pt = 1/72 inch)</td>
</tr>
</tbody></table>
<h3 id="상대단위-반응형-웹-구현-시-필수">상대단위 (반응형 웹 구현 시 필수)</h3>
<table>
<thead>
<tr>
<th>단위</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>em</td>
<td>부모 요소의 글꼴에 비례. (2em은 현재 글꼴 크기의 2배를 의미.)</td>
</tr>
<tr>
<td>ex</td>
<td>현재 글꼴의 x 높이에 비례. (거의 사용되지 않음)</td>
</tr>
<tr>
<td>rem</td>
<td>루트 요소(<html>)의 글꼴 크기에 비례.</td>
</tr>
<tr>
<td>vw</td>
<td>뷰포트 너비의 1%에 비례.</td>
</tr>
<tr>
<td>vh</td>
<td>뷰포트 높이의 1%에 비례.</td>
</tr>
<tr>
<td>vmin</td>
<td>뷰포트의 너비와 높이 중 더 작은 치수 1%에 비례.</td>
</tr>
<tr>
<td>vmax</td>
<td>뷰포트의 너비와 높이 중 더 큰 치수 1%에 비례.</td>
</tr>
<tr>
<td>%</td>
<td>퍼센트, 100% 를 기준으로 하는 상대 크기</td>
</tr>
</tbody></table>
<ul>
<li>em : 부모요소의 기본 크기를 1em 으로 상대적인 크기를 지정.</li>
<li>rem : rem에서 r은 루트(root)를 뜻하며, 부모가 아닌 최상위 root를 기준으로 하기 때문에 중간에 기본값이 바뀌지 않음.</li>
<li>앞에 v가 붙은 단위는 <code>뷰포트(viewport)</code> 의미로, 웹페이지가 사용자에게 보여지는 영역을 뜻한다.</li>
</ul>
<h2 id="css-배치-방법--margin-border-padding">CSS 배치 방법 : margin, border, padding</h2>
<p><img src="https://velog.velcdn.com/images/turtle-hwan/post/876490ce-a8ec-420a-8023-f170833a49b5/image.png" alt=""></p>
<ul>
<li><p>Contents box - 콘텐츠 영역으로 텍스트 및 이미지의 실제 영역.</p>
</li>
<li><p>Padding box - 테두리와 콘텐츠 사이의 안쪽 여백.</p>
</li>
<li><p>Border box - 박스를 둘러싼 테두리(경계) 영역.</p>
</li>
<li><p>Margin box - 박스 외부 영역으로 박스가 가지는 여백 공간</p>
</li>
<li><p>박스요소에 크기를 지정하면 기본적으로 콘텐츠 영역에 적용된다.</p>
</li>
<li><p>전체 박스 크기는 border, margin, padding 에 콘텐츠 영역 크기를 더해야 한다.</p>
</li>
<li><p><code>box-sizing</code>속성은 기본이 <code>content-box</code>지만, <code>boder-box</code>로 바꾸면 <code>border</code> 기준 크기 계산이 가능하다.</p>
</li>
</ul>
<h2 id="css-레이아웃--flex">CSS 레이아웃 / flex</h2>
<h3 id="css-레이아웃">CSS 레이아웃</h3>
<ul>
<li>박스들의 배치 방법을 결정하는 <code>position</code> 속성.</li>
<li>나란한 박스 콘텐츠 지정을 위한 <code>float</code>, <code>display</code> 속성.</li>
</ul>
<ol>
<li>grid
<code>display : grid</code> 속성을 주면, 그 안의 content 들을 행, 열로 나누어 표시할 수 있다.
<img src="https://velog.velcdn.com/images/turtle-hwan/post/d0fcf042-0bc9-4003-93af-a647d7630ce0/image.png" alt=""></li>
</ol>
<ol start="2">
<li>container
div를 중첩해서 직접 원하는 모습을 구현하는 방식<pre><code class="language-html">&lt;div class=&quot;container&quot;&gt;
&lt;div class=&quot;header&quot;&gt;
&lt;/div&gt;
 &lt;div class=&quot;contents&quot;&gt;
   &lt;div class=&quot;box&quot;&gt;&lt;/div&gt;
   &lt;div class=&quot;box&quot;&gt;&lt;/div&gt;
   &lt;div class=&quot;box&quot;&gt;&lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;footer&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;</code></pre>
</li>
</ol>
<ul>
<li>container class는 header, contents, footer 를 가지는 컨테이너</li>
<li>contents class는 box 클래스 요소를 가지는 컨테이너</li>
</ul>
<ol start="3">
<li><p>position<br> 1) static  </p>
<ul>
<li><p>position 속성의 기본값. 요소를 나열한 순서대로 배치.</p>
</li>
<li><p>원하는 위치에 콘텐츠를 배치할 방법 없음.</p>
</li>
<li><p>콘텐츠를 왼쪽에서 오른쪽으로 추가하다가, 오른쪽에 공간이 없을 경우 다음 줄로 넘겨서 순서대로 배치한다.</p>
<p>2) relative</p>
</li>
<li><p>static과 같이 나열한 순서대로 배치되지만 top, right, bottom, left 속성을 사용해 원하는 위치를 지정할 수 있다.</p>
</li>
<li><p>이때 좌표값은 static 기준으로 위치한 곳이 (0px, 0px)이 된다.</p>
</li>
<li><p>지정한 속성에 따라 상/하/좌/우 원하는 자리에 배치하는 것이 가능 하다.</p>
<p>3) absolute</p>
</li>
<li><p>top, right, bottom, left 속성값을 이용해 요소를 원하는 위치에 배치할 수 있다.</p>
</li>
<li><p>기준 위치는 position 속성이 relative인 요소 중 가장 가까운 상위 요소.</p>
<p>4) fixed</p>
</li>
<li><p>전체 브라우저 창 기준으로 좌표를 고정해서 표시.</p>
<p>5) sticky</p>
</li>
<li><p>현재 브라우저에 보여지는 화면 기준으로 좌표를 고정해서 표시.</p>
</li>
<li><p>스크롤 하더라도 같은 위치에 계속 고정되어 있는다.</p>
<p>5) z-index</p>
</li>
<li><p>겹치는 박스들의 수직 위치를 조정하기 위한 속성.</p>
</li>
<li><p>z-index 값이 높을수록 위, 작을수록 아래에 배치되며 -인 경우 기준 콘텐츠의 아래쪽을 의미.</p>
</li>
<li><p>position 속성이 적용된 경우에만 의미가 있음.</p>
</li>
</ul>
</li>
<li><p>float</p>
</li>
</ol>
<ul>
<li><code>float</code>로 좌, 우측부터 정렬되도록 배열 가능하다.</li>
<li><code>clear</code>로 float 속성 무효화 가능하다.</li>
</ul>
<ol start="5">
<li>display 속성</li>
</ol>
<ul>
<li>none : 보이지 않음 , visibility:hidden 속성과 유사하나 영역 자체가 없어짐.</li>
<li>block : 블록 박스</li>
<li>inline : 인라인 박스</li>
<li>inline-block : block과 inline의 중간 형태</li>
</ul>
<p><code>block</code>은 <code>width=100%</code>로 한 줄을 차지하므로 다른 콘텐츠와 나란히 배치 불가능한 반면, <code>inline</code>은 나란히 배치 가능하다.</p>
<h3 id="이미지-가운데-정렬">이미지 가운데 정렬</h3>
<ul>
<li>방법1: 부모 요소의 속성에 text-align:center 를 사용.</li>
<li>방법2: img 태그만 사용한다면 블럭 속성으로 변경한 다음 margin:auto 적용<pre><code class="language-css">// 방법1
div {
text-align:center;
}
</code></pre>
</li>
</ul>
<p>// 방법2
img {
  display: block;
  margin: auto;
}</p>
<p>...</p>
<div>
   <img src="a.jpg">
</div>
```

<h3 id="flex">flex</h3>
<pre><code class="language-css">.container {
    display: flex;
    /* display: inline-flex; */
}</code></pre>
<ul>
<li><p>flex 컨테이너 내부 item들은 기본이 가로 방향으로 배치되고, 각자 자신의 width만큼 차지한다.</p>
</li>
<li><p>height는 컨테이너 높이만큼으로 맞춰진다.</p>
<ul>
<li><code>flex-direction</code> : 가로, 세로 방향 배치를 결정할 수 있다.</li>
<li><code>flex-wrap</code> : 넘치는 컨텐츠를 줄바꿈 해줄 수 있다.</li>
<li><code>justify-content</code> : 좌우 정렬 축을 지정할 수 있다.</li>
<li><code>align-items</code> : 한 행의 상하 정렬 축을 지정할 수 있다. </li>
<li><code>align-content</code> : 여러 행일 때 상하 정렬 축을 지정할 수 있다.</li>
</ul>
</li>
<li><p><code>flex</code> : <code>flex-grow</code>, <code>flex-shrink</code>, <code>flex-basis</code> 한 번에 사용 가능하다.</p>
<ul>
<li><code>flex-grow</code> : 0이 기본값이고, 각 item에 세팅된 flex-grow 값 비율에 맞게 container 공간을 나누어 꽉 채운다. container에서 각 item의 flex-basis을 제외한 공간을 나누어 체운다.</li>
<li><code>flex-shrink</code> : 1이 기본값이고, 0보다 큰 값이 들어가면 flex-basis보다 작아질 수 있다. 0이 들어가면 flex-basis보다 절대 작아지지 않는다.</li>
<li><code>flex-basis</code> : item의 길이 기준점<pre><code class="language-css">.item {
flex: 1;
/* flex-grow: 1; flex-shrink: 1; flex-basis: 0%; */
flex: 1 1 auto;
/* flex-grow: 1; flex-shrink: 1; flex-basis: auto; */
flex: 1 500px;
/* flex-grow: 1; flex-shrink: 1; flex-basis: 500px; */
}</code></pre>
</li>
</ul>
</li>
</ul>
<h2 id="media-query">media query</h2>
<ul>
<li>if문 처럼 특정 조건일 때만 원하는 스타일을 적용하는 데에 쓴다.</li>
<li>주로 veiwport의 크기가 달라지는 반응형 웹 페이지 디자인 시에 자주 쓴다.<pre><code class="language-css">@media (조건) {
스타일
}
</code></pre>
</li>
</ul>
<p>/<em>800px 이하 화면에서 배경을 초록색으로 바꾸는 코드</em>/
@media (max-width: 800px) {</p>
<ul>
<li>{
background-color: green;
}
}<pre><code></code></pre></li>
</ul>
<ul>
<li>media type: all, screen, print, speach.</li>
<li>min(max)-width: 쿼리에 정의된 값보다 큰(작은) 브라우저 너비에 적용되는 규칙.</li>
<li>min(max)-height: 쿼리에 정의된 값보다 큰(작은) 브라우저 높이에 적용되는 규칙.</li>
<li>orientation=portrait(landscape): 높이가 너비(혹은 반대)보다 크거나 같은 브라우저에 적용되는 규칙</li>
</ul>
<h2 id="transition-animation">transition, animation</h2>
<h3 id="transition--css-속성property-값이-변화할-때-변화가-일정-시간duration에-걸쳐-일어나도록-하는-것">transition : CSS 속성(property) 값이 변화할 때, 변화가 일정 시간(duration)에 걸쳐 일어나도록 하는 것.</h3>
<pre><code class="language-html">&lt;head&gt;
  &lt;style&gt;
    div {
      width: 100px;
      height: 100px;
      background: red;
      /* 트랜지션 효과: 모든 속성의 변화를 2초에 걸쳐 전환한다. */
      transition: all 2s;
    }
    div:hover { /* 여기에 트랜지션을 설정하면 마우스가 내려올 때는 발생하지 않는다.*/
      border-radius: 50%;
      background: blue;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div&gt;&lt;/div&gt;
&lt;/body&gt;</code></pre>
<ul>
<li>transition은 자동으로 실행되지 않으며, :hover 등의 가상 클래스 선택자(Pseudo-Classes) 또는 JavaScript의 역할이 필요하다.</li>
<li>자동 실행되는 트랜지션(self-invoking transition)을 원한다면 CSS 애니메이션을 사용하면 된다.</li>
</ul>
<h3 id="animation--css를-다른-css로-부드럽게-변화시키는-것">animation : CSS를 다른 CSS로 부드럽게 변화시키는 것</h3>
<ul>
<li>애니메이션을 나타내는 CSS 스타일과 애니메이션의 sequence를 나타내는 복수의 키프레임(@keyframes)으로 이루어져 있다.</li>
<li>animation은 transition에 비해 더 많은 동작이 가능하다.</li>
<li>animation 속성은 하나의 줄거리를 구성하여 세부 움직임을 시간 단위로 제어할 수 있고 전체 줄거리의 재생과 정지, 반복까지 제어 가능하다.</li>
</ul>
<h2 id="참고-자료">참고 자료</h2>
<p><a href="https://dinfree.com/lecture/frontend/122_css_1.html">CSS 개념 모음</a><br><a href="https://www.w3schools.com/css/default.asp">W3Schools.com CSS</a><br><a href="https://developer.mozilla.org/ko/docs/Web/CSS">Mozilla CSS</a><br><a href="https://poiemaweb.com/css3-transition">CSS transition</a>
<a href="https://poiemaweb.com/css3-animation">CSS animation</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[1. 깃&깃허브 학습, HTML 기초 태그 학습]]></title>
            <link>https://velog.io/@turtle-hwan/1.githtml</link>
            <guid>https://velog.io/@turtle-hwan/1.githtml</guid>
            <pubDate>Sun, 10 Sep 2023 15:50:15 GMT</pubDate>
            <description><![CDATA[<h1 id="1-git--github-학습">1) git &amp; github 학습</h1>
<!--21-2 군대가기 직전에 동아리에서 간단하게 진행했던 Git & Github 스터디 ppt 자료가 남아 있어 참고해서 글로 작성했다. 군대가기 전에도 일 많이 벌려놓고 이것저것 했었구나..-->
<h2 id="형상-관리--소프트웨어의-변경-사항을-체계적으로-추적하고-통제하는-것">형상 관리 : 소프트웨어의 변경 사항을 체계적으로 추적하고 통제하는 것</h2>
<ul>
<li>변경 관리 $⊂$ 버전 관리 $⊂$ 형상 관리</li>
<li>형상 관리 도구들 : CVS, SVN, Git, Perforce 등</li>
<li>Git은 <strong>분산형 버전 관리 시스템</strong> 이다.</li>
</ul>
<p>Git은 여러 군데에 흩어져서 개발되던 소프트웨어의 코드를 한 데 모으고, 코드의 세부 변경 사항들을 추적하는 것을 돕기 위해 만들어졌다.</p>
<h2 id="git과-github은-다르다">Git과 Github은 다르다!</h2>
<ul>
<li>Git은 특정 로컬 폴더(directory)를 버전, 변경 사항 추적이 가능한 git 폴더로 만들어 준다. </li>
<li>Github, GitLab는 이렇게 만들어진 로컬 저장소(내 컴퓨터)의 폴더를 어디서나 접근할 수 있게 상태를 복사해서 올려둘 수 있는 원격 저장소(remote, Cloud 저장소)의 개념이다.</li>
<li>로컬 저장소의 git history를 remote 저장소로 올릴 때 <code>git push</code>를 사용하고, remote 저장소의 git history를 로컬 저장소와 동기화 시킬 때 <code>git pull</code>을 사용한다.</li>
<li>Github 뿐 아니라 사설 git 서버도 제작할 수 있다.</li>
<li>Github에서는 Git 기본 기능들 외에도 issue, milestone, pull request, github action 등 형상 관리에 도움되는 다양한 추가 기능을 제공한다.</li>
</ul>
<h2 id="git-다운받기"><a href="https://git-scm.com">Git 다운받기</a></h2>
<p><img src="https://velog.velcdn.com/images/turtle-hwan/post/7d0ff675-3b5f-4f76-a277-68006f7331dd/image.png" alt="git download"></p>
<ul>
<li>git bash : git 명령어를 사용가능한 shell 창 (기본 옵션은 vim 기반)</li>
</ul>
<h2 id="git-명령어-git-저장소-생성-git-사용자-초기-설정">git 명령어 (git 저장소 생성, git 사용자 초기 설정)</h2>
<h3 id="git-저장소-생성-방법">git 저장소 생성 방법</h3>
<ol>
<li>원격 저장소에 있는 것을 로컬 저장소에 clone한다.  <pre><code class="language-bash">git clone [원격 저장소 주소]
git clone https://github.com/Turtle-Hwan/Turtle-Hwan.github.io.git</code></pre>
</li>
<li>로컬 저장소에 새로 저장소를 만드는, init 한다.<pre><code class="language-bash">#저장소로 만들고 싶은 위치로 이동 후, init 한다.
git init</code></pre>
</li>
</ol>
<ul>
<li>현재 디렉토리가 git 저장소라면, .git 디렉토리가 생긴다. $⇒$ .git 디렉토리만 지우면 git history가 모두 삭제된다.</li>
</ul>
<h3 id="git-사용자-초기-설정">git 사용자 초기 설정</h3>
<ul>
<li>컴퓨터에 git을 처음 깔면, 현재 git 사용자의 이름과 이메일 초기 설정이 필요하다.<pre><code class="language-bash">git config user.name &quot;이름&quot;
git config user.email &quot;이메일&quot;</code></pre>
<pre><code class="language-bash"># 항상 적용되는 global 설정 확인
git config --global
</code></pre>
</li>
</ul>
<h1 id="이-저장소에만-적용되는-설정-확인">이 저장소에만 적용되는 설정 확인</h1>
<p>git config -l
git config --list</p>
<pre><code>
## git commit : git 에서 특정 버전을 저장하는 것 (스냅샷을 남긴다)
### commit 절차
1. 파일 생성 및 수정, &amp; 저장
2. `git add [파일 이름들]`  / `git add .` : 모든 파일 add
3. `git commit -m &quot;커밋 메세지&quot;`
* 커밋 메세지는 issue 기반을 명확하게 써 주는 것이 좋다. **commit convention** 참고하여, 무슨 기능을 추가했는지, 무슨 오류를 해결했는지 등. 

## git의 세 영역
### Working Directory : 현재 작업 중인 디렉토리 (.git이 있는 곳)
* git commit을 할 때, 개인정보(개인키, 비밀번호, 환경변수 등)은 버전관리에 포함시키면 안되고 .env 파일 등으로 따로 관리하는 것이 좋다. 공개 repository에 올라갈 경우, 악용될 가능성이 있기 때문!!
* `.gitignore` 파일을 만들고, 여기에 파일/폴더 명을 써주면 Staging Area로 넘어가지 않는다. (.gitignore 파일 자체도 넘기지 않을 수 있다.)

### Staging Area : 특정 버전(commit)으로 관리하고 싶은 파일들
* `git add` : Working Directory에서 원하는 파일들을 Staging Area로 넘기는 명령어
* `git status` : 현재 Staging Area에 담긴 파일들을 보는 명령

### Repository : commit 들이 저장되는 영역
* `git commit` : Staging Area에 있는 모든 파일들의 버전 기록을 Repository에 남기는 명령어
* `git commit --amend -m &quot;수정할 메세지` : commit 수정
* `git log` : Repository의 commit 기록을 보는 명령어
![출처 : 한이음 프로젝트 git 강의](https://velog.velcdn.com/images/turtle-hwan/post/5934d9cb-328e-4e48-9773-63e11df5dc15/image.png)


## git history
* git은 history를 쌓아가는 방식으로 작동한다.
* 즉, 파일을 삭제하면 삭제한 기록이 남으며, commit을 삭제하더라도 삭제했다는 기록이 남아서 `git reflog` 명령으로 찾아내서 복구 가능하다.

## commit 비교 / commit 이동 / commit 삭제
### commit 비교
```bash
git diff {commit_id1} {commit_id2}</code></pre><ul>
<li>두 commit 사이의 차이점을 보여준다. (linux의 diff와 같은 동작) </li>
<li>commit ID는 첫 4자리만 적어도 된다. </li>
<li>추가된 줄을 +로, 제거된 줄을 -로 나타내준다.</li>
<li><code>git log -p</code> 도 비슷한 동작이다. (<code>git log -p -2</code> : 최근 2개의 diff 옵션)</li>
</ul>
<h3 id="commit-간-이동-commit-삭제">commit 간 이동, commit 삭제</h3>
<ul>
<li>commit을 계속 해야 하는 이유는 나중에 그 시점(버전)으로 이동할 수 있기 때문이다.</li>
<li><code>(HEAD)</code> 포인터가 가리키는 곳이 현재 우리 눈에 소스 코드가 보이는 버전(commit)이다. <pre><code class="language-bash">git reset --hard {commit_id1} #commit_id1로 이동</code></pre>
</li>
<li>reset을 통해 원하는 이전 버전으로 이동한 후, 새로운 commit을 쌓아나가면 원래 있던 commit을 삭제한 효과를 낼 수 있다. (<code>git reflog</code>로 삭제된 commit id도 찾을 수 있다.)</li>
</ul>
<h1 id="2-html-기초-태그-학습">2) HTML 기초 태그 학습</h1>
<ul>
<li><p>HTML : HyperText Markup Language</p>
</li>
<li><p>XML처럼 태그로 감싸서 특정 문구를 표현한다.
<img src="https://velog.velcdn.com/images/turtle-hwan/post/7bac3929-33cf-4c39-bdfc-e0102a8a458f/image.png" alt="출처 : Mozila Web Docs"></p>
</li>
<li><p>DOM : Document Object Model </p>
<ul>
<li>HTML을 크게 보면 TREE 구조이다.</li>
<li>DOM 구조를 이용해 Javascript로 HTML 문서에 접근해서 각 element를 가져오고, 추가, 수정, 삭제가 가능하다.</li>
</ul>
</li>
</ul>
<h2 id="html-기본-구조">HTML 기본 구조</h2>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;탭 제목&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;h1&gt;문서 내용 - 제목 1&lt;/h1&gt;
    &lt;p&gt;문서 내용 p&lt;/p&gt;
    &lt;div&gt;문서 내용 div&lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre>
<ul>
<li><code>&lt;!DOCTPE html&gt;</code> : html 5 표준을 따른다는 것을 나타냄.</li>
<li><code>&lt;head&gt;&lt;/head&gt;</code> : HTML 문서의 메타데이터 정의.<ul>
<li><code>&lt;meta charset=&quot;UTF-8&quot;&gt;</code> : 해당 문서가 어떤 문자로 인식되느냐를 나타냄. (한글이 깨질 때, 이 태그가 없을 가능성이 크다.)</li>
</ul>
</li>
<li><code>&lt;body&gt;&lt;/body&gt;</code> : 브라우저를 통해 html을 열었을 때 보이는 내용 부분.</li>
</ul>
<h2 id="html-element의-속성attribute">HTML element의 속성(attribute)</h2>
<ul>
<li><code>&lt;p class=&quot;classname&quot;&gt;내용&lt;/p&gt;</code> : 이때의 class=&quot;classname&quot; 부분이 속성 부분이다.</li>
</ul>
<h2 id="html-대표-태그">HTML 대표 태그</h2>
<pre><code class="language-html">&lt;h1 ~ 6&gt;&lt;/h1 ~ 6&gt; : 제목 기능. 글씨를 크고 굵게 표시한다.
&lt;div&gt;&lt;/div&gt; : 특정한 기능이 없지만 단순히 레이아웃을 나눠서 CSS를 적용시킬 때 많이 쓴다.
&lt;img&gt; : img 삽입 태그
&lt;a&gt;&lt;/a&gt; : 다른 곳으로 링크를 걸 수 있는 태그
&lt;button&gt;&lt;/button&gt; : 버튼을 만들어 주는 태그
&lt;input&gt; : 입력을 받을 수 있는 태그
&lt;form&gt;&lt;/form&gt; : ID, PW 등의 입력을 받을 때 쓰인다.</code></pre>
<ul>
<li><p>formatting tag</p>
<pre><code class="language-html">&lt;b&gt;&lt;/b&gt; &lt;strong&gt;&lt;/strong&gt; : 강조 기능. strong은 강조 + 중요.
&lt;i&gt;&lt;/i&gt; &lt;em&gt;&lt;/em&gt; : 이텔릭체 기능. em은 이텔릭 + 중요.
&lt;mark&gt;&lt;/mark&gt; : 형광펜 효과.
&lt;del&gt;&lt;/del&gt; : 취소선.
&lt;u&gt;&lt;/u&gt; &lt;ins&gt;&lt;/ins&gt; : 밑줄.</code></pre>
</li>
<li><p>HTML entity : HTML의 문법으로 사용하는 &lt;&gt;, &amp; 등을 내용으로 삽입하도록 변환 가능한 것, 특수문자</p>
</li>
</ul>
<h3 id="inline-style--css">inline style (+ css)</h3>
<ul>
<li><code>&lt;태그 style=&quot;속성이름:속성값&quot;&gt;&lt;/태그&gt;</code> : 이런 형태로 css 속서을 html 요소에 직접 줄 수 있다.</li>
</ul>
<h3 id="a-태그--링크">a 태그 / 링크</h3>
<ul>
<li><p><code>&lt;a href=&quot;링크주소&quot;&gt;HTML 링크&lt;/a&gt;</code> : 원하는 다른 페이지로 이동 가능한 하이퍼링크를 생성한다.</p>
<ul>
<li><p>target 속성으로 링크된 문서를 어디서 열 지 결졍 가능.</p>
<ul>
<li><code>target=&quot;_blank&quot;</code> : 새 창이나 새 탭에서 오픈</li>
<li><code>target=&quot;_parent&quot;</code> : 부모 프레임에서 오픈</li>
</ul>
</li>
<li><p>링크의 상태(state)에 따라 각각 다른 css 속성을 부여 가능하다. (link, visited, hover, active)</p>
</li>
</ul>
</li>
</ul>
<h3 id="img-태그--이미지">img 태그 / 이미지</h3>
<ul>
<li><code>&lt;img src=&quot;이미지주소&quot; alt=&quot;이미지가 없을 시 나오는 문자열&quot;&gt;</code></li>
<li><code>&lt;img&gt;</code>를 <code>&lt;a&gt;&lt;/a&gt;</code>로 감싸서 이미지 링크 생성 가능.</li>
<li><code>&lt;map&gt;&lt;/map&gt;</code> 태그로 이미지를 부분 부분 나누어 링크 걸기 가능</li>
</ul>
<h3 id="리스트">리스트</h3>
<ul>
<li><code>&lt;ul&gt;&lt;li&gt;&lt;/li&gt;&lt;/ul&gt;</code> : unordered list</li>
<li><code>&lt;ol&gt;&lt;li&gt;&lt;/li&gt;&lt;/ol&gt;</code> : ordered list</li>
<li><code>&lt;dt&gt;&lt;dt&gt;&lt;/dt&gt;&lt;/dt&gt;</code> : description list</li>
</ul>
<h3 id="테이블">테이블</h3>
<pre><code class="language-html">&lt;table&gt;
  &lt;caption&gt;테이블 제목/설명&lt;/caption&gt;
  &lt;tr&gt;
    &lt;th&gt;table 제목1&lt;/th&gt;
    &lt;th&gt;제목2&lt;/th&gt;      
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;내용 1&lt;/td&gt;
    &lt;td&gt;내용 2&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;내용 3&lt;/td&gt;
    &lt;td&gt;내용 4&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;</code></pre>
<h3 id="iframe">iframe</h3>
<ul>
<li><code>&lt;iframe src=&quot;삽입할페이지주소&quot;&gt;&lt;/iframe&gt;</code> : 페이지 안의 페이지</li>
</ul>
<h3 id="의미-요소-semantic-element">의미 요소 (semantic element)</h3>
<ul>
<li><p>웹 페이지 레이아웃 구성을 위한 별도의 element
<img src="https://velog.velcdn.com/images/turtle-hwan/post/0398be05-4083-4005-a8d6-35c36423a75b/image.png" alt=""></p>
</li>
<li><header> : HTML 문서나 섹션(section) 부분에 대한 헤더(header)를 정의함.</li>
<li><nav>    : HTML 문서의 탐색 링크를 정의함.</li>
<li><section>    : HTML 문서에서 섹션(section) 부분을 정의함.</li>
<li><article>    : HTML 문서에서 독립적인 하나의 글(article) 부분을 정의함.</li>
<li><aside>    : HTML 문서에서 페이지 부분 이외의 콘텐츠(content)를 정의함. </li>
<li><footer> : HTML 문서나 섹션(section) 부분에 대한 푸터(footer)를 정의함.


</li>
</ul>
<h3 id="form-속성-태그">form 속성 태그</h3>
<pre><code class="language-html">&lt;form name=&quot;profile&quot; action=&quot;/login.js&quot; method=&quot;post&quot; autocomplete=&quot;on&quot;&gt;
  &lt;input type=&quot;text&quot; name=&quot;id&quot;&gt; &lt;!-- id입력 --&gt;
  &lt;input type=&quot;text&quot; name=&quot;pw&quot;&gt; &lt;!-- pw입력 --&gt;
  &lt;input type=&quot;submit&quot; value=&quot;Submit&quot;&gt; &lt;!-- 서버 제출 --&gt;
&lt;/form&gt;</code></pre>
<ul>
<li><p>submit 속성을 가진 버튼 / input을 누르면 form의 action에 해당하는 서버 파일로 input 값들이 전달된다.</p>
</li>
<li><p>get 방식 : 주소창에 data query 추가해서 전달하는 것</p>
</li>
<li><p>post 방식 : request query에 따로 data를 추가해서 전달하는 것</p>
</li>
<li><p>input 요소의 type</p>
<ol>
<li>텍스트 입력(text)</li>
<li>비밀번호 입력(password)</li>
<li>라디오 버튼(radio)</li>
<li>체크박스(checkbox)</li>
<li>파일 선택(file)</li>
<li>선택 입력(select)</li>
<li>문장 입력(textarea)</li>
<li>버튼 입력(button)</li>
<li>전송 버튼(submit)</li>
<li>필드셋(fieldset)</li>
</ol>
</li>
</ul>
<h3 id="xhtml">XHTML</h3>
<ul>
<li>eXtensible HTML을 의미하고, 문법 적용이 더 엄격하다.</li>
<li>React에서는 JS 속에 XHTML을 적용한 JSX 문법을 사용한다.</li>
</ul>
<h3 id="참고-사이트">참고 사이트</h3>
<p>HTML 기초 - <a href="http://www.tcpschool.com/html/html_intro_basic">http://www.tcpschool.com/html/html_intro_basic</a></p>
]]></description>
        </item>
    </channel>
</rss>