<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>kabonist_89.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Sat, 06 Aug 2022 06:14:50 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>kabonist_89.log</title>
            <url>https://velog.velcdn.com/images/kabonist_89/profile/f0f4302c-f9f0-425c-8a36-7aa63ac2cf94/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. kabonist_89.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/kabonist_89" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Array]]></title>
            <link>https://velog.io/@kabonist_89/Array</link>
            <guid>https://velog.io/@kabonist_89/Array</guid>
            <pubDate>Sat, 06 Aug 2022 06:14:50 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>Array = 배열</p>
</blockquote>
<p>JavaScript Array 클래스는 리스트 형태의 고수준 객체인 배열을 생성할 때 사용하는 전역 객체입니다.</p>
<ul>
<li>배열 만들기</li>
</ul>
<p>let fruits = [&#39;사과&#39;, &#39;바나나&#39;]</p>
<p>console.log(fruits.length)
// 2
Copy to Clipboard</p>
<ul>
<li>인덱스로 배열의 항목에 접근하기</li>
</ul>
<p>let first = fruits[0]
// 사과</p>
<p>let last = fruits[fruits.length - 1]
// 바나나
Copy to Clipboard</p>
<ul>
<li>배열의 항목들을 순환하며 처리하기</li>
</ul>
<p>fruits.forEach(function (item, index, array) {
  console.log(item, index)
})
// 사과 0
// 바나나 1
Copy to Clipboard</p>
<ul>
<li>배열 끝에 항목 추가하기</li>
</ul>
<p>let newLength = fruits.push(&#39;오렌지&#39;)
// [&quot;사과&quot;, &quot;바나나&quot;, &quot;오렌지&quot;]
Copy to Clipboard</p>
<ul>
<li>배열 끝에서부터 항목 제거하기</li>
</ul>
<p>let last = fruits.pop() // 끝에있던 &#39;오렌지&#39;를 제거
// [&quot;사과&quot;, &quot;바나나&quot;]
Copy to Clipboard</p>
<ul>
<li>배열 앞에서부터 항목 제거하기</li>
</ul>
<p>let first = fruits.shift() // 제일 앞의 &#39;사과&#39;를 제거
// [&quot;바나나&quot;]
Copy to Clipboard</p>
<ul>
<li>배열 앞에 항목 추가하기</li>
</ul>
<p>let newLength = fruits.unshift(&#39;딸기&#39;) // 앞에 추가
// [&quot;딸기&quot;, &quot;바나나&quot;]
Copy to Clipboard</p>
<ul>
<li>배열 안 항목의 인덱스 찾기</li>
</ul>
<p>fruits.push(&#39;망고&#39;)
// [&quot;딸기&quot;, &quot;바나나&quot;, &quot;망고&quot;]</p>
<p>let pos = fruits.indexOf(&quot;바나나&quot;)
// 1
Copy to Clipboard</p>
<ul>
<li>인덱스 위치에 있는 항목 제거하기</li>
</ul>
<p>let removedItem = fruits.splice(pos, 1) // 항목을 제거하는 방법</p>
<p>// [&quot;딸기&quot;, &quot;망고&quot;]
Copy to Clipboard</p>
<ul>
<li>인덱스 위치에서부터 여러개의 항목 제거하기</li>
</ul>
<p>let vegetables = [&#39;양배추&#39;, &#39;순무&#39;, &#39;무&#39;, &#39;당근&#39;]
console.log(vegetables)
// [&quot;양배추&quot;, &quot;순무&quot;, &quot;무&quot;, &quot;당근&quot;]</p>
<p>let pos = 1
let n = 2</p>
<p>let removedItems = vegetables.splice(pos, n)
// 배열에서 항목을 제거하는 방법
// pos 인덱스부터 n개의 항목을 제거함</p>
<p>console.log(vegetables)
// [&quot;양배추&quot;, &quot;당근&quot;] (원 배열 vegetables의 값이 변함)</p>
<p>console.log(removedItems)
// [&quot;순무&quot;, &quot;무&quot;]</p>
<blockquote>
<p> 배열 요소에 접근하기</p>
</blockquote>
<p>JavaScript 배열의 인덱스는 0부터 시작합니다. 즉, 배열 첫 번째 요소의 인덱스는 0이고, 마지막 요소의 인덱스는 배열의 length 속성에서 1을 뺀 것과 같습니다.</p>
<p>잘못된 인덱스를 사용하면 undefined를 반환합니다.</p>
<p>let arr = [&#39;첫 번재 요소입니다&#39;, &#39;두 번째 요소입니다&#39;, &#39;마지막 요소입니다&#39;]
console.log(arr[0])              // &#39;첫 번재 요소입니다&#39;를 기록
console.log(arr[1])              // &#39;두 번재 요소입니다&#39;를 기록
console.log(arr[arr.length - 1]) // &#39;마지막 요소입니다&#39;를 기록</p>
<blockquote>
<p>배열 길이와 숫자형 속성의 관계</p>
</blockquote>
<p>JavaScript 배열의 length 속성과 숫자형 속성은 연결되어 있습니다.</p>
<p>몇몇 배열 내장 메서드(join, slice, indexOf 등)은 호출했을 때 배열의 length 속성의 값을 참고합니다.</p>
<p>다른 메서드(push, splice 등) 또한 배열의 length 속성을 바꾸는 결과를 낳습니다.</p>
<p>const fruits = []
fruits.push(&#39;바나나&#39;, &#39;사과&#39;, &#39;복숭아&#39;)</p>
<p>console.log(fruits.length) // 3
Copy to Clipboard
배열 인덱스로 유효한 속성을 JavaScript 배열에 설정할 때, 그 인덱스가 현재 배열의 경계 바깥에 있는 경우, JavaScript 엔진은 배열의 length 속성을 그에 맞춰 업데이트 합니다.</p>
<p>fruits[5] = &#39;mango&#39;
console.log(fruits[5])           // &#39;망고&#39;
console.log(Object.keys(fruits)) // [&#39;0&#39;, &#39;1&#39;, &#39;2&#39;, &#39;5&#39;]
console.log(fruits.length)       // 6
Copy to Clipboard
length를 직접 늘려도 요소에 변화는 없습니다.</p>
<p>fruits.length = 10
console.log(fruits)              // [&#39;바나나&#39;, &#39;사과&#39;, &#39;복숭아&#39;, 비어 있음 x 2, &#39;망고&#39;, 비어 있음 x 4]
console.log(Object.keys(fruits)) // [&#39;0&#39;, &#39;1&#39;, &#39;2&#39;, &#39;5&#39;]
console.log(fruits.length)       // 10
console.log(fruits[8])           // undefined
Copy to Clipboard
하지만, length 속성을 감소시키면 요소가 지워집니다.</p>
<p>fruits.length = 2
console.log(Object.keys(fruits)) // [&#39;0&#39;, &#39;1&#39;]
console.log(fruits.length)       // 2</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[If 문]]></title>
            <link>https://velog.io/@kabonist_89/If-%EB%AC%B8</link>
            <guid>https://velog.io/@kabonist_89/If-%EB%AC%B8</guid>
            <pubDate>Sat, 06 Aug 2022 05:20:13 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>*<em>if 문 *</em></p>
</blockquote>
<p>지정한 조건이 참인 경우 명령문을 실행합니다 
조건이 거짓인 경우 또 다른 명령문이 실행 될 수 있습니다.</p>
<p>예제를 보고 풀이를 해보도록 하겠습니다</p>
<p>function testNum(a) {
  let result;
  if (a &gt; 0) {
    result = &#39;positive&#39;;
  } else {
    result = &#39;NOT positive&#39;;
  }
  return result;
}</p>
<p>console.log(testNum(-5));
// expected output: &quot;NOT positive&quot;</p>
<p>풀이</p>
<p>만약에 a가 0보다 크면 &#39;positive&#39;를 보여주고 else 즉 아니면 &#39;NOT positive&#39;를 보여준다</p>
<p>문제에서는 -5를 선언 해주었기 때문에 0보다 작다 그러므로 &#39;NOT positive&#39;라는 결과값을 보여준다</p>
<p>다중 if문 else문은 else if 를 만들기위해 중첩이 불가능합니다 </p>
<blockquote>
<p>사용방법의 예</p>
</blockquote>
<h4 id="1">#1</h4>
<p>if (조건1)
   명령문1
else if (조건2)
   명령문2
else if (조건3)
   명령문3
...
else
   명령문N</p>
<h4 id="2">#2</h4>
<p>if (조건1)
   명령문1
else
   if (조건2)
      명령문2
   else
      if (조건3)
...</p>
<h4 id="3">#3</h4>
<p>if (조건) {
   명령문들1
} else {
   명령문들2
}</p>
<p>조건문과 명령문의 순서를 잘 알고 사용해야 할것 같습니다.</p>
<blockquote>
<p>벨로그 정리 후기</p>
</blockquote>
<p>기본을 뜨문뜨문 알고 있는 상태에서 부트캠프 3주차가 지나갔다.
if문 코드는 읽을 줄 알지만 막상 화면에 if 문을 사용하면서 코드를 짜보라고 했을때 어떻게 해야하지 매일 막막했다..</p>
<p>이번정리를 기회로 한번 더 배우는 계기가 되었으며 부트캠프 내에서 정말 감사하게 도와주고 계시는 동기분이 계셔서 정말 열심히 배우고 암기 할수 있는 부분은 암기하면서 이해 하고 있다.</p>
<p>생각해 보면 if문은 기본중에 기본인것 같다.</p>
<p>if 만약에 이러 이러 하면 이걸 알려주고 조건에 맞는 값이 아니면 else 얘를 알려줘! 
인 부분인데 아이디나 비밀번호를 적는 로그인 부분에도 사용이 될것 같고 꼭 필요한 문자나 선택하는 부분에도 꼭 사용이 될것같다.</p>
<p>하루 하루 기본이 정말 중요하다고 느끼고 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[React] CRA]]></title>
            <link>https://velog.io/@kabonist_89/React-CRA</link>
            <guid>https://velog.io/@kabonist_89/React-CRA</guid>
            <pubDate>Tue, 02 Aug 2022 08:57:16 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p> CRA란??</p>
</blockquote>
<p>리액트는 UI 기능만 제공하기 때문에 웹 애플리케이션을 만드는 데 필요한 개발환경을 직접 구축해야 하는 것들이 많습니다. 직접 구축을 하면 성능을 최적화시킬 수 있지만, 웹 애플리케이션 구축에 필요한 패키지를 별도로 설치하고 유지보수도 해야 하는 등 신경 쓸 것이 많아서 처음에 리액트를 접하면 직접 개발환경을 구축하기 어려울 수 있습니다. 이러한 문제를 해결하기 위해서 리액트 팀에서 리액트 프로젝트를 시작하는 데 필요한 <strong>개발 환경을 세팅해주는 도구(toolchain)인 CRA(Create-React-App)를 만들었습니다</strong>. CRA를 이용하면 하나의 명령어로 리액트 개발환경을 구축할 수 있기 때문에 처음 리액트를 접하거나 SPA(Single Page Application)환경을 구축할 때는 CRA를 통해서 리액트를 시작하도록 공식문서에서도 추천하고 있습니다.</p>
<blockquote>
<p> 프로젝트 구축 방법</p>
</blockquote>
<ul>
<li><ol>
<li>터미널에서 프로젝트를 시작하고자 하는 폴더에 진입합니다.</li>
</ol>
<p>cd  [프로젝트를 구축하고자 하는 폴더]</p>
<p>Ex) 만약 pwd라는 폴더에 구축하려고 한다면&quot; cd pwd &quot; 이렇게 입력해주면
PS C:\Users\User\Desktop\tast1\pwd&gt; 이렇게 폴더로 이동합니다.</p>
</li>
<li><ol start="2">
<li>프로젝트 이름은 대문자로 작성하거나 ~&#39;!()*^등의 일부 특수문자를 포함하면 에러가 생기기 때문에 소문자(kebab-case naming convention으로 작성하는 것이 일반적)로 작성하여 프로젝트를 설치합니다.</li>
</ol>
<p>npx create-react-app [프로젝트명]
Ex) npx create-react-ap giseon</p>
</li>
</ul>
<p>이렇게 하면 giseon 이라는 폴더에 CRA가 설치되는것을 볼수 있습니다.</p>
<ul>
<li><ol start="3">
<li>CRA를 통해 리액트 프로젝트를 설치하면, 설치할 때 입력한 프로젝트 이름의 폴더가 생성되므로, 생성된 프로젝트 폴더에 진입합니다.</li>
</ol>
</li>
</ul>
<p>$ cd [프로젝트명]
Ex) cd giseon</p>
<ul>
<li><ol start="4">
<li>웹 개발을 할 때는 서버가 필요합니다. 당장 웹 서버를 구축하지 않고, 자신의 로컬 컴퓨터에 가상의 서버를 구축할 수 있으며, 로컬 컴퓨터 상의 가상 서버를 로컬 서버라고 합니다.</li>
</ol>
</li>
</ul>
<p>리액트 프로젝트의 로컬 서버를 띄우기 위해서는 아래의 명령어를 입력합니다.</p>
<p>$ npm start</p>
<ul>
<li><ol start="5">
<li>npm start 명령어를 입력하여 아래와 같은 메시지와 <a href="http://localhost:3000">http://localhost:3000</a> 이라는 로컬 서버주소를 확인할 수 있습니다.</li>
</ol>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/67019956-c8d4-476c-963f-e93ed6ad906b/image.PNG" alt=""></p>
<p>이런 화면이 인터넷창에 새로 열리면 기본적인 CRA 설치는 끝났다고 볼수 있습니다.</p>
<ul>
<li>실행 종료법</li>
</ul>
<p>&quot;ctrl + c&quot; 를 눌러주면  &quot;일괄 작업을 끝내시겠습니까 (Y/N)?&quot;라는 알림이 터미널에 뜨고 y를 눌러주면 CRA이 종료된다.</p>
<p>다시 실행하려면 $ npm start를 터미널에 작성해주면 다시 동작한다.</p>
<blockquote>
<p> index.html, index.js, App.js</p>
</blockquote>
<h2 id="-publicindexhtml">** public/index.html**</h2>
<p>리액트는 SPA(Single Page Application)로 하나의 index.html이 존재하며, 웹 브라우저에 보여지는 파일입니다. 리액트에서는 index.html 파일을 직접 수정하는 것이 아니라, index.js 파일을 통해 index.html 파일의 id가 root인 div 내부에 코드를 추가하여 화면에 그려지게 됩니다.</p>
<p>[참고] public폴더의 역할</p>
<p>우리가 웹을 배포한다는 건 특정 폴더를 서버 컴퓨터에 올려두는 것입니다. 그래서 서버와 연결된 특정 URL로 접근하면 해당 폴더의 파일을 요청할 수 있고, 뒤에 따로 추가적인 URL을 붙이지 않으면 index.html을 요청한다는 의미가 됩니다. 예를 들어, <a href="https://naver.com">https://naver.com</a> 로 접근하면 naver.com에 연결되어있는 서버 컴퓨터의 폴더에 접근해서 index.html을 가져오는 것입니다. CRA를 배포했을 때 실제 서버에 배포되는 폴더가 public 폴더입니다. 우리 서버 주소로 접근하면(개발 서버의 경우는 <a href="http://localhost:3000">http://localhost:3000</a>) public 폴더에 들어가는 것과 같다고 생각하시면 됩니다. 그래서 우리가 public에 특정 디렉토리, 파일을 만들어두면 서버 URL을 통해서 접근이 가능한 것입니다.</p>
<p>예를 들어, public/images/logo.jpg 파일을 만들어두면, 서버에 접속해서 해당 파일에 접근할 수 있습니다. 실제로 <a href="http://localhost:3000/images/logo.jpg">http://localhost:3000/images/logo.jpg</a> 를 브라우저 주소창에 입력하면 브라우저상에서 해당 이미지를 볼 수 있습니다.</p>
<h2 id="srcindexjs"><strong>src/index.js</strong></h2>
<p>리액트의 시작(Entry Point)이 되는 파일입니다. 어떻게 컴포넌트가 화면에 그려지는지 알아보도록 하겠습니다.</p>
<p>// src/index.js</p>
<p><strong>import React from &quot;react&quot;;
import ReactDOM from &quot;react-dom/client&quot;;
import App from &quot;./App&quot;;</strong></p>
<p><strong>const root = ReactDOM.createRoot(document.getElementById(&quot;root&quot;))</strong>; // 1
<strong>root.render(    )</strong>; // 2</p>
<ol>
<li><p>index.js에서는 document.getElementById로 index.html안에 id가 root인 요소에 접근합니다.</p>
</li>
<li><p>그리고 html 요소, 또는 리액트 요소 등의 코드가 눈으로 볼 수 있도록 그려지는 것을 <strong>렌더링(rendering)이라고 하는데 index.js에서 render()안에 컴포넌트가 렌더링 됩니다.</strong>
초기 세팅 때의 컴포넌트인 을 대신하여 html 요소 또는 리액트 요소를 추가하여 화면에 그릴 수도 있습니다.</p>
</li>
</ol>
<p>[참고] src폴더의 역할</p>
<p>개발에 사용되는 소스 파일을 모아두는 폴더입니다.</p>
<h2 id="appjs"><strong>App.js</strong></h2>
<p>CRA설치 후, 웹 애플리케이션의 첫 화면에 그려지고 있는 파일이며 데모를 위한 초기 컴포넌트입니다.</p>
<ul>
<li>후기</li>
</ul>
<p>처음에는 터미널에 명령어 입력하는것도 어려웠는데 이제는 자유자제 까지는 아니지만 조금씩 익숙해 지고 있다...</p>
<p>처음 npx create-react-ap giseon 후 폴더를 다시 지정해서 npm start를 해줘야 하는데 다시 지정하지 않고 계속 npm start를 해서 몇분 정도 고민했었다</p>
<p>하나 배우면 하나 더 배우고 계속 그런방식으로 하루 하루가 지나가고 있어서 잘 하고 있는지 모르겠지만 하루 하루 지날수록 조금은 알아가는것 같아 다행이라고 생각한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTML sapn()]]></title>
            <link>https://velog.io/@kabonist_89/HTML-sapn</link>
            <guid>https://velog.io/@kabonist_89/HTML-sapn</guid>
            <pubDate>Sat, 30 Jul 2022 07:21:24 GMT</pubDate>
            <description><![CDATA[<p>span 태그는 div 태그처럼 특별한 기능을 갖고있지 않고, CSS와 함께 쓰입니다.</p>
<div> 태그와의 차이점은 display속성이 block이 아닌, inline이라는 점인데, 이는 CSS display 항목에서 세부 정보를 알 수 있습니다.
이 둘의 차이를 쉽게 설명하자면, div는 줄 바꿈이 되지만, span은 줄 바꿈이 되지 않다는 점입니다




]]></description>
        </item>
        <item>
            <title><![CDATA[westagram 인스타그램 클론 #2
]]></title>
            <link>https://velog.io/@kabonist_89/westagram-%EC%9D%B8%EC%8A%A4%ED%83%80%EA%B7%B8%EB%9E%A8-%ED%81%B4%EB%A1%A0-2</link>
            <guid>https://velog.io/@kabonist_89/westagram-%EC%9D%B8%EC%8A%A4%ED%83%80%EA%B7%B8%EB%9E%A8-%ED%81%B4%EB%A1%A0-2</guid>
            <pubDate>Fri, 29 Jul 2022 13:10:09 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>메인페이지 자바스크립트 기능구현</strong></p>
