CSS LAYOUT

CSS 포지셔닝과 속성들

1. box-sizing 속성

  • width 속성값을 어디에 줄 것인지 정한다.

    box model

    • box-sizing : content-box는 content-box의 width 가 width 속성값을 가진다. (default setting)

    • box-sizing :border-box;는 border,padding과 content-box가 width 속성값을 가진다.

      아래는 모두 width:500px; 을 가지는 div 요소들이다. 설정에 따라 크기가 달라진다.

    layout_1

      <style media="screen">
        div.a{
          width: 500px;
          height: 100px;
          background: pink;
          box-sizing: content-box;
          border: 10px dotted black;
          padding: 20px;
          margin: 5px;
        }
        div.b{
          width: 500px;
          height: 100px;
          background: orange;
          border: 10px dotted black;
          padding: 20px;
          margin: 5px;
          box-sizing: border-box;
        }
        div.c{
          width: 500px;
          height: 100px;
          background-color: skyblue;
          margin: 5px;
        }
        </style>
    

    계산하기 귀찮으면 box-sizing : border-box;를 주면 될 것 같다. 성능면에선 어떤지 찾아보기..

2. Float 속성

  • 요소들은 기본적인 흐름에 따라 배치된다. (block은 상하, inline 은 좌우)

    //float속성만 표시, DEFUALT
    .container {}
    .A{}
    .B{}
    

    float1

  • float 속성은 이런 기본 흐름에서 벗어나도록 한다. 이 속성은 요소가 독자적인 공간을 만들어 그곳에 배치됨.

  • 텍스트는 따라 올라가지 않는다. one 박스에 style = “ float : left” 속성을 주면, 아래와 같이 된다. A박스와 B박스가 겹쳐져 있다. (float은 화면에 떠있는 요소라서, one자리를 two가 차지하게 된다.) 그러나 텍스트는 따라 올라가지 않는다.

    //float속성만 표시
    .container {}
    .A{float : left}
    .B{}
    

    flaot2

  • 부모요소는 자식요소가 사라진 것처럼 느낀다. 따라서 A,B 박스 둘 다에 float속성을 주었을 때, 다음과 같이 된다.

    //float속성만 표시
    .container {}
    .A{float : left}
    .B{float : left}
    

float3

  • A,B 다음에 다른 블록 요소를 넣었을 때, 아래 그림과 같이 A,B와 겹쳐지게 된다. A,B는 화면상 떠있기 때문에 그 아래 자리를 차지하고 들어가는 느낌?

    float4

    이걸 원하지 않는다면, clear 속성을 이용해 float 속성을 해제할 수 있다. clear 속성에는 none, left, right, both 값이 있다. 아래는 clear:left ;속성을 사용했다.

        div.d{
          width: 200px;
          height: 200px;
          background-color: yellow;
          clear: left;<!--clear 속성 추가-->
        }
    

    하면 다음과 같이 된다!

float5

float5

3. Position 속성

  • 각 요소들이 위치리를 기존에 가지고 있는 성질과 상관없이 배치시키는 속성 static, absolute, relative, fixed, sticky, initial, inherit

    • static: defualt, 요소들이 normal flow에 따라서 배치

      img

    • absolute : 가장 가까운 조상요소 중 position 속성이 relative인 요소를 기준으로 offset에 따라 배치. 부모 요소가 없을 경우, body가 부모가된다. normal flow의 흐름에서 벗어나 배치 가능. (그 뒤 요소가 영향을 받음) . 폭을 주지 않으면 폭이 없어져버린다.

      4번 박스에 position: absolute 속성을 주었다. 폭이 사라진 것을 볼 수 있다.

      img

      top : 0 , left :0 의 속성을 추가 하였다. 부모 요소 중 absolute와 relative 가 없어서 문서의 시작점에 붙는 것을 볼 수 있다.

      img

    • relative : 자신이 있어야할 곳을 기준으로 offset을 먹인다. 부모 요소의 position 영향을 받지 않는다. container이 줄어들지 않고 3번 공간을 그대로 가지고 있다. (그 뒤 요소가 영향을 받지 않음)

      img

    • fixed: View port를 기준으로 offset에 따라 배치. 부모 요소가 없을 경우, body가 부모가된다. normal flow의 흐름에서 벗어나 배치 가능. (그 뒤 요소가 영향을 받음) 아래 그림처럼 화면 특정 좌표에 고정되어있다.

      imgimg

  • z-index : 정수값; 으로 z축 값으로 생각하면 된다. Z index가 높을수록, 더 앞쪽에 배치된다.

    zindex newz

          div.b1{
            top: 100px;
            left : 100px;
            z-index: 3;
          }
          div.b2{
            top: 70px;
            left : 70px;
            z-index: 1;
    
          }
          div.b3{
            top: 50px;
            left : 120px;
            z-index: 2;
    
    
          }
    
  • offset은 top left bottom right 으로 한다.

