어려운 일은 없지만 피하는 것이 더 편해지는 CSS를 작성하는 방법

이것은 무엇입니까?


  • CSS로 마진을 붙일 때, 조심하면 나중에 조금 편해질지도 모르는 Tips 기사입니다
  • 기사를 쓰는 데 사용한 코드는 여기에 있습니다.


  • 이 스타일을 결합한다고 가정





    있을 것 같은 마크업의 예



    예 1: 각 요소를 평평하게 작성


    <h1>このページのタイトル</h1>
    
    <h2>ちょっと強調したテキスト</h2>
    <p>なにかしら文章が書いてある。以下はダミーテキスト。</p>
    <p>吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。</p>
    <p>吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。</p>
    <p>この書生というのは時々我々を捕えて煮て食うという話である。しかしその当時は何という考もなかったから別段恐しいとも思わなかった。</p>
    
    <h2>またもや強調したテキスト</h2>
    <p>ただ彼の掌に載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである。</p>
    <p>掌の上で少し落ちついて書生の顔を見たのがいわゆる人間というものの見始であろう。この時妙なものだと思った感じが今でも残っている。</p>
    <p>第一毛をもって装飾されべきはずの顔がつるつるしてまるで薬缶だ。その後猫にもだいぶ逢ったがこんな片輪には一度も出会わした事がない。のみならず顔の真中があまりに突起している。</p>
    

    예 2 : 제목 아래의 내용을 div로 wrap하고 있습니다.


    <h1>このページのタイトル</h1>
    
    <div>
      <h2>ちょっと強調したテキスト</h2>
      <p>なにかしら文章が書いてある。以下はダミーテキスト。</p>
      <p>吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。</p>
      <p>吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。</p>
      <p>この書生というのは時々我々を捕えて煮て食うという話である。しかしその当時は何という考もなかったから別段恐しいとも思わなかった。</p>
    
      <h2>またもや強調したテキスト</h2>
      <p>ただ彼の掌に載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである。</p>
      <p>掌の上で少し落ちついて書生の顔を見たのがいわゆる人間というものの見始であろう。この時妙なものだと思った感じが今でも残っている。</p>
      <p>第一毛をもって装飾されべきはずの顔がつるつるしてまるで薬缶だ。その後猫にもだいぶ逢ったがこんな片輪には一度も出会わした事がない。のみならず顔の真中があまりに突起している。</p>
    </div>
    
  • 두 가지 예의 차이점은 제목 아래의 문장을 div로 wrap하고 있는지 그렇지 않은지
  • 실제로는 루프 처리나 반응 형의 사정등에서도 wrap 한다·하지 않는 것은 바뀐다고 생각하므로, 어느 쪽이 좋은 나쁜 이야기는 하지 않는다

  • 예제 1에서는 문제가 없지만 예제 2에서는 피하는 것이 좋습니다.



    ※기사를 쓰는 사정상 태그 셀렉터로 설명하고 있습니다만, 좋은 느낌의 클래스가 정의되고 있는 생각으로 읽어 주세요

    bad.css
    h2 {
      margin-top: 32px;
    }
    
  • "두 개의 강조 된 텍스트 위에 동일한 여백이 있기 때문에 각각에 여백을 붙인"상태

  • 반대로 예 2에서 좋은 CSS



    good.css
    div {
      margin-top: 32px;
    }
    
    h2:not(:first-of-type) {
      margin-top: 32px;
    }
    
  • "wrap하고있는 div에 margin-top을 붙이고, 2 번째 이후의 h2에 margin-top을 붙인"상태

  • 차이점은?



    예제 2를 dev 도구로 살펴 보겠습니다.



    bad.css
    good.css


    섹션을 선택한 상태



    h2를 선택한 상태




  • bad.css 에서 일어나는 일
  • h2와 wrap했다 div 사이에는 확실히 여백이 존재한다
  • 그러나, div 는 아무것도 여백을 나타내지 않는다
  • 1개 아래의 계층에 있는 h2 가, wrap했다 div
  • good.css 에서 일어나는 일
  • h2와 랩핑 된 div 사이에 margin가 표시됩니다
  • 1개 아래의 계층에 있는 h2margin 를 가지지 않는다


  • 즉?


  • 1개소 존재할 정도라면 별로 문제 없다
  • 레이아웃 자체는 올바르게 할 수 있습니다

  • 여러 개소가 되면 「어째서인지 상정하고 있는 것보다 여백이 넓다」라고 하는 일이 일어나기 쉽다
  • 그리고 dev 도구로 발견하기 어렵습니다
  • 왜냐하면 중첩 된 요소까지 보지 않으면 시각적으로 표시되지 않기 때문입니다.

  • 이러한 요소에 position으로 배치하기 시작하면, 여러 가지를 알기 어려워진다

  • 요약


  • wrap한 요소를 뚫어 버리는 margin 지정은 피해 둡시다
  • 이제는 레이아웃 문제가 없더라도 쌓아 올린 후에 리팩토링해야하는 장면이 오면 힘들어지기 쉽습니다
  • 좋은 웹페이지 즐겨찾기