반응형
반응형

📝display:grid, grid-template-columns, grid-template-rows, gaps

<div class="father">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
</div>

.father {
    display: grid;
    grid-template-columns: 100px 200px 50px;
    grid-template-rows: 200px 100px;
    row-gap: 10px;
    column-gap: 20px;
}

.child {
    background-color: tomato;
    display: flex;
    color: white;
    font-size: 28px;
    align-items: center;
    justify-content: center;
}

Flexbox의 경우 1차원에 대한 배치와 정렬이면 Grid의 경우 2차원에 대한 배치와 정렬에 많이 쓰인다.

부모에 display:grid기본적으로 적용시켜야하고 grid-template-columns를 이용해 열의 가로 넓이를 지정하며 grid-template-rows를 이용해 행의 세로 넓이를 지정한다.

gap의 경우는 자식 div의 margin을 의미한다. (row-gap, column-gap으로 개별로 지정도 가능)

 

 

<div class="father">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
</div>

.father {
    display: grid;
    grid-template-rows: 1fr 2fr 1fr;
    grid-template-columns: 3fr 1fr;
    // grid-template-columns: repeat(2, 1fr);
    // grid-template-rows: repeat(2, 1fr);
    row-gap: 10px;
    column-gap: 20px;
}

.child {
    background-color: tomato;
    display: flex;
    color: white;
    font-size: 28px;
    align-items: center;
    justify-content: center;
}

만약 비율로 설정이 필요하면 fr로 설정하면 됩니다. 또한 동일한 경우 repeate로 간단하게 표현도 가능합니다.

 

 

📝grid-start, grid-end, grid-column, grid-row

<div class="father">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
</div>

.father {
    display: grid;
    grid-template-columns: 100px 200px 50px;
    grid-template-rows: 200px 100px;
    row-gap: 10px;
    column-gap: 20px;
}

.child {
    background-color: tomato;
    display: flex;
    color: white;
    font-size: 28px;
    align-items: center;
    justify-content: center;
}

.child:last-child {
    background-color: turquoise;
    /* grid-column-start: 2;
    grid-column-end: -1; */
    grid-column: 2 / -1;
}

.child:first-child {
    /* grid-row-start: 1;
    grid-row-end: -1; */
    grid-row: 1 / -1;
}

grid-column-start어디서 시작을 의미하고 grid-column-end는 어디까지 차지할지에 대해서 의미합니다. grid-column을 통해 한번에 설정도 가능합니다. (grid-column-start가 2이면 2번째열에서 -1인 마지막열까지 차지하겠다는 의미)

grid-row의 경우는 행에 대해 시작지점과 종료시점을 지정하는 것이 동일합니다

 

📝span

<div class="father">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
</div>

.father {
    display: grid;
    grid-template-columns: 100px 200px 50px 50px;
    grid-template-rows: 200px 100px ;
    row-gap: 10px;
    column-gap: 20px;
}

.child {
    background-color: tomato;
    display: flex;
    color: white;
    font-size: 28px;
    align-items: center;
    justify-content: center;
}

.child:last-child {
    background-color: turquoise;
    /* grid-column-start: 2;
    grid-column-end: -1; */
    grid-column: 2 / span 3;
}

.child:first-child {
    /* grid-row-start: 1;
    grid-row-end: -1; */
    grid-row: 1 / -1;
}

spangrid-colum-start로 시작지점을 잡고 종료지점을 정하는게 아닌 몇개까지 차지하겠다라는 걸 표시해줄 수 있습니다. 위 코드를 보면 grid-column의 start는 2번째 열이고 2번째열을 포함한 3개까지 차지하겠다는 의미입니다.

 

📝place-items, place-self

<div class="father">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
  <div class="child">5</div>
  <div class="child">6</div>
  <div class="child">7</div>
  <div class="child">8</div>
  <div class="child">9</div>
  <div class="child">10</div>
</div>


