[NAVER]

๋…•์ดยท2022๋…„ 11์›” 1์ผ
0

Portfolio

๋ชฉ๋ก ๋ณด๊ธฐ
1/4
post-thumbnail

๐Ÿ’ป Naver clone coding

  • ์‚ฌ์ดํŠธ๋ช… : ๋„ค์ด๋ฒ„
  • ์‚ฌ์šฉ์–ธ์–ด : html / css
  • ๋ถ„๋ฅ˜ : ์ ์‘ํ˜• PC

Check Point

  • ์‹œ๋งจํ‹ฑ ๋งˆํฌ์—…
  • ์˜๋ฏธ์žˆ๋Š” ํด๋ž˜์Šค๋ช… ์ง“๊ธฐ
  • ์›น ์ ‘๊ทผ์„ฑ์„ ๊ณ ๋ คํ•œ blind ๊ธฐ๋ฒ•
  • float ํ•ด์ œ ๋ฐฉ๋ฒ•
  • IR, IS ๊ธฐ๋ฒ•

1. ์‹œ๋งจํ‹ฑ ๋งˆํฌ์—…

: ํƒœ๊ทธ ์ž์ฒด์— ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ๋งˆํฌ์—…์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ.

โœ๐Ÿป ์‹œ๋งจํ‹ฑํƒœ๊ทธ ์žฅ์ 

  1. SEO(search engine optimization) ์ตœ์ ํ™”์— ์œ ๋ฆฌํ•จ
    : ๊ฒ€์ƒ‰ ์—”์ง„์ด ํƒœ๊ทธ์˜ ๋ชฉ์ ์— ๋ถ€ํ•ฉํ•˜๊ฒŒ ์„ค๊ณ„๋˜์–ด์žˆ๋Š” ๊ตฌ์กฐ์˜ ์‚ฌ์ดํŠธ์—์„œ ๋”์šฑ ๋นจ๋ฆฌ ํšจ์œจ์ ์œผ๋กœ ์ •๋ณด๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์˜ ๋…ธ์ถœ์— ์œ ๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
  2. ์›น ์ ‘๊ทผ์„ฑ์— ํšจ์œจ์ 
    : ์Šคํฌ๋ฆฐ๋ฆฌ๋” ํ™˜๊ฒฝ์—์„œ๋Š” ์‹œ๊ฐ์žฅ์• ๊ฐ€ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋กœ ํ•˜์—ฌ๊ธˆ ๊ทธ ์˜๋ฏธ๋ฅผ ํ›จ์”ฌ ์ž˜ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Œ
  3. ์œ ์ง€๋ณด์ˆ˜์˜ ์šฉ์ด์„ฑ
    : ํƒœ๊ทธ์˜ ์ด๋ฆ„๋งŒ ๋ณด๊ณ ๋„ ์–ด๋–ค ์˜์—ญ์ธ์ง€ ๋ฐ”๋กœ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•œ ์ •๋ฆฌ๋œ ๋งˆํฌ์—…์€ ์ฝ”๋“œ ์‹๋ณ„์ด ์šฉ์ด

โœ๐Ÿป ์‹œ๋งจํ‹ฑํƒœ๊ทธ์˜ ๊ตฌ์„ฑ ๋ฐ ์‚ฌ์šฉ์šฉ๋„

: header / main / footer

  • header : h1(logo),nav(menu)
  • main : section(๋ฉ”์ธ์ปจํ…์ธ ),article(๋…๋ฆฝ์ ์ธ์ปจํ…์ธ )
  • footer : address -> ์‚ฌ์ดํŠธ์˜ ์—ฐ๋ฝ์ฒ˜๋‚˜ ์ •๋ณด๋ฅผ ๊ธฐ์ž…

strong : ๋ฌธ์žฅ๊ฐ•์กฐ ๊ฒŒ์‹œ๊ธ€์—์„œ ์ œ๋ชฉ๊ธ‰
em: ๋‹จ์–ด๊ฐ•์กฐ ๊ฒŒ์‹œ๊ธ€์—์„œ ์นดํ…Œ๊ณ ๋ฆฌ,๋ถ„๋ฅ˜๊ธ‰
p : ๋ฌธ์žฅ,๋‹จ๋ฝ,๋‚ด์šฉ ์œ ์˜๋ฏธํ•œ ํ…์ŠคํŠธ
span : ์˜๋ฏธ์—†๊ฑฐ๋‚˜ ๋‹จ์ˆœ ํ…์ŠคํŠธ
i : ๋””์ž์ธ