4. Visibility 속성

  • visibility 속성에는 hidden, visible, collapse 의 속성값이 있다.

    • visible : 화면에 요소를 표시한다. 기본 값이다.
    • hidden : 눈에는 보이지 않지만 공간은 그대로 차지한다.
    • collapse : table 요소에만 줄 수 있다. 화면에 보이지도, 공간을 차지하지도 않는다.
  • 디스플레이에서 DOM(Document Object Model)이라는 트리를 만드는데, visibility:hidden을 하면 이 트리에 포함시키지 않는다.

    평소

    hidden 값 준 후

    <div>
      1st
    </div>
    <div style = "visibility : hidden">
      2nd
    </div>
    <div>
      3rd
    </div>
    

    hidden

    CSS LAYOUT2

다단으로 편집하기

  • 다단 관련 속성은 브라우저 별 접두사를 붙여서 사용해야한다.
크롬, 사파리 : -webkit-
파이어폭스 : -moz-
오페라 : -o-
인터넷 익스플로러 -ms-

column-width

  • 다단의 너비를 정하면 화면의 크기에 따라 단의 개수는 변하게 된다.

1107css1

.dan{
-webkit-colum-width : 120px;
-moz-column-width:120px;
column-width: 120px;
}

column-count

  • 다단의 수를 정한다. 화면 크기에 따라 너비가 달라진다.

    1107css2

    1107css3

.dan{
-webkit-colum-count : 3;
-moz-column-count:3;
column-count: 3;
}

column-gap

  • 단의 갭 너비를 줄 수 있다.

1107css4

.dan{
column-count: 3;
column-gap : 10em;
}

column-rule

  • column-rule : width style color; 형식으로 쓴다. width style color 따로 따로 줄 수 있지만, 그러면 귀찮으니까 한번에 다 주는 걸로..

1107css5

.dan{
column-count: 3;
column-rule : 1px dotted black;
}

break-after

  • break-after, break-before, break-inside가 있다.
  • 각각 특정 요소 앞, 특정 요소 뒤, 특정 요소 안에 속성값인 columnavoid-column으로 칼럼을 넣거나 없앨 수 있다.
  • break-before전

1107css6

  • break-before후

1107css7

.dan{
    column-count: 3;
}
h3{
    break-before : column;
}

column-span

  • 여러 단을 하나로 합친다. 첫번째, 두번째, 세번째 h3 태그에 적용을 시켰다. 다음과 같이 되었다.
  • column-span : all;하면 합쳐지고, column-span : 1;은 그냥 기본 값이다.

1107css8

.dan{
    column-count: 3;
}
h3{
    column-span : all;
}

표 스타일

caption-side

  • 표 제목의 위치를 정할 수 있다.
caption-side: top; // 캡션을 표 위에 표시한다.
caption-side: bottom; // 캡션을 표 아래에 표시한다.

border

  • 표를 사용할 때 테두리 설정을 할 수 있다.
border : width style color; 형식으로 준다.

border-collapse

  • < table> 과 <td> 에 border을 다 주면, 두줄로 표시된다. 이 때 border-collapse를 이용하면 두 테두리가 하나로 합쳐진 게 된다.

    1107css91107css10

border-collapse : collapse; //테두리를 하나로 합쳐 표시한다.
border-collapse : separate; //기본값
table{
      border: 1px solid black;
      border-collapse: collapse;
    }

border-spacing

border_spacing

  • 셀 테두리 사이의 거리 지정. 값이 하나면, 수평 수직 거리 동시에. 두개면 수평거리 수직거리를 의미한다.
table{
    border: 1px solid black;
    border-spacing: 10px 20px;
}

empty-cells

  • 빈 셀의 표시 여부를 결정한다. show 가 기본값이고, hide하면 빈 셀이 표시되지 않는다.

    1107css12

table{
border: 1px solid black;
empty-cells:  10px 20px;
}

width height

  • 셀의 너비와 높이를 정한다. 너무 기초니까 스킵!

table-layout

  • 콘텐츠에 맞게 셀 너비를 지정한다. 셀 안의 내용 양에 따라 셀이 커질 수도, 아니면 상관없이 계속 같은 값을 가질 수도 있다.
  • word break를 해야지 셀 밖으로 내용이 삐죽삐죽 튀어나가지 않게 할 수 있다..

1107css131107css14

table{
border: 1px solid black;
table-layout: fixed;
width: 130px;
word-break: break-all;
}

align

  • text-align은 수평 정렬(left,right,center) , vertical-align은 수직 정렬(baseline, top,bottom, ..)이다.

  • 다른 속성들은 다 table 태그에 줬는데 , 이건 td태그에 준다.

    1107css151107css16

td{
    width: 200px;
    height: 200px;
    border: 1px solid black;
    text-align: left;
    vertical-align: bottom;
}

© 2018. All rights reserved.

Powered by Hydejack v8.5.2