.father {
    display: grid;
    gap: 10px;
    min-height: 50vh;
    grid-template-columns: repeat(2, 1fr);
    grid-template-rows: repeat(2, 1fr);
    grid-auto-rows: 1fr;
    grid-auto-columns: 1fr;
    grid-auto-flow: column;
    place-items: end center;
}

.child {
    width: 50px;
    height: 50px;
    background-color: tomato;
    color: white;
    font-size: 28px;
    display: flex;
    justify-content: center;
    align-items: center;
}

.child:nth-child(6) {
    background-color: teal;
    /* align-self: start;
    justify-self: end; */
    place-self: center center;
    grid-column: span 2;
}

place-items의 경우 부모에 적용시키며 전체 grid안에 있는 contents를 정렬을 해줍니다. 앞에 나오는 건 행에 대한 정렬 뒤에 나오는 건 열에 대한 정렬입니다. (end center)

place-self는 부모 전체가 아니라 개별로 자식에 적용시키며 해당 grid의 상하좌우 정렬을 해줍니다.

 

📝justifiy-content, align-content, place-content

<div class="father">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
  <div class="child">5</div>
  <div class="child">6</div>
  <div class="child">7</div>
  <div class="child">8</div>
  <div class="child">9</div>
  <div class="child">10</div>
</div>

.father {
    display: grid;
    gap: 10px;
    height: 100vh;
    grid-template-columns: repeat(3, 100px);
    grid-template-rows: repeat(2, 100px);
    background-color: lightblue;
    /*justify-content: center;*/
    /*align-content: center;*/
    place-content: center center;
}

.child {
    background-color: tomato;
    color: white;
    font-size: 28px;
    display: flex;
    justify-content: center;
    align-items: center;
}

place-items, place-self의 경우는 grid안에서의 정렬이지만 flexbox처럼 전체에 대한 정렬의 경우좌우 정렬 justify-content하고 상하 정렬 align-content를 사용합니다. (place-content로 축약해서 상하좌우 정렬을 입력할 수 있습니다)

 

📝minmax

<div class="father">
  <div class="child">1fr</div>
  <div class="child">1fr</div>
  <div class="child">1fr</div>
</div>

.father {
    display: grid;
    gap: 10px;
    height: 100vh;
    grid-template-columns: repeat(3, minmax(200px, 400px));
}

.child {
    background-color: tomato;
    color: white;
    font-size: 50px;
    display: flex;
    justify-content: center;
    align-items: center;
}

minmax의 경우 grid 한개당 최소 크기 최대크기를 설정할 수 있습니다

 

 

📝auto-fit, auto-fill (반응형)

<div class="father">
  <div class="child">1fr</div>
  <div class="child">1fr</div>
  <div class="child">1fr</div>
</div>

.father {
    display: grid;
    gap: 10px;
    height: 100vh;
    grid-template-columns: repeat(auto-fill, minmax(200px, 400px));
    /*grid-template-columns: repeat(auto-fit, minmax(200px, 400px));*/
}

.child {
    background-color: tomato;
    color: white;
    font-size: 50px;
    display: flex;
    justify-content: center;
    align-items: center;
}

auto-fit auto-fill

auto-fit의 경우는 HTML에 있는 자식 개수만큼만 딱 채웁니다.

auto-fill의 경우 HTML에 있는 자식 개수만큼 그리지만 max크기만큼 더 그릴 수 있을 때는 그만큼 자리를 차지합니다.

 

 

공통점으로 둘다 화면크기를 줄였을 때 max크기에 맞춰서 반응형처럼 바뀝니다.

 

 

반응형
반응형

 

📝다크모드 적용시키기 (tailwind.config.ts)

const config: Config = {
  ...
  darkMode: "media",
  plugins: [],
  ...
}
export default config


...
<div className="bg-red-500 dark:bg-blue-800">
    Testing Dark Mode
</div>

// darkMode: "class"
// darkMode: "media"

tailwind.config.ts에서 darkMode를 media로 설정시 dark: 라고 적은 CSS가 우선이 된다 (default : class)

 

 

📝사용자 임의 값을 넣기

<span className="text-[1200px]"> Hello </span>

