πŸ‘¨πŸ»β€πŸŽ¨Ant Design μ—μ„œμ˜ λ°˜μ‘ν˜• μ›Ή λ””μžμΈ

πŸ‘¨πŸ»β€πŸŽ¨μ•€νŠΈ λ””μžμΈμ˜ input νƒœκ·Έ

기쑴에 λ§Œλ“€μ—ˆλ˜ AppLayout.js νŒŒμΌμ—μ„œ ν•΄μ‹œνƒœκ·Έλ₯Ό 검색할 수 μžˆλŠ” 인풋 창을 λ„£μ–΄ μ£Όμ—ˆλ‹€.

import React, { useState } from 'react'
import PropTypes from 'prop-types'
import Link from 'next/Link'
import { Menu, Input } from 'antd'

const AppLayout = ({ children }) => {
  return (
    <div>
      <Menu mode="horizontal">
        <Menu.Item>
          <Link href="/">
            <a>λ…Έλ“œλ²„λ“œ</a>
          </Link>
        </Menu.Item>
        <Menu.Item>
          <Link href="/profile">
            <a>ν”„λ‘œν•„</a>
          </Link>
        </Menu.Item>
        <Menu.Item>
          <Input.Search enterButton style={{ verticalAlign: 'middle' }} />
        </Menu.Item>
        <Menu.Item>
          <Link href="/signup">
            <a>νšŒμ›κ°€μž…</a>
          </Link>
        </Menu.Item>
      </Menu>
      {children}
    </div>
  )
}

AppLayout.propTypes = {
  children: PropTypes.node.isRequired,
}

export default AppLayout

https://ant.design/components/input/

곡식 μ‚¬μ΄νŠΈμ—μ„œ 찾아보고 μ μš©ν•  수 μžˆλ‹€. κ·Έλ ‡κ²Œ ν•˜λ‹€ 보면 μœ„μ•„λž˜ 정렬이 λ§žμ§€ μ•Šμ„ μˆ˜λ„ μžˆλŠ”λ°, μ΄λ•ŒλŠ” inline style 을 μ μš©ν•΄μ„œ

<Menu.Item>
  <Input.Search enterButton style={{ verticalAlign: 'middle' }} />
</Menu.Item>

이런 μ‹μœΌλ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•΄ μ£Όλ©΄ μ„Έλ‘œλ‘œ κ°€μš΄λ° 정렬을 맞좜 수 μžˆμ—ˆλ‹€.

πŸ‘¨πŸ»β€πŸŽ¨μ•€νŠΈ λ””μžμΈμ˜ Grid μ‹œμŠ€ν…œ

ant design 은 λ°˜μ‘ν˜• μ›Ή μ‚¬μ΄νŠΈ μ œμž‘μ„ μœ„ν•œ κ·Έλ¦¬λ“œ μ‹œμŠ€ν…œμ„ κ°–μΆ”κ³  μžˆλ‹€. 이λ₯Ό μœ„ν•΄μ„œλŠ” λ¨Όμ €,

import { Menu, Input, Row, Col } from 'antd'

λ°˜μ‘ν˜•μ„ μœ„ν•΄ Row 와 Col 을 import ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

β€œλ°˜μ‘ν˜•μ„ μœ„ν•œ 원칙”은 λ‹€μŒκ³Ό κ°™λ‹€.

  1. κ°€λ‘œ (Row) λ₯Ό λ¨Όμ € μ„ μ–Έ, κ·Έ λ‹€μŒ κ°€λ‘œμ—μ„œ μ„Έλ‘œ (Col) 둜 자λ₯Έλ‹€.
  2. (νš¨μœ¨μ„±μ„ μœ„ν•΄) λͺ¨λ°”일 (XS) λ””μžμΈμ„ λ¨Όμ € ν•΄μ•Ό ν•œλ‹€. λ°μŠ€ν¬νƒ‘λΆ€ν„° ν•˜λ©΄ breakpoint 섀정이 μ–΄λ €μ›Œμ§„λ‹€.
- xs : λͺ¨λ°”일

- sm : νƒœλΈ”λ¦Ώ

