<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>gyeojin_1.log</title>
        <link>https://velog.io/</link>
        <description>검색의 굴레에 갇힌 신입개발자</description>
        <lastBuildDate>Tue, 08 Feb 2022 03:07:12 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>gyeojin_1.log</title>
            <url>https://images.velog.io/images/gyeojin_1/profile/12b57624-e823-4083-ba65-86686e4100d5/social.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. gyeojin_1.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/gyeojin_1" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[(Updating) CSS 기능 아카이빙]]></title>
            <link>https://velog.io/@gyeojin_1/Updating-CSS-%EA%B8%B0%EB%8A%A5-%EC%95%84%EC%B9%B4%EC%9D%B4%EB%B9%99</link>
            <guid>https://velog.io/@gyeojin_1/Updating-CSS-%EA%B8%B0%EB%8A%A5-%EC%95%84%EC%B9%B4%EC%9D%B4%EB%B9%99</guid>
            <pubDate>Tue, 08 Feb 2022 03:07:12 GMT</pubDate>
            <description><![CDATA[<h2 id="css-기능">CSS 기능</h2>
<h4 id="몰랐던-기능이-너무-많아-현타-와서-하는-아카이빙">몰랐던 기능이 너무 많아 현타 와서 하는 아카이빙.</h4>
<br>

<hr>
<p>👀 목차 👀
1.mix-blend-mode
2.animation + keyframes
3.background-attachment
4.svg animation</p>
<hr>
<br>

<p><strong><em>mix-blend-mode</em></strong></p>
<ul>
<li>어느 요소의 컨텐츠가 자신의 배경 및 부모와 어떻게 혼합되어야 하는지 지정.<ul>
<li>주로 마우스 호버 인터렉션에서 씀.</li>
<li>참고 : <a href="https://developer.mozilla.org/ko/docs/Web/CSS/mix-blend-mode">MDN 문서</a>
<img src="https://images.velog.io/images/gyeojin_1/post/e4abdf9d-4f52-4c08-914e-c9d08bd7b0e7/image.png" alt=""></li>
</ul>
</li>
</ul>
<hr>
<p><strong><em>animate &amp; keyframes + 축약형</em></strong></p>
<ul>
<li>모르는 건 아닌데, 하도 까먹어서 적어둠<ul>
<li><strong>animation 축약형</strong>
<strong>animation</strong>: animation-name / animation-duration / animation-delay / animation-iteration-count / animation-timing-function / animation-direction / fill-mode play-state;<ul>
<li>animation-name : @keyframes 이름 
animation-duratuion : 타임 프레임의 길이, 키프레임이 동작하는 시간을 설정할 때 사용
animation-delay : 애니메이션을 시작하기 전 지연시간 설정
animation-iteration-count : 반복 횟수 지정
animation-timing-function : 애니메이션 속도 조절 / 그래프 ( linear / ease / ease-in / ease-out / ease-in-out / cubic-bezier )
animation-direction : 반복 방향 설정 ( 정방향 / 역방향 / 번갈아가며)
animation-fill-mode : 애니메이션 시작 / 끝 상태 제어 ( none / forwords / backwords / both )
animation-play-state : 애니메이션 실행 중에 중지되었을 때 계속 진행하거나 멈추게 할 것인지를 지정 (running / paused)<br></li>
</ul>
</li>
<li><strong>keyframes 문법</strong>
name - keyframes가 적용될 이름을 정합니다.
0% - 시작할 때 적용될 구간
100% - 끝날 때 적용될 구간<pre><code>@keyframes name{
 0%{ }
 100%{ }
}</code></pre></li>
</ul>
</li>
</ul>
<hr>
<p><strong><em>background-attachment</em></strong></p>
<ul>
<li>배경이미지의 스크롤 여부를 결정하는 css<ul>
<li>scroll : 선택한 요소와 같이 움직입니다. 내용을 스크롤하면 배경 이미지는 스크롤되지 않습니다.
fixed : 움직이지 않습니다.
local : 선택한 요소와 같이 움직입니다. 내용을 스크롤하면 배경 이미지도 스크롤됩니다.
initial : 기본값으로 설정합니다.
inherit : 부모 요소의 속성값을 상속받습니다.</li>
</ul>
</li>
</ul>
<hr>
<p><strong><em>svg animation</em></strong></p>
<ul>
<li>step<pre><code>1. 일러스트 작업 -&gt; stroke 상태에서 svg파일로 내보내기
2. https://jakearchibald.github.io/svgomg/ : svg 경량화 및 코드 정리해주기
3. css -&gt; stroke-dasharray(점선을 만들어주는 속성), stroke-dashoffset(어디부터 시작할 것인지 정해주는 속성) 값을 조절하여 애니메이션 입혀주기</code></pre></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[👀크로스 브라우징에 관한 고찰]]></title>
            <link>https://velog.io/@gyeojin_1/%ED%81%AC%EB%A1%9C%EC%8A%A4-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A7%95%EC%97%90-%EA%B4%80%ED%95%9C-%EA%B3%A0%EC%B0%B0</link>
            <guid>https://velog.io/@gyeojin_1/%ED%81%AC%EB%A1%9C%EC%8A%A4-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A7%95%EC%97%90-%EA%B4%80%ED%95%9C-%EA%B3%A0%EC%B0%B0</guid>
            <pubDate>Mon, 07 Feb 2022 08:04:25 GMT</pubDate>
            <description><![CDATA[<h2 id="크로스-브라우징cross-browsing">크로스 브라우징(Cross Browsing)</h2>
<blockquote>
<p> 표준 웹 기술을 채용하여 다른 기종 or 플랫폼에 따라 달리 구현되는 기술을 비슷하게 만듦과 동시에, 어느 한쪽에 최적화되어 치우치지 않도록 웹 페이지를 제작하는 기법을 말하는 것.
 또한, 지원할 수 없는 다른 웹 브라우저를 위한 장치를 구현하여 모든 웹 브라우저 사용자가 방문했을 때 정보로서의 소외감을 느끼지 않도록 하는 방법론적 가이드를 의미하는 것이다.</p>
</blockquote>
<ul>
<li><p>왜 맞춰야 하나요?
-각각의 브라우저의 렌더링 엔진이 다르기 때문.</p>
<ul>
<li>ex ) display: flex;</li>
<li><blockquote>
<p>MDN 문서의 하단에는 브라우저 호환성을 다루고 있음. 이처럼 브라우저 마다 지원하는 경우가 전부 다르기 때문에, 작업자가 의도한대로 브라우저의 부침 없이 동작하게 하려면 필요함.
<img src="https://images.velog.io/images/gyeojin_1/post/e0721a60-a696-4eba-bde4-4cc12b64b75b/image.png" alt=""></p>
</blockquote>
</li>
</ul>
</li>
<li><p>어떻게 맞추나요?
-<strong>무조건 동일하게 맞추는 것</strong>이 아님을 기억할 것. 동일하게 맞출 수도 없음🤔
디폴트 기능과 유사하게 맞춰야 한다.
-<strong>기능을 주로 선보일 브라우저(이하 디폴트 브라우저)를 파악</strong>하고 있어야 한다. (사용이 적은 브라우저 맞추다 시간 보내지 말란 이야기.🤦‍♀️)</p>
<hr>
<ul>
<li>브라우징 방법✍</li>
</ul>
<ol>
<li>사전에 방지</li>
</ol>
<p>-<a href="https://caniuse.com/">Can I Use</a> 활용 : CSS 속성을 입력하면 어느 브라우저에서 동작하는지 알려주는 사이트.</p>
<pre><code>  &lt;br&gt;</code></pre><ol start="2">
<li>CSS 초기화 작업</li>
</ol>
<p>-reset.css 등 : 브라우저마다 차이나는 기본 스타일 값들을 초기화.</p>
<pre><code> &lt;br&gt;</code></pre><ol start="3">
<li>보수적으로 코딩하기</li>
</ol>
<p>-작업 시작부터 대부분의 브라우저에서 호환되는 기능과 코드를 사용하는 것.</p>
<pre><code>  &lt;br&gt;</code></pre><ol start="4">
<li>Vender Prefix</li>
</ol>
<p>-크로스 브라우저를 개발하기 위해 CSS 속성 앞에 브라우저별 접두사를 붙이는 것</p>
<ul>
<li>접두어 브라우저<ul>
<li>-webkit- : 구글, 사파리, ios 사파리 안드로이드</li>
<li>-moz- : 파이어폭스</li>
<li>-o- : 오페라</li>
<li>-ms- : 익스플로러<br></li>
</ul>
<ol start="5">
<li>메타테그 이용<pre><code>&lt;head&gt;
// ...
&lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot; /&gt;
//...
&lt;/head&gt;</code></pre></li>
</ol>
</li>
</ul>
</li>
<li><p>head 요소 안에 넣어두면 IE가 그 해당 문서를 읽고 원하는 모드로 렌더링을 하게 해줌.</p>
</li>
<li><p>content=&quot;IE=edge&quot;는 해당 브라우저가 할 수 있는 가장 최신의 렌더 버전으로 렌더링 된다.</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Vue 라이프사이클(lifeCycle) 이해하기]]></title>
            <link>https://velog.io/@gyeojin_1/Vue-%EB%9D%BC%EC%9D%B4%ED%94%84%EC%82%AC%EC%9D%B4%ED%81%B4lifeCycle-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@gyeojin_1/Vue-%EB%9D%BC%EC%9D%B4%ED%94%84%EC%82%AC%EC%9D%B4%ED%81%B4lifeCycle-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</guid>
            <pubDate>Mon, 13 Dec 2021 07:20:45 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>들어가기 전 , Vue 기초상식</p>