- [${원하는 값}]을 이용해 넣을 수 있다

 

 

📝Flex Box

<!-- 같은 크기로 나눈다 -->
<div>
	<div className="flex">
		<div className="flex-grow"/>
		<div className="flex-grow"/>
	</div>
</div>

<!-- 같은 크기로 나누지 않고 같은 row에만 둔다 -->
<div>
	<div className="flex">
		<div className="flex-1"/>
		<div className="flex-1"/>
	</div>
</div>

<!-- 비율로 나눈다 -->
<div>
	<div className="flex">
		<div className="basis-1/4"/>
		<div className="basis-3/4"/>
	</div>
</div>

bootstrap의 row는 flex와 동일하게 적용되며 col의 경우는 flex-grow이다

반응형
반응형

 

📝배열 원하는 곳에 CSS 적용

<ul>
    {[1, 2, 3, 4].map((i) => (
        <div
            key={i}
            className="flex justify-between my-2 odd:bg-blue-50 even:bg-yellow-50 first:bg-teal-500 last:bg-amber-50"
        >
            <span className="text-gray-500">Grey Chair</span>
            <span className="font-semibold">$19</span>
        </div>
    ))}
</ul>

 

결과화면

 

 

📝문자열 일부분 CSS 적용

<ul>
    {["a", "b", "c", ""].map((c, i) => (
        <li className="bg-red-500 py-2 empty:bg-blue-800" key={i}>
            {c}
        </li>
    ))}
</ul>

 

결과화면

 

📝문자열 일부분 CSS 적용

return (
    <div className="flex flex-col space-y-2  p-5 ">
        <p className="first-letter:text-7xl first-letter:hover:text-purple-400">
            Hello everyone!
        </p>
    </div>
)

 

결과화면 ( 호버 X / 호버 O )

 

📝반응형 크기별 CSS 적용

<div className="
    bg-white 
    sm:hover:bg-pink-800
    sm:bg-red-400
    md:bg-teal-400
    lg:bg-indigo-400
    xl:bg-yellow-400
    2xl:bg-pink-500
    p-6
    rounded-3xl
    shadow-xl"
>

sm, md, lg, xl, 2xl별로 CSS를 달리 적용할 수 있다

 

📝반응형 모바일(가로, 세로)

<div className="portrait:bg-indigo-600 landscape:bg-teal-500 p-6 pb-14 xl:pb-40">
  <span className="text-white text-2xl">Profile</span>
</div>

반응형과 비슷한 느낌인데 핸드폰의 가로랑 세로에 따라 CSS를 달리 적용할 수 있습니다

 

  • portrait
    • 세로
  • landscape
    • 가로
반응형
반응형

 

📝Tailwind (테일윈드)

CSS 프레임워크로서 빠르게 퍼블리싱을 할 수 있게 도와줍니다

비슷한 프레임워크로 BootStrap이 있습니다 현재는 BootStrap을 제치고 현재 1위 CSS 프레임워크입니다

 

그냥 Next.js를 사용하고 Next.js에서 기본적으로 채용한 Tailwind를 사용하는게 맘 편하다

 

📝React Tailwind 적용

React 프로젝트 생성 (타입스크립트 포함 버전)

// 프로젝트 생성
npx create-react-app my-react-app --template typescript

// 프로젝트로 이동
cd my-react-app

 

tailwind package 설치

npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init

 

tailwind.config.js 수정