</blockquote>
<ol>
<li>ID와 PW를 넣어줬을때 background 컬러가 옅은 파란색으로 변해야 한다.</li>
<li>ID와 pw를 넣어줬을때 로그인 버튼이 파란색으로 활성화 되어야 한다.</li>
<li>로그인 버튼이 활성화 되어 로그인 버튼을 클릭하면 리셋되어야 한다.</li>
</ol>
<blockquote>
<h1 id="코드-풀이--0">코드 풀이- 0</h1>
</blockquote>
<p> <img src="https://velog.velcdn.com/images/kabonist_89/post/11bc76d0-e188-4bc0-b27e-a37d57450dd4/image.PNG" alt=""></p>
<p>코드는 위에서 부터 아래로 읽어오기 때문에 일단 함수와 변수를 제일 상단에 선언해 주었습니다.</p>
<ul>
<li><p>Document.getElementById() 메서드는 주어진 문자열과 일치하는 id 속성을 가진 요소를 찾고, 이를 나타내는 Element 객체를 반환합니다. ID는 문서 내에서 유일해야 하기 때문에 특정 요소를 빠르게 찾을 때 유용합니다.</p>
</li>
<li><p>HTML에서 &quot;전화번호, 사용자 이름 또는 이메일&quot; input 박스 id를 id로 지정해 주었습니다 id = &quot;id&quot;
위와 같이 &quot;비밀번호&quot; id는 password &quot;로그인&quot;input박스 id는 BTN 으로 지정해주었습니다.</p>
</li>
</ul>
<blockquote>
<h1 id="코드-풀이---1">코드 풀이 - 1</h1>
</blockquote>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/9bd4de64-5694-4672-91a5-d9fbad7f39af/image.PNG" alt=""></p>
<p><strong>if ((loginId.value.length&gt;0 &amp;&amp; loginId.value.indexOf(&quot;@&quot;)!==-1)&amp;&amp; loginPw.value.length&gt;=5)</strong></p>
<ul>
<li><p>if ((loginId.value.length&gt;0 //만약에 loginId 초기값 길이가 0보다 크거나</p>
</li>
<li><p>&amp;&amp; loginId.value.indexOf(&quot;@&quot;)!==-1) //또는 loginId 초기값에서 &quot;@&quot;찾아서 &quot;@&quot;가 ID input박스에 있어야 하며 없다면 -1 </p>
</li>
<li><p>&amp;&amp; loginPw.value.length&gt;=5) //또는 loginPw 초기값에서 길이가 5보다 크거나 같아야 한다.</p>
</li>
</ul>
<p> <strong>loginBtn.style.backgroundColor = &quot;#0095F6&quot;; 
 loginBtn.disabled = false;</strong></p>