</blockquote>
<ul>
<li><p>Vue : Vuej는 날이 갈수록 진화하고 있는 웹콘텐츠들 및 웹사이트들(Youtube, Facebook, instagram 등)을 소비하는 사용자들을 위한 프론트엔드 부분을 더 쉽게 만들기 위해 만들어졌다.</p>
</li>
<li><p>Vue Instance : Vue로 화면을 개발하기 위해 필수 생성해야하는 기본 단위.
Instance 생성 방법🔽</p>
<pre><code>&lt;script&gt;
 new Vue({ //생성자 호출
   el:&#39;#app&#39;,
   data: {...}
  })
&lt;/script&gt;</code></pre><ul>
<li>생성자 : 새 객체 생성 시 자주 사용하는 옵션과 기능들을 미리 특정 객체에 저장하고 사용하는 방법
el, data, template, methods, created 등 요러가지 속성이 있음.</li>
<li>Instance 유효범위 : HTML 범위 내에서만 적용. 보통 범위는 el 속성에 의해 정해짐.</li>
<li>Instance 화면 적용 순서
ㄴ Vue 라이브러리 로딩 -&gt; Instance 생성 -&gt; 특정 화면 el에 Instance 연결 -&gt; el에 Instance 내용 적용 -&gt; 적용화면 사용자 노출<br>