- md : μž‘μ€ λ°μŠ€ν¬νƒ‘

곡식 λ¬Έμ„œ μ‚¬μ΄νŠΈ : https://ant.design/components/grid/

πŸ‘¨πŸ»β€πŸŽ¨μ½”λ“œλ‘œ 확인해 보기

<Row gutter={8}>
  <Col xs={24} md={6}>
    μ™Όμͺ½ 메뉴
  </Col>
  <Col xs={24} md={12}>
    {children}
  </Col>
  <Col xs={24} md={6}>
    <a
      href="https://dev-seolleung2.netlify.app/"
      target="_blank"
      rel="noreferrer noopener"
    >
      Made by Kwangmook
    </a>
  </Col>
</Row>

λ¨Όμ € Row λ₯Ό μ„ μ–Έν•΄ μ£Όμ—ˆκ³ , κ·Έ μ•ˆμ— Col 이 μ„Έ 개 λ“€μ–΄κ°€ μžˆλŠ” ν˜•νƒœ 이닀.

24λΌλŠ” μˆ«μžλŠ” 2, 3, 4, 6, 8, 12 같은 λ‹€μ–‘ν•œ 숫자둜 λ“±λΆ„ν•˜κΈ° 쒋은 μˆ«μžμ΄κΈ°μ— μ•€νŠΈ λ””μžμΈμ—μ„œ μ±„νƒν•œ κ±° κ°™λ‹€.

<Col xs={24} md={6}>
  μ™Όμͺ½ 메뉴
</Col>

λ°”λ‘œ μœ„ μ½”λ“œμ˜ xs 24 λŠ” κ·ΈλŸ¬λ‹ˆκΉŒ λͺ¨λ°”일일 λ•ŒλŠ” 24μΉΈ (ν•œ 쀄) 을 λ‹€ μ°¨μ§€ν•œλ‹€λŠ” μ˜λ―Έκ°€ λœλ‹€.

즉 ν™”λ©΄ 100%λ₯Ό λ‹€ μ‚¬μš©ν•œλ‹€.

xs 일 λ•Œ μ„Έ Col λͺ¨λ‘κ°€ 24 λ₯Ό μ°¨μ§€ν•˜κΈ° λ•Œλ¬Έμ— 컬럼 μ„Έ κ°œκ°€ μŠ€νƒμ²˜λŸΌ μŒ“μΈ ν˜•νƒœλ‘œ λ³΄μ—¬μ§€κ²Œ λœλ‹€.

ν•˜μ§€λ§Œ, md (μž‘μ€ λ°μŠ€ν¬νƒ‘) μ‚¬μ΄μ¦ˆ 일 λ•ŒλŠ” 첫번째 Col 은 6/24 즉 25% λ₯Ό μ°¨μ§€ν•˜κ³ ,

λ‘λ²ˆμ§Έ Col 은 12/24, 50% λ₯Ό μ°¨μ§€ν•˜λ©°, μ„Έλ²ˆμ§Έ Col λ˜ν•œ 25% λ₯Ό μ°¨μ§€ν•œλ‹€.

6 + 12 + 6 = 24 이고 λͺ¨λ°”일 (xs) μ—μ„œλŠ” μ„Έλ‘œ μŠ€νƒν˜•νƒœλ‘œ λ°°μΉ˜λ˜μ—ˆλ˜ Col 이 md μ‚¬μ΄μ¦ˆμΌ λ•ŒλŠ” κ°€λ‘œλ‘œ ν•œ 쀄에 배치되게 λœλ‹€!

μ‰½κ²Œ λ§ν•΄μ„œ 합이 24 μ΄ν•˜μ—¬μ•Ό κ°€λ‘œλ‘œ μ«™ λ‚˜μ˜¬ 수 있게 λœλ‹€.

πŸ‘¨πŸ»β€πŸŽ¨μ»¬λŸΌ μ‚¬μ΄μ˜ 간격을 μ£ΌκΈ° μœ„ν•œ gutter 속성

gutter