<p>**  }else{
        loginBtn.style.backgroundColor = &quot;#C0DFFD&quot;;
        loginBtn.disabled = true;
    }
}
 **</p>
<ul>
<li><p>로그인 버튼 초기값 버튼 배경색을 &quot;#0095F6&quot;으로 변환해준다</p>
</li>
<li><p>로그인 버튼에 disabled라는 함수를 지정해 주어 활성화 해준다.</p>
</li>
<li><p><strong>disabled를 false로 선언해 준 이유</strong>는 disabled라는 함수가 기본 초기값이 비활성화로 되어있기 때문에 활성화가 true가 아니라 false로 지정을 해주어야 활성화가 된다.</p>
</li>
</ul>
<ul>
<li><strong>하나라도 일치하지 않을 시 로그인 input박스 색깔이 &quot;#c0DFFD&quot;로 변화 되고 disabled를 true로 선언되어 있기 때문에 비활성화 상태가 된다.</strong></li>
</ul>
<blockquote>
<h1 id="코드-풀이---2">코드 풀이 - 2</h1>
</blockquote>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/1e672020-4917-4435-9314-e4f1fc439a72/image.PNG" alt=""></p>
<ul>
<li><p>새 하위 문자열을 생성하기 위해 호출 하기 위해서 매개변수인 funtion을 선언해주고
전체 문자열을 불러 오기 위해 replace(&quot;./index.html&quot;); 을 선언해 HTML을 불러옵니다.</p>
</li>
<li><p>활성화 Event를 호출하기 위해 loginID.<strong>addEventListener()</strong>를 선언해 줍니다.
addEventListener()메서드는 지정한 유형의 이벤트를 대상이 수신할 때마다 호출을 할수 있는 매개변수입니다.
() 괄호안에는 불러올 함수를 지정해 줍니다.</p>
</li>
<li><p>keyup을 선언한 이유는 키보드 이벤트(Keyboard Event)는 사용자가 키를 누르거나 키를 놓을 때 발생합니다. 키를 누를 때는 keydown 타입의 이벤트가 발생하고, <strong>키를 놓을 때는 keyup 타입의 이벤트가 발생</strong>하기 때문에 <strong>id인 input박스에 text를 입력 후 다음 input 박스로 넘어 가면 이벤트가 발생하게 하기 위함.</strong></p>
</li>
<li><p>color는 바로 위 상단에서 지정해준 컬러 &quot;#c0DFFD&quot; 또는 &quot;#0095F6&quot; 로 변환해 주기 위해 선언해주었다.</p>
</li>
<li><p>loginBtn.addEventListener(&#39;click&#39;,moveToMain); // 로그인 버튼에 강제적으로 이벤트를 발생 시키기 위해 click함수를 지정해 주었다 
즉 모든 조건이 true일 경우 로그인 버튼이 활성화 된다.
<img src="https://velog.velcdn.com/images/kabonist_89/post/1818c29f-ae4a-47bd-9463-c2609a5da6a9/image.PNG" alt=""></p>
<blockquote>
<p>활성화 되지 않은 로그인 페이지</p>
</blockquote>
</li>
<li><p>&quot;@&quot;가 ID input박스에 들어가지 않았거나 password inpt박스에 5자리 이상 입력되어 있지 않을 경우 로그인 버튼은 활성화가 되지 않는다.</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/e3b99a35-9a1b-467b-b668-01e4fbdb9545/image.PNG" alt=""></p>
<blockquote>
<p>모두 완료가 된 로그인 페이지 입니다.</p>
</blockquote>
<ul>
<li>ID input 박스에 &quot;@&quot;문자열이 들어갔고 또 다른 password input 박스에 longth &gt;=5 즉 문자열이 5개이상 들어 갔기 때문에 로그인 버튼이 활성화 되어 있는것을 볼 수 있습니다</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[westagram 인스타 그램 클론 #1]]></title>
            <link>https://velog.io/@kabonist_89/westagram-%EC%9D%B8%EC%8A%A4%ED%83%80-%EA%B7%B8%EB%9E%A8-%ED%81%B4%EB%A1%A0-1</link>
            <guid>https://velog.io/@kabonist_89/westagram-%EC%9D%B8%EC%8A%A4%ED%83%80-%EA%B7%B8%EB%9E%A8-%ED%81%B4%EB%A1%A0-1</guid>
            <pubDate>Fri, 29 Jul 2022 10:59:50 GMT</pubDate>
            <description><![CDATA[<p>위코드에 들어와서 첫 클론코딩을 시작하였다.
아직 많은것들이 익숙하지 않아서 제대로 하고 있는건지도 모를 정도로 시간도 빨리가고 따라가기가 쉽지 않았다...ㅠ</p>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/94bf960d-68a2-4bfc-9f97-1aabd3a41664/image.PNG" alt="">
위 이미지가 클론할 페이지 이다.
**
&lt;구현해야 할 부분!&gt;**</p>
<p>-네모난 박스 안에 westagram 폰트를 넣어주고 바로 밑에부분에 아이디 및 이메일 들어갈 박스를 만들어주고 바로 밑에 비밀번호가 들어갈 박스를 만들어 주어야 한다.
-로그인 박스를 만들어 준 뒤 자바스크립트로 아이디와 비밀번호가 입력 되었을때 버튼이 활성화 되어야 한다.</p>
<p>-그 밑에는 타 플랫폼으로 로그인 할 수 있는 로그인 링크 할 수 있는 부분을 만들어주고 
비밀번호 찾는 링크 또한만들어주어야 한다.</p>
<p>작성한 코드를 가져와서 하나 하나 리뷰 해보려고 한다.</p>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/e499dd85-4d81-4fed-8174-161eceeb94d8/image.PNG" alt=""></p>
<p>일단 form 태그로 전체적인 body 태그들을 묶어주었다.</p>
<p>form태그란 사용자가 정보를 입력할 수 있도록 만들어진 웹 요소
추후 블로그에 form태그에 대한 자세한 내용을 다시 작성할 예정입니다.</p>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/064914e3-bd0a-4081-ad36-5ec6b922e0a4/image.PNG" alt=""></p>
<blockquote>
<h1 id="input-박스">input 박스</h1>
</blockquote>
<p>처음 구연한 부분은 input 태그로 &quot;전화번호 , 사용자 이름 또는 이메일 &quot; 부분을 구연하였다.</p>
<p>div박스로  id 값을 지정해준 뒤 input박스 타입을 text으로 지정해 주었다 .
지정한 이유는 디폴트 값. 한줄의 텍스트 필드이고 새줄 문자는 입력값으로부터 자동으로 제거되기 때문에 사용해 주었습니다.</p>
<p>input 박스의 종류는 여러가지가 있는데 사용할부분에 따라 요소에 맞게 사용하면 될것 같다
input 박스의 종류 부분도 다시 블로그에 작성할 예정입니다.</p>
<p>스타일의 경우 css부분에서 다뤄도 되지만 나름의 가독성을 높이기 위해서 HTML에서 input 박스에서 각자의 width 값과 height값을 지정해 주었다.</p>
<blockquote>
<h1 id="button">Button</h1>
</blockquote>
<p>button 박스의 종류는 3가지가 존재 한다 .
존재 하는 3가지 박스 또한 다시 블로그에 작성 할 예정입니다.</p>
<p>일단 배운 버튼의 종류가 button 속성뿐이라 사용해 주었다.</p>
<p>id값과 class 값을 같이 준 이유는 자바스크립트 속성과 css속성에서 따로 사용하기 위해서 두개의 값을 사용해 주었습니다.</p>
<p>두개를 굳이 안써도 될것 같은데 코드를 작성하다보니 두개를 코딩하게 되었습니다.
다시 한번 코드를 뜯어 보며 확인해서 간단한 방법이 있는지 알아봐야할것 같습니다.
<img src="https://velog.velcdn.com/images/kabonist_89/post/5ead4bb7-1267-41c9-8327-901adec914b6/image.PNG" alt=""></p>
<blockquote>
<h1 id="a태그">a태그</h1>
</blockquote>
<p>타 플랫폼으로 넘어가기 위해선 a태그를 이용해야 하므로 a태그로 facebook 이라는 텍스트에 링크를 걸어주었다 .</p>
<p>바로 밑에 password lose? 부분에도 똑같이 지정해 주었다.</p>
<p>링크를 클릭해도 아직 아무런 반응도 일어나지 않는다 다음에는 링크를 눌렀을때 다음 페이지로 넘어가는 기능을 구현해보려고 한다.</p>
<p>메인페이지 HTML 부분은 이정도로 구현하였다.</p>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/19a32099-7553-42c2-8af7-4e8fa1fa7cc1/image.PNG" alt=""></p>
<p>완성된 인스타그램 로그인페이지다.</p>
<p>클론이지만 클론같지 않은 클론페이지 인것같다...</p>
<p>사이즈도 조금 다르고 더 짧게 코드구현은 당연히 가능한것 같지만 아직은 보고 따라 만드는것도 벅찬것 같다..</p>
<p>전화 번호 및 비밀번호를 입력해 주었을때 로그인 부분이 옅은 파란색에서 진한파란색으로 변하는 기능은 <strong>westargram#2</strong>에서 작성하도록 하겠습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[For문]]></title>
            <link>https://velog.io/@kabonist_89/For%EB%AC%B8</link>
            <guid>https://velog.io/@kabonist_89/For%EB%AC%B8</guid>
            <pubDate>Sun, 24 Jul 2022 07:49:41 GMT</pubDate>
            <description><![CDATA[<p>for 반복문은 어떤 특정한 조건이 거짓으로 판별될 때까지 반복합니다.</p>
<p>for ([초기문]; [조건문]; [증감문])</p>
<blockquote>
<p>  문장
for문이 실행될 때, 다음과 같이 실행됩니다.:</p>
</blockquote>
<p>초기화 구문인 초기문이 존재한다면 초기문이 실행됩니다. 이 표현은 보통 1이나 반복문 카운터로 초기 설정이 됩니다. 그러나 복잡한 구문으로 표현 될 때도 있습니다. 또한 변수로 선언 되기도 합니다.</p>
<p>조건문은 조건을 검사합니다. 만약 조건문이 참이라면, 그 반복문은 실행됩니다. 만약 조건문이 거짓이라면, 그 for문은 종결됩니다. 만약 그 조건문이 생략된다면, 그 조건문은 참으로 추정됩니다.</p>
<p>문장이 실행됩니다. 많은 문장을 실행할 경우엔, { } 를 써서 문장들을 묶어 줍니다.
갱신 구문인 증감문이 존재한다면 실행되고 2번째 단계로 돌아갑니다.</p>
<p>예시로 </p>
<blockquote>
<p><strong>for(i=0; i&lt;=10; i++)</strong></p>
</blockquote>
<p><strong>초기문</strong>은 i=0부터 시작을 한다 라고 초기 값을 지정해주었습니다.</p>
<p><strong>조건문</strong>은 i 와 조건식 10을 대입하여 i보다 작거나 같다 라는 비교 연산자를 사용해 주었습니다.</p>
<p><strong>증감문</strong>은 앞에 초기문 조건문을 대입한 뒤 i인 0이 10 보다 작거나 같을 경우 1씩 증가 시켜준다 라는 식 입니다.</p>
<p>또다른 예시로는 </p>
<p>findSmallestElement 함수를 구현해 주세요.
findSmallestElement 의 arr 인자는 숫자 값으로만 이루어진 배열입니다.</p>
<p>arr 의 값들 중 가장 작은 값을 리턴 해주세요.</p>
<p>만일 arr 가 비어있으면 0을 리턴 해주세요.</p>
<p>예를 들어, 다음과 같은 배열이 인자(input)으로 들어왔다면 1이 리턴 되어야 합니다.</p>
<p>[20, 200, 23, 1, 3, 9]</p>
<p>풀이</p>
<p>let arr=[20, 200, 23, 1, 21, 8]</p>
<p>function findSmallestElement(arr) {
  if (arr.length === 0) {
    return 0; // 빈 배열이면 0을 리턴
  } else {
    let min = arr[0];
    for (let i = 1; i &lt; arr.length; i++) {
      if (min &gt; arr[i]) {
        min = arr[i];
      }
    }
    return min;
  }
}</p>
<p>console.log(findSmallestElement(arr))</p>
<p>module.exports = { findSmallestElement};</p>
<p>동작 순서는 let arr 에 있는 배열의 변수를 읽어준뒤 function findSmallestElement(arr) 에 있는 arr에 배열들이 담겨집니다.</p>
<p>그리고   if (arr.length === 0) {
    return 0;</p>
<p>  만약에 배열이 비어있다면 0을 리턴해 줍니다.</p>
<pre><code>} else {
let min = arr[0];
for (let i = 1; i &lt; arr.length; i++) {
  if (min &gt; arr[i]) {
    min = arr[i];
  }
}
return min;</code></pre><p>else 그게 아니면  let min = arr [0]; min을 arr 즉 배열으로 지정해 주고 0번째 부터 실행하고 반복문인 for문을 돌려줍니다.</p>
<p>for (let i = 1; i &lt; arr.length; i++) i=1 즉 i를 배열의 1번째 200으로 초기값을 지정해 준 뒤 i즉 200 보다 arr.length ;가 작다면 배열에 있는 순서에서 i++ 1씩 증가 시킵니다.</p>
<p>if 만약에 min인arr[0]보다 크면 arr[i] 배열에 있는 i = 200 min = arr[i]; 
인덱스가 검사한 인덱스보다 크면 min을 교체
다시 말해, 검사한 인덱스가 min보다 작으면 해당 인덱스의 값을 min으로!
그리고 리턴합니다.
그러면 결과값 1이 나타나게 됩니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[inline, inline-block, block 에 대해서]]></title>
            <link>https://velog.io/@kabonist_89/inline-inline-block-block-%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C</link>
            <guid>https://velog.io/@kabonist_89/inline-inline-block-block-%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C</guid>
            <pubDate>Wed, 20 Jul 2022 05:19:45 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="inline">inline</h2>
</blockquote>
<p>display 속성이 inline으로 지정된 엘리먼트는 전후 줄바꿈 없이 한 줄에 다른 엘리먼트들과 나란히 배치됩니다. *<em>대표적인 inline 엘리먼트로 span 이나 a , em 태그 *</em>등을 들 수 있습니다.</p>
<p>예를 들어, 여러 개의 inline 엘리먼트 다음과 같이 마크업하면** 줄바꿈 없이** 순서대로 한 줄에 보이게 됩니다.</p>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/2415bf38-47d7-4be6-bf5a-c3d725ebd647/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/19484d10-b013-4d43-b214-1611235921d4/image.PNG" alt=""></p>
<p><strong>inline 엘리먼트를 사용할 때 주의할 점은, width와 height 속성을 지정해도 무시된다는 것입니다</strong>. 왜냐하면 해당 태그가 마크업하고 있는 컨텐트의 크기 만큼만 공간을 차지하도록 되어 있기 때문입니다. 또한, <strong>margin과 padding 속성은 좌우 간격만 반영이 되고, 상하 간격은 반영이 되지 않습니다.</strong></p>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/d3d2cfca-2145-4904-b6a1-328144f611c7/image.PNG" alt=""></p>
<p>위와 같이 나열되어 있는 결과가 나오게 됩니다.</p>
<blockquote>
<h2 id="inline-block">inline-block</h2>
</blockquote>
<p>display 속성이 inline-block으로 지정된 엘리먼트는 마치 하이브리드 모드처럼 동작하는데요. 기본적으로 <strong>inline 엘리먼트처럼 전후 줄바꿈 없이 한 줄</strong>에 다른 엘리먼트들과 나란히 배치되지만, <strong>block 엘리먼트처럼 width와 height 속성 지정 및 margin과 padding 속성의 상하 간격 지정이 가능합니다.</strong> 다시 말해서, 내부적으로는 block 엘리먼트의 규칙을 따르면서 외부적으로 inline 엘리먼트의 규칙을 따르게 되는 것이지요.</p>
<p><strong>대표적인 inline-block 엘리먼트로 button이나 input, select 태그</strong> 등을 들 수 있습니다.
<img src="https://velog.velcdn.com/images/kabonist_89/post/38fd0475-6b12-4791-9576-f5a66ef77c74/image.PNG" alt=""></p>
<p>inline-block 엘리먼트는 위와 같이 명시적으로 헤당 엘리먼트의 스타일을 display: inline-block로 지정해줘야 합니다. <strong>inline-block을 이용하면 여러 개의 엘리먼트를 한 줄에 정확히 원하는 너비만큼 배치할 수 있기 때문에 레이아웃에 활용</strong>할 수 있습니다.
<img src="https://velog.velcdn.com/images/kabonist_89/post/4519b844-dcac-49be-b6cf-3892db01f639/image.PNG" alt=""></p>
<blockquote>
<h2 id="block">block</h2>
</blockquote>
<p>display 속성이 block으로 지정된 엘리먼트는 <strong>전후 줄바꿈이 들어가 다른 엘리먼트들을 다른 줄로 밀어내고 혼자 한 줄</strong>을 차지합니다. <strong>대표적인 block 엘리먼트로 div 이나 p, h1 태그</strong> 등을 들 수 있습니다.</p>
<p>예를 들어, 여러 개의 block 엘리먼트 다음과 같이 마크업하면 매번 줄바꿈 되어 여러 줄에 보이게 됩니다.</p>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/e03e1107-918f-4fce-acd0-cd12d016ae0d/image.PNG" alt=""></p>
<p><strong>block 엘리먼트는 inline 엘리먼트와 달리 width, height, margin, padding 속성이 모두 반영이 됩니다.</strong></p>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/5d97f7a8-0f87-478e-bcf3-6d2334bbed00/image.PNG" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Css position 속성]]></title>
            <link>https://velog.io/@kabonist_89/Css-position-%EC%86%8D%EC%84%B1</link>
            <guid>https://velog.io/@kabonist_89/Css-position-%EC%86%8D%EC%84%B1</guid>
            <pubDate>Wed, 20 Jul 2022 04:41:43 GMT</pubDate>
            <description><![CDATA[<p><strong>position이란?</strong></p>
<blockquote>
<p>position 속성은 태그를 어떻게 위치시킬지를 정의하며, 아래의 5가지 값을 갖습니다.</p>
</blockquote>
<p> <strong>static:</strong> 기본값, 다른 태그와의 관계에 의해 자동으로 배치되며 위치를 임의로 설정해 줄 수 없습니다.</p>
<p><strong>absolute:</strong> 절대 좌표와 함께 위치를 지정해 줄 수 있습니다.</p>
<p><strong>relative:</strong> 원래 있던 위치를 기준으로 좌표를 지정합니다.</p>
<p><strong>fixed:</strong> 스크롤과 상관없이 항상 문서 최 좌측상단을 기준으로 좌표를 고정합니다.</p>
<p><strong>inherit:</strong> 부모 태그의 속성값을 상속받습니다.</p>
<p>좌표를 지정 해주기 위해서는 <strong>left, right, top, bottom</strong> 속성과 함께 사용합니다.</p>
<p>position을 <strong>absolute</strong>나 <strong>fixed</strong>로 설정시 가로 크기가 100%가 되는 block 태그의 특징이 사라지게 됩니다.</p>
<h2 id="사용-방법">사용 방법</h2>
<blockquote>
<p>#box1 { position:static;top: 20px; left: 30px; }
#box2 { position:absolute; top: 20px; left: 30px; }
#box3 { position:relative; top: 20px; left: 30px; }
#box4 { position:fixed; top: 20px; left: 30px; }
#box5 { position:inherit; top: 20px; left: 30px; }</p>
</blockquote>
<p>이러한 식으로 사용이 가능합니다.</p>
<blockquote>
<h2 id="relative">relative</h2>
</blockquote>
<p>요소를 일반적인 문서 흐름에 따라 배치한다.</p>
<p>요소 자기 자신의 원래 위치(static일 때의 위치)를 기준으로 배치한다.</p>
<p>원래 위치를 기준으로 위쪽(top), 아래쪽(bottom), 왼쪽(left), 오른쪽(right)에서 얼마만큼 떨어질 지 결정한다.</p>
<p><strong>위치를 이동하면서 다른 요소에 영향을 주지 않는다.</strong>
문서 상 원래 위치가 그대로 유지된다.</p>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/79021143-df08-4f56-8735-c44b7d0485b2/image.PNG" alt=""></p>
<p> 이런식으로 2개의 박스를 만들어 position:relative 주고 결과 값을 확인하면</p>
<p> <img src="https://velog.velcdn.com/images/kabonist_89/post/d0b002bb-2247-4e32-91df-a1294b792e19/image.PNG" alt=""></p>
<p>이와 같이 시작점은 같지만 위치를 지정해준 붉은색 박스와 두개가 겹쳐서 나타는걸 볼수가 있습니다.</p>
<blockquote>
<h2 id="absolute"><strong>absolute</strong></h2>
</blockquote>
<p>position 속성이 absolute로 설정되어 있는 엘리먼트는 웹페이지 상에 배치될 때 다음과 같은 특징을 갖습니다.</p>
<p><strong>부모 엘리먼트 내부에 속박되지 않고, 독립된 배치 문맥(positioning context)</strong>을 가지게 됩니다. 마치 포토샵 같은 그래픽 툴에서 새로운 레이어를 추가하는 효과에 비슷하다고 생각하시면 됩니다.
따라서, 엘리먼트를 기본적으로 브라우저 화면(viewport) 상에서 어디든지 원하는 위치에 자유롭게 배치시킬 수 있으며, 심지어 부모 엘리먼트 위에 겹쳐서 배치할 수도 있습니다.
<strong>단, 상위 엘리먼트 중에 position 속성이 relative인 엘리먼트가 있다면, 그 중 가장 가까운 엘리먼트의 내부에서만 엘리먼트를 자유롭게 배치할 수 있습니다.</strong> 즉, 전체 화면이 아닌 해당 상위 엘리먼트를 기준으로 offset 속성(top, left, bottom, right)이 적용됩니다.</p>
<p> <img src="https://velog.velcdn.com/images/kabonist_89/post/ae47a1bf-2de3-43e0-8c42-cbaa42b3d7fe/image.PNG" alt=""></p>
<p>이러한 방식으로 position : relative 로 요소 자기 자신의 원래 위치에서 감싸주는 solid 박스를 만들어준 뒤 position : absolute로 독립된 개체 박스를 만들어 주었습니다</p>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/abb23b81-ad8a-4f62-8e7b-493fe967d513/image.PNG" alt=""></p>
<p>위에 결과를 보시면 컨테이너라는 position : relative 요소 안에  absolute 박스가 
독립된 요소로 움직이는 것을 볼수 있습니다.</p>
<blockquote>
<h2 id="fixed">fixed</h2>
</blockquote>
<p>화면을 위아래로 스크롤하더라도 브라우저 <strong>화면의 특정 부분에 고정되어 움직이지 않는 UI</strong>를 본적이 있으신가요? 보통 라이브 채팅 버튼을 구현할 때 많이 쓰이는 기법인데요. position 속성을 fixed로 지정하면 이렇게 요소를 항상 고정된(fixed) 위치에 배치할 수 있습니다.</p>
<p>이게 가능한 이유는** fixed 속성값의 배치 기준이 자신이나 부모 요소가 아닌 뷰포트(viewport), 즉 브라우저 전체화면이기 때문인데요.** top, left, bottom, right 속성은 각각 브라우저 상단, 좌측, 하단, 우측으로 부터 해당 요소가 얼마나 떨어져있는지를 결정합니다.</p>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/29776668-f144-4dcb-840c-261a92e18b03/image.PNG" alt=""></p>
<p>위에 있는 코드를 보면 falst-child(상품1) , last-child(상품2)를 컬러가 있는 박스로 만들어 놓았고 
.coupon은 오른쪽 하단 제일 구석에 배치 
header는 왼쪽 상단 제일 구석에 배치하였다.
<img src="https://velog.velcdn.com/images/kabonist_89/post/14e27bf0-cf1f-494e-97cc-b7fe66bde23c/image.PNG" alt=""></p>
<p>fixed를 사용하여 배치 하였기 때문에 <strong>고정</strong>이 되어 있으며 스크롤을 내려도 상단 사과 모양(header)과 오른쪽 하단에 있는 &quot;오늘만 할인!!&quot;(.coupon) 부분은 사라지지 않고 &quot;상품1&quot; &quot;상품2&quot;만 보이지 않는것을 확인 할 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Semantic Web, Semantic Tags]]></title>
            <link>https://velog.io/@kabonist_89/Semantic-Web-Semantic-Tags</link>
            <guid>https://velog.io/@kabonist_89/Semantic-Web-Semantic-Tags</guid>
            <pubDate>Tue, 19 Jul 2022 01:57:06 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="semantic-web">Semantic Web</h1>
</blockquote>
<p>시맨틱 웹(Semantic Web)은 &#39;의미론적인 웹&#39;이라는 뜻으로,현재의 인터넷과 같은 분산환경에서 리소스(웹 문서, 각종 화일, 서비스 등)에 대한 정보와 자원 사이의 관계-의미 정보(Semanteme)를 기계(컴퓨터)가 처리할 수 있는 온톨로지 형태로 표현하고, 이를 자동화된 기계(컴퓨터)가 처리하도록 하는 프레임워크이자 기술이다. 웹의 창시자인 팀 버너스리가 1998년 제안했고 현재 W3C에 의해 표준화 작업이 진행 중이다</p>
<p>SEO(검색엔진 최적화: Search Engine Optimization)같은 마케팅 도구를 사용하여 검색엔진이 본인의 웹사이트를 검색하기 알맞은 구조로 웹사이트를 조정하기도 하는데, 이것은 기본적으로 검색엔진이 웹사이트 정보를 어떻게 수집하는지 아는 것으로 부터 시작된다.</p>
<p>검색엔진은 로봇(Robot)이라는 프로그램을 이용해 매일 전세계의 웹사이트 정보를 수집한다.(이것을 크롤링이라 하며 검색엔진의 크롤러가 이를 수행한다.) 그리고 검색 사이트 이용자가 검색할 만한 키워드를 미리 예상하여 검색 키워드에 대응하는 인덱스(색인)을 만들어 둔다.(이것을 인덱싱이라 하며 검색엔진의 인덱서가 이를 수행한다.)</p>
<p>인덱스를 생성할 때 사용되는 정보는 검색 로봇이 수집한 정보인데 결국 웹사이트의 HTML 코드이다. 즉, 검색 엔진은 HTML 코드 만으로 그 의미를 인지하여야 하는데 이때 시맨틱 요소(Semantic element)를 해석하게 된다.</p>
<p>HTML으로 작성된 문서는 컴퓨터가 해석할 수 있는 메타데이터와 사람이 사용하는 자연어 문장이 뒤섞여 있다. 아래 코드를 보면 1행과 2행은 브라우저에서 동일한 외형을 갖는다. 이는 h1 태그의 디폴트 스타일이 1행과 같기 때문이다.</p>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/36762d71-4e5e-47d3-ba13-0b5d950b9bdd/image.PNG" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/7e9b3bda-8eb9-4e5e-8093-4e47194a69cf/image.PNG" alt=""></p>
<p>그러나 <strong>1행</strong>의 요소는 의미론적으로 어떤 의미도 가지고 있지 않다. <strong>즉, 의도가 명확하지 않다.</strong> 개발자가 의도한 요소의 의미를 명확하게 나타내지 않고 다만 폰트 크기와 볼드체를 지정하는 메타데이터만을 브라우저에게 알리고 있다. 그러나 <strong>2행</strong>의 요소는 header(제목) 중 가장 상위 레벨이라는 의미를 내포하고 있어서 개발자가 의도한 요소의 의미가 명확히 드러나고 있다.이것은 <strong>코드의 가독성</strong>을 높이고 유지보수를 쉽게한다.</p>
<p>검색엔진은 대체로 h1 요소 내의 콘텐츠를 웹문서의 중요한 제목으로 인식하고 인덱스에 포함시킬 확률이 높다. 또한 사람도 h1 요소 내의 콘텐츠가 제목임을 인식할 수 있다. 시맨틱 요소로 구성되어 있는 웹페이지는 검색엔진에 보다 의미론적으로 문서 정보를 전달할 수 있고 검색엔진 또한 시맨틱 요소를 이용하여 보다 효과적인 크롤링과 인덱싱이 가능해졌다. 즉, 시맨틱 태그란 브라우저, 검색엔진, 개발자 모두에게 콘텐츠의 의미를 명확히 설명하는 역할을 한다. 시맨틱 태그에 의해 컴퓨터가 HTML 요소의 의미를 보다 명확히 해석하고 그 데이터를 활용할 수 있는 시맨틱 웹이 실현될 수 있다.</p>
<p>시맨틱 웹이란 웹에 존재하는 수많은 웹페이지들에 메타데이터(Metadata)를 부여하여, 기존의 잡다한 데이터 집합이었던 웹페이지를 ‘의미’와 ‘관련성’을 가지는 거대한 데이터베이스로 구축하고자 하는 발상이다.</p>
<blockquote>
<h1 id="semantic-tags">Semantic Tags</h1>
</blockquote>
<p>시멘틱 테그는 &quot;의미가 있는 태그&quot;라는 뜻이다. 즉, HTML tag들 중에서도 나름의 의미가 있는 태그들을 말한다.</p>
<p>시맨틱 요소는 자신의 의미를 브라우저와 개발자 모두에게 명확하게 설명한다.</p>
<p>non-semantic 요소들의 예: div 와 span - 자신의 컨텐츠에 대해 아무것도 설명해주지 않는다.</p>
<p>semantic 요소들의 예: form, table, article - 자신의 컨텐츠를 명확하게 정의한다.</p>
<p>더 쉽게 설명을 하자면 웹 브라우저 HTML 소스 코드만 보고 어느부분이 제목인지 어느 부분이 메인에 속하는지 쉽게 알 수 있습니다. 또한 검색 엔진이 검색을 수행할때  HTML 내에 있는 태그를 분석하는데, 태그들의 의미가 분명하다면 검색 엔진 입장에서 구분하기 쉬워지며 div로만 되어있을시 어느 영역인지 파악하기 어려움이 있지만 (헤더,푸터,섹션등) 시멘틱 태그를 이용하면 유지보수를 할 때 다른 작업자가 코드를 파악하고 접근하기가 유용합니다.
<img src="https://velog.velcdn.com/images/kabonist_89/post/614ee4bf-82c0-442e-b544-5ef97b05cbd6/image.PNG" alt=""></p>
<p>이와 같이 통일되어 있지 않은 경우 다른 작업자가 한눈에 파악하는것에 어려움이 있었습니다.
이러한 부분을 시맨틱 태그를 이용하면 아주 깔끔하게 볼 수가 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/3ba0296b-fe8f-48fc-bf77-694629cc72bf/image.PNG" alt=""></p>
<p>위 HTML5와 같이 가독성이 있고 훨신 깔끔해진 내용으로 코드를 확인할 수 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/032921c8-7494-4034-ad87-4ccb73db0c72/image.PNG" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[CSS 속성 정리 #1<상시 업데이트중..>]]></title>
            <link>https://velog.io/@kabonist_89/CSS-%EC%86%8D%EC%84%B1-%EC%A0%95%EB%A6%AC-1%ED%95%AD%EC%8B%9C-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8%EC%A4%91</link>
            <guid>https://velog.io/@kabonist_89/CSS-%EC%86%8D%EC%84%B1-%EC%A0%95%EB%A6%AC-1%ED%95%AD%EC%8B%9C-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8%EC%A4%91</guid>
            <pubDate>Mon, 04 Jul 2022 08:03:38 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h2 id="width--height">width / height</h2>
</blockquote>
<p>%로 width,height 값을 표현할때는 바로 상위 태그에 있는 width, height값의 %로 설정이 된다
width은 가로길이, height은 세로길이를 의미</p>
<p>◆ auto : 기본값, 브라우저가 계산한 너비
◆ px : 픽셀
◆ % : 부모 요소에 상대적인 너비
◆ initial : 기본값으로 초기화
◆ inherit : 부모 요소로부터 상속 받은 값</p>
<blockquote>
<h2 id="margin-padding">margin, padding</h2>
</blockquote>
<p>margin은 바깥쪽 여백, padding은 안쪽 여백을 의미
두 속성은 방향(top, right, bottom, left)을 지정할 수 있고 width,height 속성과 마찬가지로 px, auto 등 값을 사용한다.</p>
<p><strong><em>예제</em></strong></p>
<p>margin:10px -&gt; 상하좌우 모두 10px 여백
margin:20px 10px -&gt; 상하 20px , 좌우 10px 여백
margin:40px 30px 20px 10px -&gt; 위 40px, 오른쪽 20px, 아래 20px, 왼쪽10px 여백
margin:40px 30px 10px -&gt; 위 40px, 좌우 30px, 아래 10px 여백</p>
<blockquote>
<h2 id="box-sizing">box-sizing</h2>
</blockquote>
<p>width 와 height 를 원하는 값으로 지정해도, padding 이나 border 옵션을 주게 되면 가로길이나 세로길이가 그만큼 더해져서 요소가 커진다. 이는 box-sizing 옵션으로 바꿀 수 있다.</p>
<p>content-box : default, width를 지정하여도 padding이나 다른 속성들이 들어오면 요소가 그만큼 커짐</p>
<p><em><strong>예제</strong></em></p>
<p>.a{
box-sizing: content-box;
width: 100%;
border: solid #5B6DCD 10px;
padding: 5px;}
<img src="https://velog.velcdn.com/images/kabonist_89/post/09822516-ac5b-42a8-a832-462d215ce963/image.PNG" alt=""></p>
<p>border-box : 다른 속성을 주어도 지정해둔 width와 height의 크기를 벗어나지 않음</p>
<p><em><strong>예제</strong></em></p>
<p>.a{
box-sizing: border-box;
width: 100%;
border: solid #5B6DCD 10px;
padding: 5px;
}
<img src="https://velog.velcdn.com/images/kabonist_89/post/5487591c-f735-4a6c-b1a6-618222c3eab2/image.PNG" alt=""></p>
<blockquote>
<h2 id="color">color</h2>
</blockquote>
<p>CSS <color> 자료형은 색을 나타냅니다. <color>는 이 색이 배경과 어떻게 합성되어야 하는지 나타내는 알파 채널 투명도 값도 가질 수 있습니다.
글씨와 글씨 장식(밑줄, 윗줄, 취소선 등)을 그릴 때 사용할 색입니다.</p>
<p>◆ inherit : 기본값 , 부모의 색상을 가져옴
◆ red 또는 blue : 이미 css로 정의된 색상
◆ #000 또는 #FFFFFF : 16진수의 색상코드
◆ rgb(255,255,255) : rgb 색상
◆ rgba(200,100,150,0.5) : 알파(투명도)가 적용된 rgba 색상</p>
<blockquote>
<h2 id="font">font</h2>
</blockquote>
<p>글자의 폰트를 정의</p>
<p>◆ font-style : 기울기 등의 스타일 지정</p>
<p>◆ nomal : 기본</p>
<p>◆ italic : 기울기</p>
<p>◆ font-weight : 글자 두께
100~900 사이의 숫자를 통해 설정하거나, 지정된 값을 사용한다.
lighter (100)
normal (400)
bold (700)
bolder (900)</p>
<p>◆ font-variant : 글꼴 변형 (소문자를 대문자로 바꾸는 등)</p>
<p>◆ font-size : 글자 크기
px 나 em(반응형웹에서 다룬다)등을 사용</p>
<p>◆ line-height : 줄 간격</p>
<p>◆ font-family : 글꼴
통상적으로 구글폰트에서 가져와서 head내부에 link태그로 External방식으로 적용시킴</p>
<blockquote>
<h2 id="text-align">text-align</h2>
</blockquote>
<p>CSS text-align 속성은 블록 요소나 표의 칸 상자의 가로 정렬을 설정합니다. 즉 vertical-align과 동일하나 세로가 아닌 가로 방향으로 동작합니다.</p>
<p>◆ left/ right/ center/ end/ jutify</p>
<p><em><strong>예제</strong></em>   <strong>---- text-align : justify;</strong>
  <img src="https://velog.velcdn.com/images/kabonist_89/post/e9f41875-8f31-4681-98bb-14bfe3eb2c43/image.PNG" alt=""></p>
<blockquote>
<h2 id="background">background</h2>
</blockquote>
<p>  배경색을 지정</p>
<p>◆ background-color : 배경 색
color의 값과 동일</p>
<p>◆ background-image : 배경 이미지</p>
<p><strong><em>예제</em></strong>
background-image : url(&quot;이미지 경로나 이미지url주소&quot;)</p>
<p>◆ background-repeat : 배경 이미지 반복 여부</p>
<p>  no-repeat : 반복안함</p>
<p>  repeat-x : x축으로 반복</p>
<p>  repeat-y : y축으로 반복  </p>
<p>  repeat : 모든 방향으로 반복</p>
<p>◆ background-position : 배경 이미지 위치
숫자값 (x , y)
left
top
center
bottom
right</p>
<p><em><strong>예제</strong></em> ---- <strong>background-position : 25% 75%;</strong></p>
<p>  <img src="https://velog.velcdn.com/images/kabonist_89/post/0b81fd1f-90b6-4af5-8496-80e71d2e4c0e/image.PNG" alt=""></p>
<blockquote>
<h2 id="border">border</h2>
</blockquote>
<p>테두리를 지정</p>
<p>◆ border-width : 테두리의 두께
px 단위사용</p>
<p>◆ border-style : 테두리의 스타일
solid : 실선
dotted : 점선
dashed : 조금긴 점선</p>
<p>◆ border-color : 테두리의 색상
color 값과 동일함</p>
<p><strong><em>예제 ---</em></strong> <strong>border : 10px solid black ;</strong></p>
<p>  <img src="https://velog.velcdn.com/images/kabonist_89/post/07e7db58-a516-415f-9188-2778138064f2/image.PNG" alt=""></p>
<blockquote>
<h2 id="border-radius">border-radius</h2>
</blockquote>
<p>테두리를 둥글게 만들어주는 속성이며 px와 % 단위를 사용한다.
border 속성 없이도 사용 가능하며 4개 모서리의 값을 띄어 쓰면 left -&gt; top -&gt; right -&gt; bottom으로 각자 다른값을 지정한다.</p>
<p><strong><em>예제</em>---border-radius : 190px 100px 200px 90px;</strong></p>
<p>  <img src="https://velog.velcdn.com/images/kabonist_89/post/4f77246b-5702-4f3f-a0a5-0cf77a004e32/image.PNG" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ Array.reverse()]]></title>
            <link>https://velog.io/@kabonist_89/Array.reverse</link>
            <guid>https://velog.io/@kabonist_89/Array.reverse</guid>
            <pubDate>Mon, 04 Jul 2022 07:05:00 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h4 id="arrayprototypereverse">Array.prototype.reverse()</h4>
</blockquote>
<p>reverse() 메서드는 배열의 순서를 반전합니다. 첫 번째 요소는 마지막 요소가 되며 마지막 요소는 첫 번째 요소가 됩니다.</p>
<h4 id="ex">ex)</h4>
<p>const array1 = [&#39;one&#39;, &#39;two&#39;, &#39;three&#39;];
console.log(&#39;array1:&#39;, array1);</p>
<p>//결과 &quot;array1:&quot; Array &quot;one&quot;, &quot;two&quot;, &quot;three&quot;</p>
<p>const reversed = array1.reverse();
console.log(&#39;reversed:&#39;, reversed);</p>
<p>// 결과 &quot;reversed:&quot; Array &quot;three&quot;, &quot;two&quot;, &quot;one&quot;</p>
<p>console.log(&#39;array1:&#39;, array1);</p>
<p>// 결과 &quot;array1:&quot; Array &quot;three&quot;, &quot;two&quot;, &quot;one&quot;
//reversed에 있는 array1가 이미 변환했기 때문에 &quot;three&quot;, &quot;two&quot;, &quot;one&quot;가 됨</p>
<blockquote>
<h4 id="배열-요소-반전하기">배열 요소 반전하기</h4>
</blockquote>
<p>다음 예시는 3개의 요소가 든 myArray 배열을 만든 후, 반전시킵니다.</p>
<p>const a = [1, 2, 3];
console.log(a); //결과 1, 2, 3</p>
<p>a.reverse();
console.log(a); //결과 3, 2, 1</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[String.split()]]></title>
            <link>https://velog.io/@kabonist_89/String.split</link>
            <guid>https://velog.io/@kabonist_89/String.split</guid>
            <pubDate>Mon, 04 Jul 2022 06:41:35 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h4 id="stringsplit">String.split()</h4>
</blockquote>
<p>split() 메서드는 String 객체를 지정한 구분자를 이용하여 여러 개의 문자열로 나눕니다.
배열의 경우 첫번째가 1이 아닌 0부터 시작한다.(0,1,2,3,4,5)</p>
<h4 id="ex">ex)</h4>
<p>const str = &#39;The quick brown fox jumps over the lazy dog.&#39;;</p>
<p>const words = str.split(&#39; &#39;); 
console.log(words[3]);</p>
<p>// 결과</p>
<p>&quot;fox&quot;  // 3번째 문자열 output</p>
<p>const chars = str.split(&#39;&#39;);
console.log(chars[8]);</p>
<p>// 결과 </p>
<p>&quot;k&quot; // 8번째 텍스트 output(띄어쓰기도 문자열로 인식)</p>
<p>const strCopy = str.split();
console.log(strCopy);</p>
<p>// 결과</p>
<p>Array [&quot;The quick brown fox jumps over the lazy dog.&quot;]// 배열 전체를 복사후 output</p>
<h4 id="예제">예제</h4>
<p>빈 문자열이 주어졌을 경우 split()은 빈 배열이 아니라 빈 문자열을 포함한 배열을 반환합니다. 문자열과 separator가 모두 빈 문자열일 때는 빈 배열을 반환합니다.</p>
<p>const myString = &#39;&#39;;
const splits = myString.split();</p>
<p>console.log(splits);</p>
<p>//결과</p>
<p>↪ [&quot;&quot;]</p>
<blockquote>
<h4 id="문자열에서-공백-제거하기">문자열에서 공백 제거하기</h4>
</blockquote>
<p>다음 예제에서 split()은 세미콜론 앞뒤에 각각 0개 이상의 공백이 있는 부분 문자열을 찾고, 있을 경우 문자열에서 세미콜론과 공백을 제거합니다. split()의 결과로 반환된 배열은  nameList에 저장됩니다.</p>
<p>var names = &#39;Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand &#39;;</p>
<p>console.log(names);</p>
<p>var re = /\s<em>(?:;|$)\s</em>/;
var nameList = names.split(re);</p>
<p>console.log(nameList);</p>
<p>//결과</p>
<p>&quot;Harry Trump&quot;, &quot;Fred Barney&quot;, &quot;Helen Rigby&quot;, &quot;Bill Abel&quot;, &quot;Chris Hand&quot;, &quot;&quot; </p>
<blockquote>
<h4 id="끊는-횟수-제한하기">끊는 횟수 제한하기</h4>
</blockquote>
<p>다음 예제에서 split()은 문자열을 공백으로 끊고 처음 3개의 문자열을 반환합니다.</p>
<p>var myString = &#39;Hello World. How are you doing?&#39;;
var splits = myString.split(&#39; &#39;, 3);  </p>
<p>console.log(splits);</p>
<p>//결과</p>
<p>&quot;Hello&quot;, &quot;World.&quot;, &quot;How&quot;</p>
<blockquote>
<h4 id="배열을-구분자로-사용하기">배열을 구분자로 사용하기</h4>
</blockquote>
<p>var myString = &#39;this|is|a|Test&#39;;
var splits = myString.split([&#39;|&#39;]); // &quot;ㅣ&quot;를 빼고 문자를 반환한다.</p>
<p>console.log(splits); </p>
<p>//결과 </p>
<p>&quot;this&quot;, &quot;is&quot;, &quot;a&quot;, &quot;Test&quot; </p>
<p>var myString = &#39;ca,bc,a,bca,bca,bc&#39;;</p>
<p>var splits = myString.split([&#39;a&#39;,&#39;b&#39;]);//a,b를 빼고 문자를 반환한다</p>
<p>console.log(splits);  </p>
<p>//결과&quot;c&quot;, &quot;c,&quot;, &quot;c&quot;, &quot;c&quot;, &quot;c&quot;</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Array.join()]]></title>
            <link>https://velog.io/@kabonist_89/Array.join</link>
            <guid>https://velog.io/@kabonist_89/Array.join</guid>
            <pubDate>Mon, 04 Jul 2022 05:13:59 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h4 id="arrayjoin">Array.join()</h4>
</blockquote>
<p>join() 메서드는 배열의 모든 요소를 연결해 하나의 문자열로 만듭니다.
&quot; &quot;안에 있는 문자 /숫자/기호 어떤것을 넣어도 문자열로 인식</p>
<p>ex)</p>
<p>const elements = [&#39;black&#39;,&#39;red&#39;,&#39;white&#39;];</p>
<p>console.log(elements.join())  = elements 배열에 있는 모든 문자열을 불러옴
//output : &quot;black,red,white&quot; </p>
<p>console.log(elements.join(&#39;&#39;))  = 문자열이 다 합쳐짐
//output : &quot;blackredwhite&quot; </p>
<p>console.log(elements.join(&#39;-&#39;))  = &#39;-&#39;문자열이 되어 ,이 &quot;-&quot;로 변경됨
//output : &quot;black-red-white&quot;</p>
<blockquote>
<h4 id="응용-예제">응용 예제</h4>
</blockquote>
<p>var a = [&#39;바다&#39;,&#39;하늘&#39;,&#39;땅&#39;]</p>
<p>var mavar1 = a.join()      ///output = &#39;바다,하늘,땅&#39;
var mavar2 = a.join(&quot;, &quot;)///output = &#39;바다, 하늘, 땅&#39; 
var mavar3 = a.join(&quot;+&quot;)      ///output = &#39;바다+하늘+땅&#39; 
var mavar4 = a.join(&quot;&quot;)    ///output = &#39;바다하늘땅&#39;</p>
<blockquote>
<h4 id="설명">설명</h4>
</blockquote>
<p>var라는 함수에 변수 a를 지정한 후 배열변수를 지정해준다.
var라는 함수에 mavar1 이라는 변수를 지정해준 후 var a 에 있는 배열 &quot;바다&quot;,&quot;하늘&quot;,&quot;땅&quot;을 변수a로 불러온 뒤 join이라는 함수를 통하여 배열 문자열을 합쳐준다.</p>
<h4 id="1">1.</h4>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/fd43c79d-13a3-4b1a-9d43-a96aef62f753/image.PNG" alt=""></p>
<h4 id="2">2.</h4>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/96148a01-4e8b-4642-95da-a2828dc5d8c3/image.PNG" alt=""></p>
<h4 id="3">3.</h4>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/8562be98-ef24-4fe6-b9b1-f5a36165fe01/image.PNG" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[자기소개서 첫 페이지 기술.]]></title>
            <link>https://velog.io/@kabonist_89/%EC%9E%90%EA%B8%B0%EC%86%8C%EA%B0%9C-%EC%B2%AB-%ED%8E%98%EC%9D%B4%EC%A7%80</link>
            <guid>https://velog.io/@kabonist_89/%EC%9E%90%EA%B8%B0%EC%86%8C%EA%B0%9C-%EC%B2%AB-%ED%8E%98%EC%9D%B4%EC%A7%80</guid>
            <pubDate>Wed, 29 Jun 2022 05:33:26 GMT</pubDate>
            <description><![CDATA[<h3 id="tutle"><strong>Tutle</strong></h3>
<p>이부분은 상단 메뉴바에 어떤 페이지에 접속했는지 알려줄수있는 부분이다. 
<img src="https://velog.velcdn.com/images/kabonist_89/post/326e4f9d-05b3-40d6-a96c-c043f732f0a9/image.PNG" alt=""></p>
<h3 id="width"><strong>width</strong></h3>
<p>CSS width 속성은 요소의 너비를 설정합니다. 기본값은 콘텐츠 영역의 너비이지만, box-sizing이 border-box라면 테두리 영역의 너비를 설정합니다.</p>
<p>예를 들어 원하는 텍스트 또는 이미지에ss = &quot;abc&quot; 지정 후 CSS에서 .abc { width : 100;} 이와 같이 지정해줄 경우 100만큼의 너비가 지정된다
<img src="https://velog.velcdn.com/images/kabonist_89/post/872f0be3-eb8c-402e-8a55-2fa0d0450311/image.PNG" alt=""></p>
<h3 id="ol"><strong>ol</strong></h3>
<p> ol 요소는 정렬된 목록을 나타냅니다. 보통 숫자 목록으로 표현합니다.
    왼쪽 아바타 및 이름 전화번호를 넣어 정렬해 주었습니다.</p>
<h3 id="avatar"><strong>Avatar</strong></h3>
<p>아바타로 이미지를 생성합니다.</p>
<p>제 얼굴을 아바타 이미지로 넣어주었습니다.</p>
<p>예를 들어 이미지 지정후 img alt=&quot;Avatar&quot; class=&quot;avatar&quot;
class 지정후 CSS에서 설정합니다.</p>
<p>  .avatar {
    vertical-align: middle;(이미지 위치 지정 : top ,bottom 가능)
    width: 100px;(이미지 넓이 지정)
    height: 100px;(이미지 높이 지정)
    border-radius: 50%;} (이미지 모깍기)
    <img src="https://velog.velcdn.com/images/kabonist_89/post/871e956f-0391-4804-9385-b7cdafcf7aab/image.PNG" alt=""></p>
<h3 id="grid"><strong>grid</strong></h3>
<p>CSS Grid(그리드)는 2차원(행과 열)의 레이아웃을 말한다.
Grid는 컨테이너에 display: grid; 를 설정하는 것으로 시작합니다.</p>
<p>CSS 속성 은 행 이름을 정의하고 그리드 열의grid-template-columns 크기 조정 기능을 추적합니다 </p>
<p>현 페이지에 사용한 이유는 그리드 안에 있는 글자의 열을 조정 하였습니다.</p>
<p>grid-template-rows는 행(row)의 배치
grid-template-columns는 열(column)의 배치</p>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/30e5bbaf-5b22-4957-ae4d-5ab27402e98f/image.PNG" alt=""></p>
<h3 id="background">Background</h3>
<p>CSS background 단축 속성은 색상, 이미지, 원점, 크기, 반복 등 여러 배경 스타일을 한 번에 지정합니다.</p>
<p>현재 페이지는 &quot;bgi&quot; 라는 이미지 파일을 가져와 밋밋한 바탕화면에 그라데이션 이미지를 넣어주었습니다.</p>
<p>클래스 지정 후 CSS에서 설정합니다.
body {
          height: 100vh;
          background-image: url(&#39;bgi.jpg&#39;);
          background-repeat : no-repeat;
          background-size : cover;(배경 이미지의 크기를 설정합니다. 그대로 두거나, 늘리고 줄이거나, 공간에 맞출 수 있습니다. ex = auto,contain,30% 또는 30px,40px 로 설정 가능)
        }
<img src="https://velog.velcdn.com/images/kabonist_89/post/573139c9-5c64-4859-b5d4-fb878634bbcf/image.PNG" alt=""></p>
<h3 id="border"><strong>border</strong></h3>
<p>CSS border 단축 속성은 요소의 테두리를 설정합니다. border-width, border-style, border-color의 값을 설정합니다.</p>
<p>h1 tag text 를 작성하고 텍스트 밑으로 border-bottom 라인을 지정해주었으며 
ol tag 에 border-right 라인을 지정해 일부분 박스모양 라인을 만들어주었습니다.</p>
<p> border-bottom: 5px solid white;(px = 선의 두께, solid=테두리 스타일,색상)
  margin: 0;(요소의 네 방향 바깥 여백 영역을 설정)
  padding: 40px;(요소의 네 방향 안쪽 여백 영역을 설정)
  }</p>
<p><img src="https://velog.velcdn.com/images/kabonist_89/post/20d0c4ae-9575-491f-8db1-a7764fa4f7aa/image.PNG" alt=""></p>
<h3 id="br"><strong>br</strong></h3>
<p>텍스트 안에 줄바꿈
주 내용을 다른 태그 추가 없이 줄바꿈만 지정해주었습니다.
<img src="https://velog.velcdn.com/images/kabonist_89/post/2279e71f-7255-4311-8264-77c2ade39c6b/image.PNG" alt=""></p>
<blockquote>
<h4 id="strongcenter최종완성-페이지strong"><strong><center><em>최종완성 페이지</em></strong></h4>
</blockquote>
<p>  페이지 링크 : <a href="https://ryugiseon.github.io/First/index.HTML">https://ryugiseon.github.io/First/index.HTML</a>
  <img src="https://velog.velcdn.com/images/kabonist_89/post/e24675bc-0070-4d9c-bd1c-bccd49bcf3dd/image.PNG" alt=""></p>
]]></description>
        </item>
    </channel>
</rss>