</li>
</ul>
</li>
</ul>
<hr>
<br>

<blockquote>
<p>라이프사이클(Life Cycle) 이란?</p>
</blockquote>
<ul>
<li>Vue Instance 나 컴포넌트가 생성될 때, 미리 사전에 정의된 몇 단개의 과정을 거치게 되는데, 이를 &#39;라이프사이클(Lifecycle)&#39;이라고 함.
Instance 생성 후 노출되고 사라지기까지의 단계.<ul>
<li>생성(create) - DOM 부착(mount) - 업데이트(update) - 삭제 (destroy) 의 과정.</li>
<li>이 과정에서 훅(Hook)을 할 수 있도록 API를 제공.
ㄴ 훅(Hook)?
사용자가 특정 단계(초기화 단계)에서 자신의 코드를 추가할 수 있는 함수.</li>
<li>종류 : beforeCreate, created, beforeMount, mounted, beforeUpdate, updated, beforeDestroy, destroyed</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[SCSS 탐방기]]></title>
            <link>https://velog.io/@gyeojin_1/SCSS-%ED%83%90%EB%B0%A9%EA%B8%B0</link>
            <guid>https://velog.io/@gyeojin_1/SCSS-%ED%83%90%EB%B0%A9%EA%B8%B0</guid>
            <pubDate>Thu, 04 Nov 2021 08:57:16 GMT</pubDate>
            <description><![CDATA[<pre><code>/*주석*/
//주석

.list {
  width: 100px;
  float: left;
  li {
    color: red;
    background: url(&quot;./image.jpg&quot;);
    &amp;:last-child {
      margin-right: -10px;
    }
  }
}

/*선택자 중첩기능*/
.section {
  width: 100%;
  .list {
    padding: 20px;
    li {
      float: left;
    }
  }
}

/*중첩 안에서 &amp;는 상위(부모)선택자 참조*/
.btn {/*부모선택자*/
  position: absolute;
  &amp;.active {/*부모선택자인 .btn을 참조 치환*/
    color: red;
  }
}

.list {
  li {
    &amp;:last-child {
      margin-right: 0;
    }
  }
}

/*@at-root : 특정 변수 사용해야되는데 중첩 밖에 생성해야 할 때.*/
.list {
  $w: 100px;
  $h: 50px;
  li {
    width: $w;
    height: $h;
  }
  @at-root .box {
    width: $w;
    height: $h;
  }
}

/*중첩된 속성은 한꺼번에 처리할 수 있다.*/
.box {
  font: {
    weight: bold;
    size: 10px;
    family: sans-serif;
  };
  margin: {
    top: 10px;
    left: 20px;
  };
  padding: {
    bottom: 40px;
    right: 30px;
  };
}

/*변수 앞에 $붙이기. 블록 밖에서 전역선언하면 마음대로 쓸 수 있음.
선언된 블록 안에서만 유효범위 가짐. 변수 재할당도 가능.*/
$color-primary: #e96900;
$url-images: &quot;/assets/images/&quot;;
$w: 200px;

.box {
    $color: #333333 !global; /*블록 안 변수도 global 선언하면 전역으로 설정.*/
  width: $w;
  margin-left: $w;
  background: $color-primary url($url-images + &quot;bg.jpg&quot;);
}
/*변수 선언한 box 밖에서 color 호출하면 에러*/
.box2 {
  background: $color;
}

/*!default 플래그를 쓰면 기존에 할당되어있던 값을 사용함.*/
$color-primary: red; /*먼저 선언되었기 때문에 선할당 된 것임.*/

.box {
  $color-primary: blue !default; /*기존값이 있으면 그걸 쓸게..*/
  background: $color-primary;
}

/* {}중괄호 블록+샵 이용하면 변수값 넣을 수 있음.*/
$family: unquote(&quot;Droid+Sans&quot;);
@import url(&quot;http://fonts.googleapis.com/css?family=#{$family}&quot;);

/*@import : 외부에서 가져온 Sass 파일은 모두 단일 CSS 출력 파일로 병합*/
@import &quot;hello.css&quot;;
@import &quot;http://hello.com/hello&quot;;
@import url(hello);
@import &quot;hello&quot; screen;

/*or 여러 파일 가져오기 : 파일명 사이에 세미콜론 붙이기*/

/*연산작업 가능*/

/* +: 더하기
 - : 빼기
 * : 곱하기 (하나 이상의 값이 반드시 숫자)
 / : 나누기 (오른쪽 값이 반드시 숫자)
 % : 나머지 연산자*/

 /* == : 동등
  != : 부등
   &lt; : 대소 ~보다 작은
  &gt; : 대소 ~보다 큰
   &lt;= : 대소동등 ~보다 작거나 같은
    &gt;= : 대소동등 ~보다 크거나 같은*/


/* 논리연산자 
    and:그리고 / or 또는 / not 부정 */

$width: 90px;
div {
  @if not ($width &gt; 100px) {
    height: 300px;
  }
}

/* 숫자 : 상대적 단위 연산 */
/* width: 50% - 20px;  // 단위 모순 에러(Incompatible units error) */
/* width: calc(50% - 20px);  // 연산 가능 */

/*문자 연산
+로 문자연산 가능. 따옴표 같이 씀.
색상 연산 가능.*/
div::after {
  content: &quot;Hello &quot; + World;
  flex-flow: row + &quot;-reverse&quot; + &quot; &quot; + wrap
}

$color: rgba(10, 20, 30, .5);
div {
  color: opacify($color, .3);  // 30% 더 불투명하게 / 0.5 + 0.3
  background-color: transparentize($color, .2);  // 20% 더 투명하게 / 0.5 - 0.2
}

/*@Mixin 재활용+@include 포함*/
/* mixin 설정 */
@mixin large-text {
  font-size: 22px;
  font-weight: bold;
  font-family: sans-serif;
  color: orange;
}

@mixin large-text {
  font: {
    size: 22px;
    weight: bold;
    family: sans-serif;
  }
  color: orange;

  &amp;::after {
    content: &quot;!!&quot;;
  }

  span.icon {
    background: url(&quot;/images/icon.png&quot;);
  }
}

/*include로 포함*/
h1 {
  @include large-text;
}
div {
  @include large-text;
}

/*인수
함수처럼 인수를 가질 수 있음.*/
@mixin dash-line($width, $color) {
  border: $width dashed $color;
}

.box1 { @include dash-line(1px, red); }
.box2 { @include dash-line(4px, blue); }

/*@include시 별도의 인수전달 안되면 기본값 사용.*/


</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[PORTFOLIO_Art Work]]></title>
            <link>https://velog.io/@gyeojin_1/PORTFOLIOArt-Work</link>
            <guid>https://velog.io/@gyeojin_1/PORTFOLIOArt-Work</guid>
            <pubDate>Sun, 10 Oct 2021 10:39:59 GMT</pubDate>
            <description><![CDATA[<p>👽 개인 디자인 작업물 입니다.👽
(추후 신규 작업물 업데이트 예정입니다.)</p>
<p><img src="https://images.velog.io/images/gyeojin_1/post/781e14a2-2212-4c75-8d43-b7e3df6f6f6f/210922_sticker.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[🍀Introduce Myself!]]></title>
            <link>https://velog.io/@gyeojin_1/Introduce-Myself</link>
            <guid>https://velog.io/@gyeojin_1/Introduce-Myself</guid>
            <pubDate>Sun, 03 Oct 2021 08:17:39 GMT</pubDate>
            <description><![CDATA[<h3 id="👋안녕하세요-반갑습니다">👋안녕하세요, 반갑습니다!</h3>
<hr>
<p>저에 대해 궁금해주셔서 감사해요.
부디 기분 좋은 연락이 오기를 기다리고 있겠습니다.😊
<Br>
<Br></p>
<h3 id="📌-resume--introduce-document">📌 resume &amp; Introduce document</h3>
<hr>
<p>아래의 아이콘을 클릭하시면 이력서가 열람됩니다.</p>
<h4 id="📄-◀-click"><a href="https://docs.google.com/document/d/1GAsP9Itz78qC6kqmDUD6dulOR2Nfhoxf/edit?usp=sharing&amp;ouid=117018149154317100751&amp;rtpof=true&amp;sd=true">📄 ◀ Click!</a></h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[1.React 공부 복습글]]></title>
            <link>https://velog.io/@gyeojin_1/1.React-%EA%B3%B5%EB%B6%80-%EB%B3%B5%EC%8A%B5%EA%B8%80</link>
            <guid>https://velog.io/@gyeojin_1/1.React-%EA%B3%B5%EB%B6%80-%EB%B3%B5%EC%8A%B5%EA%B8%80</guid>
            <pubDate>Thu, 16 Sep 2021 08:16:29 GMT</pubDate>
            <description><![CDATA[<h2 id="react-라는-것을-공부해보자✨">&#39;React&#39; 라는 것을 공부해보자✨</h2>
<br>
<br>
1. React는 무엇인가요?
> SPA (Single Page Application). 프론트앤드 라이브러리의 일종.
component에 집중되어있는 라이브러리.

<p>라이브러리 vs 프레임워크
내가 코드를 컨트롤 하느냐 vs 누군가의 규칙을 따라 코딩하는거냐!
라이브러리 : ex)jQuery -&gt; 내가 필요할 때 불러와서 사용한다.
프레임워크 : ex)django -&gt; 프레임워크가 정한 규칙에 따라서 사용해야한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[PORTFOLIO_ASACK]]></title>
            <link>https://velog.io/@gyeojin_1/PORTFOLIOASACK</link>
            <guid>https://velog.io/@gyeojin_1/PORTFOLIOASACK</guid>
            <pubDate>Tue, 24 Aug 2021 08:58:44 GMT</pubDate>
            <description><![CDATA[<p>🥑 비건 도시락 브랜드인 &#39;아삭&#39; 의 브랜딩 디자인 입니다. 🥑</p>
<p><img src="https://images.velog.io/images/gyeojin_1/post/2f9b42e4-59da-4725-acd0-15e61c4702e1/designdetail_04_0.jpg" alt=""></p>
<p><img src="https://images.velog.io/images/gyeojin_1/post/dbdfc2c4-bb15-46c0-834a-54eac67bc5e1/designdetail_04_1.jpg" alt=""></p>
<p><img src="https://images.velog.io/images/gyeojin_1/post/b4c2fc77-3321-4735-ba70-1a1579ced089/designdetail_04_2.jpg" alt=""></p>
<p><img src="https://images.velog.io/images/gyeojin_1/post/3c70e49b-afd0-4bbb-8077-70b86454302d/designdetail_04_3.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[PORTFOLIO_Go Camp!]]></title>
            <link>https://velog.io/@gyeojin_1/PORTFOLIOGo-Camp</link>
            <guid>https://velog.io/@gyeojin_1/PORTFOLIOGo-Camp</guid>
            <pubDate>Thu, 19 Aug 2021 06:07:19 GMT</pubDate>
            <description><![CDATA[<p>🍀 공공 API 활용한 앱 프로토타입 작업에서 디자인 시안을 작업했습니다. 🍀</p>
<br>

<p><img src="https://images.velog.io/images/gyeojin_1/post/e6f3807c-a4db-4e7c-8809-3eddd178f1cc/designdetail_03.jpg" alt=""></p>
<hr>

<p><img src="https://images.velog.io/images/gyeojin_1/post/c6eef626-ae22-4da5-a7d5-84dd2470a117/designdetail_03-1.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[PORTFOLIO_디자인 작업]]></title>
            <link>https://velog.io/@gyeojin_1/PORTFOLIO%EB%94%94%EC%9E%90%EC%9D%B8-%EC%9E%91%EC%97%85</link>
            <guid>https://velog.io/@gyeojin_1/PORTFOLIO%EB%94%94%EC%9E%90%EC%9D%B8-%EC%9E%91%EC%97%85</guid>
            <pubDate>Thu, 19 Aug 2021 03:44:31 GMT</pubDate>
            <description><![CDATA[<div style="text-align: center">✨디자인 실무 & 개인 프로젝트에서 열심히 만든 작업물 입니다✨</div>


<p><img src="https://images.velog.io/images/gyeojin_1/post/cfaedfd1-86ee-4a78-9721-ed6c86d2b193/designdetail_01.jpg" alt=""></p>
<hr>

<p><img src="https://images.velog.io/images/gyeojin_1/post/281caf36-2697-40e4-9930-814b66345b43/designdetail_02.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[210802_포트폴리오 사이트 작업]]></title>
            <link>https://velog.io/@gyeojin_1/210802%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-%EC%82%AC%EC%9D%B4%ED%8A%B8-%EC%9E%91%EC%97%85</link>
            <guid>https://velog.io/@gyeojin_1/210802%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-%EC%82%AC%EC%9D%B4%ED%8A%B8-%EC%9E%91%EC%97%85</guid>
            <pubDate>Mon, 02 Aug 2021 06:15:18 GMT</pubDate>
            <description><![CDATA[<center>(아너무너무어렵고힘들다!)</center>
<br><br>


<p>이 곳엔 포트폴리오 작업 시 새로 알게 된 기능들을 아카이빙합니다.
<em>(latest update. 2021.08.04)</em>
<br><br></p>
<h2 id="1360도-무한히-회전하는-css-code">1.360도 무한히 회전하는 CSS code</h2>
<pre><code>&lt;!--html code--&gt;
&lt;div class=&quot;infinity-img&quot;&gt;
  &lt;img src=&quot;../portfolio_GY/img/intro_rotate.png&quot; alt=&quot;&quot;&gt;
&lt;/div&gt;</code></pre><pre><code>/* CSS, Keyframes code */
.intro .infinity-img img{
    width: 100%;
    animation: rotate_image 10s linear infinite;
    transform-origin: 50% 50%;
    }

@keyframes rotate_image {
  0%{}
  100% {
    transform: rotate(360deg);}
}</code></pre><p>transform-origin의 50% 50%은 회전의 중심 위치를 나타내는데, 완전 원형으로 회전시키려면 이미지 파일의 정중앙에 회전시키려는 중심이 위치 해야한다.</p>
<p>만약 이미지가 중심위치에서 상하좌우 비대칭이라면 다른 이미지 편집 툴을 사용하여 대칭으로 맞춰줘야 함.</p>
<p>animation 특성의 10s는 time period를 뜻하는데, 적을수록 빠르게 회전하므로 적절히 조절하여 설정해주면 됨</p>
<hr>
<h2 id="2가로-스크롤-마우스-휠-이벤트">2.가로 스크롤 마우스 휠 이벤트</h2>
<p>포트폴리오 부분 가로 스크롤</p>
<h4 id="html">HTML</h4>
<pre><code>   &lt;body&gt;
    &lt;section class=&quot;pf&quot;&gt;
      &lt;div class=&quot;bg&quot;&gt;&lt;/div&gt;
      &lt;div class=&quot;center&quot;&gt;
        &lt;div class=&quot;title-text&quot;&gt;
          &lt;h3&gt;Portfolio.&lt;/h3&gt;
          &lt;p&gt;이런 것들을 즐겁게 뚝딱거렸어요!&lt;/p&gt;
        &lt;/div&gt;
        &lt;div class=&quot;pf-box&quot;&gt;
          &lt;div class=&quot;each-pf-box&quot;&gt;
            &lt;div class=&quot;pf-imgbox&quot;&gt;
              &lt;div class=&quot;pfimg&quot;&gt;&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;pf-txtbox&quot;&gt;
              &lt;b&gt;My Schedule&lt;/b&gt;
              &lt;p&gt;스케줄을 업데이트 할 수 있는 홈페이지.&lt;br&gt;글쓰기 수정·삭제 / 차트 값 반영 구현.&lt;/p&gt;
              &lt;span class=&quot;first&quot;&gt;프로젝트 인원 | 1인&lt;/span&gt;
              &lt;span&gt;작업 기간 | 2주&lt;/span&gt;
              &lt;a href=&quot;#&quot;&gt;DETAIL&lt;/a&gt;
              &lt;a href=&quot;#&quot;&gt;WEB SITE&lt;/a&gt;
            &lt;/div&gt;
          &lt;/div&gt;
          &lt;div class=&quot;each-pf-box&quot;&gt;
            &lt;div class=&quot;pf-imgbox&quot;&gt;
              &lt;div class=&quot;pfimg&quot;&gt;&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;pf-txtbox&quot;&gt;
              &lt;b&gt;My Schedule&lt;/b&gt;
              &lt;p&gt;스케줄을 업데이트 할 수 있는 홈페이지를 만들었습니다.&lt;/p&gt;
              &lt;span&gt;프로젝트 인원&lt;/span&gt;
              &lt;span&gt;작업 기간&lt;/span&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/section&gt;
   &lt;/body&gt;</code></pre><h4 id="css">CSS</h4>
<pre><code>.pf {position: relative;}
.pf .bg {background: url(../img/portfolio_bg.png) no-repeat center center; background-size: cover; width: 100%; height: 100%; position: absolute; z-index: -1;}
.pf .center {overflow-x:scroll;}
.pf-box {width: 400%; position: relative; margin: 50px 0; display: flex;}
.pf-box .each-pf-box {width: 25%; display: flex; align-items: center;}
.each-pf-box .pf-imgbox {width: 70%; height: 600px; overflow: hidden;}
.each-pf-box .pf-imgbox .pfimg {background: url(../img/slide_01.jpg) no-repeat center center; background-size: cover; width: 100%; height: 100%;}
.each-pf-box .pf-txtbox {padding: 0 0 0 40px; transform: translate(0, 50%);}
.each-pf-box .pf-txtbox b{font-size: 30px;}
.each-pf-box .pf-txtbox p {font-size: 16px; padding: 10px 0;}
.each-pf-box .pf-txtbox span {font-weight: 300; padding-top: 10px; display: block;}
.each-pf-box .pf-txtbox .first {margin-top: 10px;}
.each-pf-box .pf-txtbox a {padding: 15px 20px; margin-top: 20px; display: inline-block; border: 1px solid #222; margin-right: 10px;}</code></pre><p>jQuery</p>
<pre><code>$(function(){
  $(&quot;.pf .center&quot;).on(&#39;mousewheel&#39;,function(e){
    var wheelDelta = e.originalEvent.wheelDelta;
    if(wheelDelta &gt; 0){
      //console.log(&quot;up&quot;);
      $(this).scrollLeft(-wheelDelta + $(this).scrollLeft());
    }else{
    //console.log(&quot;down&quot;);
      $(this).scrollLeft(-wheelDelta + $(this).scrollLeft());
    }
  });
});</code></pre><p>↑ 아직 로직이 이해안되기 때문에 일단 적어둔다. 이해는 나중에ㅠ</p>
<hr>
<h2 id="3-메인페이지에서-버튼-클릭-시-해당-컨텐츠로-이동하는-로직">3. 메인페이지에서 버튼 클릭 시 해당 컨텐츠로 이동하는 로직</h2>
<p>Javascript</p>
<pre><code>const navButton = document.querySelectorAll(&#39;.nav button&#39;);
//console.log(navButton);
const home = document.querySelector(&#39;.intro&#39;);
const aboutMe = document.querySelector(&#39;.about&#39;);
const portFolio = document.querySelector(&#39;.pf&#39;);
const design = document.querySelector(&#39;.design&#39;);

const homeTop = home.offsetTop;
const aboutMeTop = aboutMe.offsetTop;
const portFolioTop = portFolio.offsetTop;
const designTop = design.offsetTop;

navButton[0].onclick = function(){
  window.scroll({top:homeTop, behavior: &#39;smooth&#39;})
}

navButton[1].onclick = function(){
  window.scroll({top:aboutMeTop, behavior: &#39;smooth&#39;})
}

navButton[2].onclick = function(){
  window.scroll({top:portFolioTop, behavior: &#39;smooth&#39;})
}

navButton[3].onclick = function(){
  window.scroll({top:designTop, behavior: &#39;smooth&#39;})
}</code></pre><p>↑ 노가다의 결정체. 추후 리팩토링 필요!</p>
<hr>
<h2 id="4-텍스트-말줄임표-치환">4. 텍스트 말줄임표 치환</h2>
<p>CSS</p>
<pre><code>/* 긴 대쉬보드명이 오는 경우에 &quot;...&quot; 표시를 위함 */
.Button.dashboard-menu {
    text-overflow: ellipsis;
    overflow: hidden;
    white-space: nowrap;
    /*중요!! 까먹지 말기 */
    -webkit-box-orient:vertical; 
      -webkit-line-clamp:2; 
      display: -webkit-inline-box;
}</code></pre><h4 id="↑-webkit-line-clamp">↑-webkit-line-clamp</h4>
<p>-webkit-line-clamp CSS 속성은 블록 컨테이너의 콘텐츠를 지정한 줄 수만큼으로 제한.</p>
<p>1.display 속성을 -webkit-box 또는 -webkit-inline-box설정
2.-webkit-box-orient (en-US) 속성을 vertical로 설정
위 두가지 조건이 충족해야 적용됨.</p>
<p>-webkit-line-clamp만 사용하는 경우, 말줄임표는 노출되나 넘친 콘텐츠가 숨겨지지 않으므로 대개 overflow 속성 또한 hidden으로 설정해야 합니다.</p>
<p>앵커 요소에 적용한 경우 텍스트의 끝이 아니라 중앙에서 잘리는 경우도 있습니다.</p>
<blockquote>
<p>참고 : <a href="https://developer.mozilla.org/ko/docs/Web/CSS/-webkit-line-clamp">https://developer.mozilla.org/ko/docs/Web/CSS/-webkit-line-clamp</a></p>
</blockquote>
<h4 id="js">JS</h4>
<pre><code>var length = 13; // 표시할 글자수 기준
if (temp.length &gt; length) {
  temp = temp.substr(0, length-2) + &#39;...&#39;;
}</code></pre><p>↑ 글자수 기준 말고 박스 크기 기준은 안되나? 해봐야지!
<br></p>
<hr>
<br>

<h2 id="5-가로-스크롤-시-body-세로-스크롤-멈추기">5. 가로 스크롤 시 body 세로 스크롤 멈추기</h2>
<p>1차 : mouseover 와 mouseout 활용</p>
<pre><code>$(function () {
  $(&quot;.artist_container&quot;)
    .mouseover(function () {
      $(&quot;body&quot;).css(&quot;overflow-y&quot;, &quot;hidden&quot;);
    })
    .mouseout(function () {
      $(&quot;body&quot;).css(&quot;overflow-y&quot;, &quot;auto&quot;);
    });
 });</code></pre><p>*결과 : 실패!
*why? : 정상 작동은 했지만 마우스가 들어오고 나갈때를 설정하니 컨텐츠가 거의 안 보이는 곳에서도 멈춰버림.</p>
<hr>
<p>2차 : 컨텐츠 박스 (artist_container)의 스크롤값을 읽어 조건문 활용</p>
<pre><code>$(&quot;.artist_container&quot;).on(&quot;mousewheel&quot;, function (e) {
    var wheelDelta = e.originalEvent.wheelDelta;
    var boxWidth = $(this).scrollLeft(); //최소 0 ~ 최대 2464
    //console.log(boxWidth);
    if (boxWidth == 0 || boxWidth == 2464) {
      $(&quot;body&quot;).css(&quot;overflow-y&quot;, &quot;auto&quot;);
    } else {
      $(&quot;body&quot;).css(&quot;overflow-y&quot;, &quot;hidden&quot;);
    }
  });</code></pre><p>*결과 : 절반은 성공?
*why? : 이것도 정상작동했지만, 최초로 마우스휠을 돌려야 기능 수행이 된다. (마우스 휠 이벤트를 실행할 때 같이 넣어서 그렇다.)
다른 방법 생각해봐야 할 듯 하다.</p>
<hr>
<p>3차 : 컨텐츠 박스 (artist_container)의 스크롤값+mouseover&amp;mouseout 함수 붙이기</p>
<pre><code>$(&quot;.artist_container&quot;)
    .on(&quot;mousewheel&quot;, function (e) {
      var wheelDelta = e.originalEvent.wheelDelta;
      var boxWidth = $(this).scrollLeft(); //최소 0 ~ 최대 2464
      //console.log(boxWidth);
      if (boxWidth == 0 || boxWidth == 2464) {
        $(&quot;body&quot;).css(&quot;overflow-y&quot;, &quot;auto&quot;);
      } else {
        $(&quot;body&quot;).css(&quot;overflow-y&quot;, &quot;hidden&quot;);
      }

      if (wheelDelta &gt; 0) {
        //스크롤 up 시 -150 찍힘
        $(this).scrollLeft(-wheelDelta + $(this).scrollLeft());
        //-(-150)+ 현재 요소의 스크롤 위치
      } else {
        //스크롤 down tl +150 찍힘
        $(this).scrollLeft(-wheelDelta + $(this).scrollLeft());
      }
    })
    .mouseover(function () {
      $(&quot;body&quot;).css(&quot;overflow-y&quot;, &quot;hidden&quot;);
    })
    .mouseout(function () {
      $(&quot;body&quot;).css(&quot;overflow-y&quot;, &quot;auto&quot;);
    });</code></pre><p>*결과 : 성공..?
*why? : 다 정상작동 하지만 스크롤값 처음 읽어들일때와 마우스 호버할 때 약간 충돌이 있는 듯 함. 일단 디자인 완성해놓고 다시 보기!</p>
<h2 id="6-시간-변화에-따른-이미지-변경">6. 시간 변화에 따른 이미지 변경</h2>
<pre><code>$(function(){
  function nightCheck(){
    var todayHour = new Date().getHours(); //그 날의 시간만 추출
    //console.log(todayHour);

    if(todayHour &lt; 18){
      // day time
      //alert(&#39;day&#39;);
      $(&#39;.lobby_bg .bg_img&#39;).attr(&#39;src&#39;, &#39;img/lobby.jpg&#39;);
      $(&#39;.contents&#39;).removeClass(&#39;is_night&#39;);
    }else if(todayHour &gt; 18){
      // night time
      //alert(&#39;night&#39;);
      $(&#39;.lobby_bg .bg_img&#39;).attr(&#39;src&#39;, &#39;img/lobby-night.jpg&#39;);
      $(&#39;.contents&#39;).addClass(&#39;is_night&#39;);
    }
  }

  nightCheck();

  var landingInt = setInterval(function(){
    nightCheck();
  },1000) //check time on 1s
});</code></pre><p>*단순하게 시간만 불러와서 1초단위로 체크하는 기능</p>
<h2 id="7-clip-path-css">7. clip-path (css)</h2>
<p>clip-path CSS 속성은 요소의 클리핑 범위를 지정한다. 클리핑 범위 안의 부분은 보여지고, 바깥은 숨겨짐.
<em>참고 : <a href="https://developer.mozilla.org/ko/docs/Web/CSS/clip-path">https://developer.mozilla.org/ko/docs/Web/CSS/clip-path</a></em></p>
<p>min()/max() : ,로 값들을 나열한 후, 그 중 작은 것/큰 것을 선택한다. 
<em>ex) width: max(100%, 500px) 인 경우, 가로를 꽉 채우다가 500px보다 작아지게 되면 더 이상 줄어들지 않는다.</em></p>
]]></description>
        </item>
    </channel>
</rss>