2. ์˜๋ฏธ์žˆ๋Š” ํด๋ž˜์Šค๋ช… ์ง“๊ธฐ

  • ์˜๋ฏธ์—†์ด ์˜์—ญ์„ ๊ตฌ์„ฑํ•  ๋•Œ
    group-flex
    column-left,column-right
    col-left,col-right
    row-top,row-bottom

  • ์˜๋ฏธ์žˆ๊ฒŒ ์˜์—ญ์„ ๊ตฌ์„ฑํ•  ๋•Œ
    ์„น์…˜: sc-class
    ์˜์—ญ: class-area
    ๋ฆฌ์ŠคํŠธ: ul -> class-list , li -> class-item
    aํƒœ๊ทธ : ๋งํฌ์ด๋™ -> link-๋ชฉ์ , ํŠน์ •ํ•œ ์•ก์…˜ btn-๋”๋ณด๊ธฐ(์Šคํฌ๋ฆฝํŠธ์ž‘์šฉ)

  • class์ž‘์„ฑ์ด 4๋‹จ๊ณ„ ์ด์ƒ์€ ์ง€์†X

    ๐Ÿ™…๐Ÿปโ€โ™€๏ธ[ํ‹€๋ฆฐ์˜ˆ์‹œ - ์ž‘์„ฑํ•˜๊ธฐ ํž˜๋“ค๊ณ  ์ž์‹์ด ๊ฒน์น  ์ˆ˜ ์žˆ์Œ]
    .section-visual ul{}
    .section-visual ul li{}
    .section-visual ul li a{}
    .section-visual ul li a img{}

    ๐Ÿ™†๐Ÿปโ€โ™€๏ธ[์˜ฌ๋ฐ”๋ฅธ์˜ˆ์‹œ - ๊ฐ„๊ฒฐํ•˜๊ณ  ์ •ํ™•ํ•จ]
    .sc-visual .txt-list{}
    .sc-visual .txt-item{}
    .sc-visual .link-item{}
    .sc-visual .link-item img{}

3. ์›น ์ ‘๊ทผ์„ฑ์„ ๊ณ ๋ คํ•œ blind ๊ธฐ๋ฒ•

  • ์›น ์ ‘๊ทผ์„ฑ์„ ๊ณ ๋ คํ•œ ์ฝ˜ํ…์ธ  ์ˆจ๊ธฐ๊ธฐ๋ฅผ ์œ„ํ•œ ๊ธฐ๋ฒ•
  • display:none, visibility:hidden ๋“ฑ ์—ฌ๋Ÿฌ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ˜ํ…์ธ ๋ฅผ ์ˆจ๊ธธ ์ˆ˜ ์žˆ์ง€๋งŒ ์Šคํฌ๋ฆฐ ๋ฆฌ๋”๋กœ๋„ ์ฝ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ ‘๊ทผ์„ฑ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•จ -> ์ฆ‰, ํ™”๋ฉด์—๋Š” ๋ณด์ด์ง€ ์•Š์ง€๋งŒ ์Šคํฌ๋ฆฐ ๋ฆฌ๋”์—๋Š” ์ฝํžˆ๋Š” ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

๐ŸŽˆ example

.blind {
	/* ๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š๋„๋ก */
  position: absolute;

	/* ์Šคํฌ๋ฆฐ ๋ฆฌ๋”๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก */
  width: 1px;
  height: 1px;

	/* ๋ˆˆ์— ๋ณด์ด๋Š” ๋ถ€๋ถ„์„ ์ œ๊ฑฐ */
  clip: rect(0 0 0 0);
  margin: -1px;
  overflow: hidden;
}

4. float ํ•ด์ œ ๋ฐฉ๋ฒ•

: ์ž์‹์š”์†Œ์— float๋ฅผ ์ ์šฉ ์‹œ ํƒœ๊ทธ๊ฐ€ ๋ถ•- ๋œจ๊ฒŒ๋˜๋ฉด์„œ, ๋ถ€๋ชจ๋Š” ์ž์‹์ด ์—†๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ณ  height๊ฐ’์„ ์žƒ๊ธฐ๋•Œ๋ฌธ์—, ํ•ด์ œ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

  1. ๋ถ€๋ชจ์š”์†Œ์— overflow:hidden; ์ฃผ๊ธฐ
    ์˜์—ญ ๋ฐ–์œผ๋กœ ๋„˜์น˜๋Š” ๋””์ž์ธ์ด ์žˆ๋‹ค๋ฉด ์‚ฌ์šฉX(๋‹จ์ˆœ ๋””์ž์ธ์ผ๋•Œ๋งŒ ์‚ฌ์šฉ)
  2. ๊ฐ€์ƒ์š”์†Œ ::after์— clear์ฒ˜๋ฆฌ

๐ŸŽˆ example

float๋œ ์š”์†Œ์˜ ๋ถ€๋ชจํƒœ๊ทธ::after {
 content:'';
 display:block;
 clear:both;
}