미리 μ μš©ν•œ 이미지λ₯Ό μ²¨λΆ€ν–ˆμ§€λ§Œ, gutter λ₯Ό μ μš©ν•˜μ§€ μ•Šμ•˜μ„ λ•ŒλŠ” 컬럼 μ‚¬μ΄μ˜ 간격 (padding) 이 0 μ΄μ˜€κΈ° λ•Œλ¬Έμ—

μ»¬λŸΌλ“€μ΄ λ‹€λ‹₯λ‹€λ‹₯ λΆ™μ–΄ 있게 λ˜μ–΄ 버린닀.

λ°”λ‘œ 이 컬럼 μ‚¬μ΄μ˜ 간격을 μ£ΌκΈ° μœ„ν•΄ Row 에 gutter 속성을 λ„£μ–΄ μ€€λ‹€.

<Row gutter={8}>
  <Col xs={24} md={6}>
    μ™Όμͺ½ 메뉴
  </Col>
  <Col xs={24} md={12}>
    {children}
  </Col>
  <Col xs={24} md={6}>
    <a
      href="https://dev-seolleung2.netlify.app/"
      target="_blank"
      rel="noreferrer noopener"
    >
      Made by Kwangmook
    </a>
  </Col>
</Row>

gutter 8 을 λ„£μ–΄μ£Όλ©΄ μœ„μ˜ 이미지와 같이 쒌 4px 우 4px 합이 8px 둜 간격을 λ„μ›Œ 쀄 수 μžˆλ‹€.

πŸ‘¨πŸ»β€πŸŽ¨λ³΄μ•ˆ μœ„ν˜‘μ„ μ˜ˆλ°©ν•˜κΈ° μœ„ν•œ rel 속성 μ μš©ν•˜κΈ°

μ„Έλ²ˆμ§Έ Col μ—μ„œ target=”_blank” 속성은 잘 μ•Œλ“― 링크λ₯Ό ν΄λ¦­ν–ˆμ„ λ•Œ μƒˆ νŽ˜μ΄μ§€μ—μ„œ λ„μšΈ 수 있게 ν•˜λŠ” 속성이닀.

ν•˜μ§€λ§Œ μ΄λŠ” λ³΄μ•ˆ μœ„ν˜‘μ„ 뢈러 μ˜¨λ‹€.

μ™œλƒν•˜λ©΄, λ‹€λ₯Έ 곳으둜 κ°€λŠ” 링크λ₯Ό ν΄λ¦­ν•˜λ©΄ κ°€κ³ μž ν•˜λŠ” μ›Ή μ‚¬μ΄νŠΈλŠ” μ›Ή μ‚¬μ΄νŠΈμ—μ„œ λ§ˆμ§€λ§‰ μœ„μΉ˜μ˜ URL 을 referrer ν—€λ”λ‘œ λ°›λŠ”λ‹€.

그런데 이 URL μ—λŠ” μ„Έμ…˜, ν† ν°μ΄λ‚˜ μ‚¬μš©μž ID 와 같은 λ―Όκ°ν•œ 데이터가 포함될 μˆ˜λ„ 있기 λ•Œλ¬Έμ— λ…ΈμΆœν•˜λ©΄ μ•ˆλœλ‹€.

이λ₯Ό 막기 μœ„ν•΄μ„œ Referrer-Policy 헀더λ₯Ό no-referrer 둜 μ„€μ •ν•˜κ²Œ λ˜μ§€λ§Œ

μ—¬κΈ°μ—μ„œλŠ” target 속성을 지정해 쀌과 λ™μ‹œμ—,

rel=β€œnoreferrer noopener” 속성을 지정해 μ€Œμ„ 톡해 λ³΄μ•ˆ μœ„ν˜‘μ„ μ˜ˆλ°©ν•  수 μžˆλ‹€.


Written by@[DotoriMook]
ν”„λ‘ νŠΈμ—”λ“œ μ£Όλ‹ˆμ–΄ 개발자 λ„ν† λ¦¬λ¬΅μ˜ 기술개발 λΈ”λ‘œκ·Έ μž…λ‹ˆλ‹€.

GitHubMediumTwitterFacebook