module.exports = {
  content: [
  	"./src/**/*.{js,jsx,ts,tsx}",  
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}

 

공통 CSS 파일을 만들어 tailwind 적용시키기

// src/index.css

@tailwind base;
@tailwind components;
@tailwind utilities;

 

공통 CSS 파일 import 해서 사용하기

import './index.css'

....

 

 

🔗 참고 및 출처

https://velog.io/@ahn0min/create-react-app에서-Tailwind-CSS-적용해보기

 

create-react-app에서 Tailwind CSS 적용해보기

필자는 create-react-app 과 Tailwind를 사용하는 방식에 맞게 작성하였다.create-react-app을 사용하여 기본적인 개발환경을 직접 구축할 필요없이 편리하게 사용하겠다.css framework인 tailwind를 사용하기위

velog.io

https://tailwindcss.com/docs/installation

 

Installation - Tailwind CSS

The simplest and fastest way to get up and running with Tailwind CSS from scratch is with the Tailwind CLI tool.

tailwindcss.com

 

반응형
반응형

메타 태그는 HTML 태그중 하나로 문서 자체의 추가적인 정보를 주는 태그입니다

어떤 내용을 담고 있으며 키워드는 무엇이며 default charset은 어떤 것을 사용하는지 등의 정보를 담고 있는 태그입니다

 

기본적으로 활용하는 것과 대표적인 것들을 알아보겠습니다

 

📝viewport

<meta name="viewport" content="width=device-width, initial-scale=1.0">

모바일 디바이스 넓이에서는 1.0 (100%)으로 비율을 맞춘다는 것이다

 

 

기본HTML 화면

 

 

<좌> viewport 적용 (모바일) | <우> viewport 미적용 (모바일)

 

📝charset

<meta charset="EUC-KR">

 EUC-KR로 설정한 후 서버로 기동 안 하고 파일로 HTML파일을 open한 경우 HTML페이지가 EUC-KR로 열리게 되어 글자가 깨지게 된다 (윈도우에서 작성한 글자들은 UTF-8로 작성되었기 때문에 EUC-KR로 읽어버리면 깨지게 되어버린다) → 물론 서버로 기동하는 경우 서버의 charset이 우선순위가 높다

 

 

📝검색엔진

<!-- 검색 엔진에 의해 검색되는 단어를 지정 -->
<meta name="Keywords" content="Web, html, 웹 표준" />

<!-- 검색 결과에 표시되는 문자를 지정 -->
<meta name="Description" content="Web, html, 웹 표준" />

<!-- 검색 로봇 제어 -->
<meta name="Robots" content="noindex, nofollow" />

그 외에 저작권자 최종 수정일 위치 홈페이지 주제 등에 대한 걸 설정할 수 있다

 

마우스 오버시 관련 툴바, 캐시 되지 않도록 지정 등을 할 수 있지만 이거는 IE쪽에서만 동작 가능성이 높기 때문에 따로 기

능을 만들어서 사용하는게 옳다

 

 

 

🔗 참고 및 출처

https://webclub.tistory.com/354

반응형
반응형

📝Media Query

출력 장치의 여러 특징 가운데 일부를 참조하여 CSS 코드를 분기 처리해 하나의 HTML 소스로 여러가지 출력장치 크기에 따라 맞춤형으로 보여줄 수 있는 기능을 제공한다

 

  • mobile
    • 320px ~ 480px
  • tablet
    • 768px ~ 1024px
  • desktop
    • 1024px ~

 

@media (조건문) {실행문} 순서로 작성이 가능하다.

 

가장 많이 쓰이는 부분을 하나 정리해주자면 넓이에 따라 반응형을 많이 만들기 때문에 min-width, width, max-widht [뷰포트 기반]를 사용한다 참고로 아래 참고 및 출처 사이트에 상세히 작성되어있으니 참고하면 좋다

 

See the Pen gradient progress bar by Lee (@mondaymonday2) on CodePen.

 

 

 

🔗 참고 및 출처

https://naradesign.github.io/media-query.html

반응형
반응형

📝 background: url, background-repeat (div에 이미지 넣기)

<!DOCTYPE html>
<html lang="en">
<body>
<div class="my_dog">
    This is my dog
</div>

</body>
<style>
    .my_dog {
        height: 1000px;
        background: url("https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24283C3858F778CA2E");
        background-repeat: no-repeat;
    }
</style>

</html>

background에 이미지를 넣을 수 있는데 url를 지정해주면 된다.

 

  • background-repeat 속성
    • repeat
      • div를 채울 때까지 반복합니다 (default)
    • no-repeat
      • 이미지를 반복하지 않습니다 [이미지가 한번만 나온다]

 

📝 background-size (div에 이미지 넣기)

<!DOCTYPE html>
<html lang="en">
<style>
  .container {
    background: black;
    height: 200px;
    display: flex;
  }

  .my_dog {
    margin:auto;
    width: 100px;
    height: 100px;
    background: url("https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24283C3858F778CA2E");
    background-repeat: no-repeat;
    background-size: contain;
  }

</style>
<body>
<div class="container">
  <div class="my_dog">
    This is my dog
  </div>
</div>

</body>
</html>

  • background-size 속성
    • default
      • div의 크기만큼 채웁니다 (이미지가 더 큰 경우 잘릴 수 있음)
    • contain
      • div크기만큼 채우는데 가로 세로 비율에 맞게 잘리지 않게 하기 때문에 div의 여백이 존재할 수 있지만 찌그러지거나 안 나오진 않습니다.
    • cover
      • div크기만큼 채우는데 가로나 세로 둘중 하나만 크기에 맞게끔 줄이기 때문에 잘릴 수 있습니다

 

📝 object-fit (div에 이미지 넣기)

<!DOCTYPE html>
<html lang="en">
<style>
  img {
    width: 1000px;
    height: 1500px;
    object-fit: cover;
    border: 10px solid red;
  }

  h1{
    font-size:100px;
    margin-left:400px;
  }
</style>
<body>
<h1>cover</h1>
<div>
  <img src="http://image.dongascience.com/Photo/2020/12/6d740a94b3d3233531281efdf2f997aa.jpg">
</div>

</body>
</html>

  • object-fit 속성
    • fill
      • 요소 콘텐츠 박스 크기에 맞춰 대체 콘텐츠의 크기를 조절합니다. 콘텐츠가 콘텐츠 박스를 가득 채웁니다. 서로의 가로세로비가 일치하지 않으면 콘텐츠가 늘어납니다.
    • contain
      • width 또는 height가 다 찰때 까지 비율에 맞게 커진다 (width 또는 height 둘 중 하나라도 꽉찰 때 까지)
    • none
      • 실제 이미지 크기만큼 채워진다
    • cover
      • 대체 콘텐츠의 가로세로비를 유지하면서, 요소 콘텐츠 박스를 가득 채웁니다. 서로의 가로세로비가 일치하지 않으면 객체 일부가 잘려나갑니다.

 

 

 

반응형
반응형

See the Pen Untitled by Lee (@mondaymonday2) on CodePen.

 

밑에 출처를 기반으로 만든 거라 완전한 이해 없이 만든 거라 난해할 수 있습니다.

별도 노가다하면서 찍었네요 허허

 

 

🔗  참고 및 출처

 

https://hj-tilblog.tistory.com/102

 

CSS로 물결 애니메이션 만들기

🐳 물결치는 애니메이션 만들기 🌊 물결치는 애니메이션 포스팅을 보고 응용해서 만든 달빛이 반짝이는 밤하늘과 바다를 표현한 애니메이션이다. 해당코드는 코드펜에 올라가있으며 하나씩

hj-tilblog.tistory.com

 

반응형
반응형
<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <title>test</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body, html{
            width: 100%;
            height: 100%;
        }


        #container{
            width: 100%;
            min-width: 700px;
            height: 100%;
        }

        #testDiv{
            width: calc(100% - 400px);
            height: 100%;
            float: left;
            background-color: blueviolet;
        }
    </style>
</head>

<body>
    <div id="container">
        <div id="testDiv">

        </div>
    </div>
</body>

</html>
<!-- 출처 : https://usang0810.tistory.com/m/31 -->

css에 calc() 연산이 있는데 width나 height 값을 동적으로 더해지거나 빼거나 하는 값을 넣을 수 있습니다.
예) width: calc(100% - 400px) 일 경우 전체 영역에 - 400px을 차지합니다.

→ 나머지 공간을 100%로 같이 잡으면 꽉찬 영역이 동적으로 변하는 걸 확인 할 수 있습니다.

반응형