5. IR, IS ๊ธฐ๋ฒ•

  • IR(Image Replacement)
    ์˜๋ฏธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋ฐฐ๊ฒฝ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋Œ€์‹  ์ „๊ฒฝ์— ์ƒ์‘ํ•˜๋Š” ํ…์ŠคํŠธ๋ฅผ ๋„ฃ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ์จ ํ™”๋ฉด ๋‚ญ๋…๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‹œ๊ฐ ์žฅ์• ์ธ์ด ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ
  • IS(Image Sprite)
    ์กฐ๊ฐ๋‚œ ์ด๋ฏธ์ง€ ํŒŒ์ผ๋“ค์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋ณ‘ํ•ฉ ํ›„ ๋ฐฐ๊ฒฝ์ฒ˜๋ฆฌํ•ด์„œ ์›น ๋ฌธ์„œ ์ „์†ก ์†๋„๋ฅผ ๋†’์ด๋Š” ๊ธฐ๋ฒ•. ์ด ๋•Œ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ์ด๋ฏธ์ง€๋Š” ์ „๊ฒฝ์— ์ƒ์‘ํ•˜๋Š” ํ…์ŠคํŠธ๋ฅผ ํฌํ•จ์‹œ์ผœ์„œ ์ ‘๊ทผ์„ฑ์„ ํ™•๋ณดํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— IR(Image Replacement) ๊ธฐ๋ฒ•์ด ํ•จ๊ป˜ ์‚ฌ์šฉ๋จ

๐ŸŽˆ example


-> ๊ณตํ†ต์œผ๋กœ ์“ฐ์ด๋Š” ์˜์—ญ ์ฝ”๋“œ์ž‘์„ฑํ›„, ํ•ด๋‹น ํด๋ž˜์Šค์™€ ์ขŒํ‘œ๋งŒ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด๋จ

.class๋ช…:after{
background-image: url(../images/sp-bg.png);
background-size: 457px;
background-repeat: no-repeat;
}

https://spritegen.website-performance.org/
https://www.toptal.com/developers/css/sprite-generator

Issue Point

  • flex์‚ฌ์šฉํ•˜์—ฌ gnb์˜์—ญ์žก๊ธฐ
  • ๋‰ด์Šค์˜์—ญ border ๋””์ž์ธ
  • Text ๋ง์ค„์ž„ํ‘œ์‹œ

1. flex์‚ฌ์šฉํ•˜์—ฌ gnb์˜์—ญ์žก๊ธฐ

   <nav class="gnb-area">
     <ul class="gnb-list">
       <li class="gnb-item"><a href="">๋ฉ”์ผ</a></li>
       <li class="gnb-item"><a href="">์นดํŽ˜</a></li>
       <li class="gnb-item"><a href="">๋ธ”๋กœ๊ทธ</a></li>
       <li class="gnb-item"><a href="">์ง€์‹iN</a></li>
       <li class="gnb-item"><a href="">์‡ผํ•‘</a></li>
     </ul>
   </nav>
.header .gnb-area .gnb-list {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.header .gnb-area .gnb-item {
  font-size: 15px;
  font-weight: bold;
  line-height: 52px;
  color: #19ce60;
}

๐ŸŽˆ flex ์ฐธ๊ณ ์‚ฌ์ดํŠธ

https://studiomeal.com/archives/197

2. ๋‰ด์Šค์˜์—ญ border ๋””์ž์ธ

  <ul class="media-list">
    <li class="media-item">
      <a href="" class="link-media">
        <img src="https://s.pstatic.net/static/newsstand/2020/logo/light/0604/327.png" alt="๋‰ด๋ฐ์ผ๋ฆฌ">
      </a>
    </li>
    <li class="media-item">
      <a href="" class="link-media">
        <img src="https://s.pstatic.net/static/newsstand/2020/logo/light/0604/014.png" alt="ํŒŒ์ด๋‚ธ์…œ">
      </a>
    </li>
  </ul>
   <!-- iํƒœ๊ทธ๋Š” ๋‹จ์ˆœ๋””์ž์ธ-->
   <!-- ์ˆ˜์ง์„ -->
   <i class="vt-line vt1"></i>
   <i class="vt-line vt2"></i>
   <i class="vt-line vt3"></i>
   <i class="vt-line vt4"></i>
   <i class="vt-line vt5"></i> 
   <!-- ์ˆ˜ํ‰์„  -->
   <i class="hr-line hr1"></i>
   <i class="hr-line hr2"></i>
   <i class="hr-line hr3"></i>

์ „์ฒด content๋ฐ•์Šค๋งŒ border 1px solid ์ฒ˜๋ฆฌ -> ๊ทธ์™ธ ๋‚˜๋จธ์ง€ ์ˆ˜์ง์„ ๊ณผ ์ˆ˜ํ‰์„ ์€ iํƒœ๊ทธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ position:absolute;๋กœ ์œ„์น˜ ๊ณ ์ • ์‹œํ‚ด


์ˆ˜์ง์„ ๊ณผ ์ˆ˜ํ‰์„ ์„ ๊ฐ๊ฐ ์ฝ”๋”ฉํ•˜์—ฌ ์œ„์น˜ ๊ณ ์ •์„ ์‹œํ‚จ ์ด์œ 
: ๊ฐ li์— border์ฒ˜๋ฆฌ๋ฅผ ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, ๋งŒ์•ฝ ๋ฏธ๋””์–ด์˜ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ ๋””์ž์ธ ๋ ˆ์ด์•„์›ƒ์ด ๋ง๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์—

๐Ÿ‘‰๐Ÿป ์ˆ˜์ง์„ ์€ left๊ฐ’์œผ๋กœ ์กฐ์ ˆ 
.sc-news .vt-line {
  position: absolute;
  width: 1px;
  height: 100%;
  background: #dae1e6;
  top: 0;
}

.sc-news .vt-line.vt1 {
  left: 124px;
}

๐Ÿ‘‰๐Ÿป ์ˆ˜ํ‰์„ ์€ top๊ฐ’์œผ๋กœ ์กฐ์ ˆ 
.sc-news .hr-line {
  position: absolute;
  width: 100%;
  height: 1px;
  background: #dae1e6;
  left: 0;
}

.sc-news .hr-line.hr1 {
  top: 65px;
}

3. Text ๋ง์ค„์ž„ํ‘œ์‹œ

  1. ํ•œ ์ค„ ๋‹จ์œ„๋กœ ํ…์ŠคํŠธ ๋ง์ค„์ž„ ํ‘œ์‹œ๋ฒ•
.box{
  display:block; -> ๋ง์ค„์ž„ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๊ธ€์ž ์ถœ๋ ฅํ•  ๊ณต๊ฐ„์ด ํ•„์š”ํ•จ
  white-space:nowrap; -> ํ…์ŠคํŠธ๊ฐ€ ๋ถ€๋ชจ๋„ˆ๋น„๋ณด๋‹ค ๋„“์–ด์ง€๋ฉด ์ž๋™์œผ๋กœ ์ค„๋ฐ”๊ฟˆ
  overflow:hidden; -> ๋„˜์น˜๋Š” ํ…์ŠคํŠธ ์ˆจ๊น€์ฒ˜๋ฆฌ
  text-overflow:ellipsis; -> ๋ง์ค„์ž„ ... ํ‘œ์‹œ
}
  1. 2์ค„์ด์ƒ ํ…์ŠคํŠธ ๋ง์ค„์ž„ ํ‘œ์‹œ๋ฒ•
.box{
  width:200px;
  /*ํŠน์ • ๋‹จ์œ„๋กœ ํ…์ŠคํŠธ๋ฅผ ์ž๋ฅด๊ธฐ ์œ„ํ•œ ๊ตฌ๋ฌธ*/
  white-space: normal; -> nowrap ํ•ด์ œ
  display:-webkit-box; -> ๋ธ”๋ก์„ ์ˆ˜์ง,์ˆ˜ํ‰์œผ๋กœ ๋ฐฐ์น˜ ํ˜น์€ ์—ญ์ˆœ๋ฐฐ์—ด ์ž„์˜ ๋ฐฐ์น˜ ์ˆœ์„œ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ํŠน์„ฑ
  -webkit-line-clamp:3; -> ๋ธ”๋ก ์ปจํ…Œ์ด๋„ˆ์˜ ์ปจํ…์ธ ๋ฅผ ์ง€์ •ํ•œ ์ค„ ์ˆ˜ ๋งŒํผ ์ œํ•œํ•˜๋Š” ์†์„ฑ 
  -webkit-box-orient:vertical; -> ์ฝ˜ํ…์ธ ๋ฅผ ๊ฐ€๋กœ ๋˜๋Š” ์„ธ๋กœ๋กœ ๋ฐฐ์น˜ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์†์„ฑ
  overflow:hidden; -> ๋„˜์น˜๋Š” ํ…์ŠคํŠธ ์ˆจ๊น€์ฒ˜๋ฆฌ
}  
  1. IE์—์„œ ๋ง์ค„์ž„ ํ‘œ์‹œ๋ฒ•
    : -webkit-box-์™€ text-overflow ์ง€์›X
.box{
  width:200px;
  white-space: normal; 
  display:-webkit-box;
  -webkit-line-clamp:2; 
  -webkit-box-orient:vertical; 
  overflow:hidden;
  /*์ถ”๊ฐ€*/
  line-height:1.2;
  max-height:2.4; -> line-height๊ฐ’ 2๋ฐฐ
}
profile
ๅ…‰่€Œไธ่€€ :) ํผ๋ธ”๋ฆฌ์‹ฑ-ing

0๊ฐœ์˜ ๋Œ“๊ธ€