반응형
반응형

📝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크기에 맞춰서 반응형처럼 바뀝니다.

 

 

반응형
반응형

📝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
      • 대체 콘텐츠의 가로세로비를 유지하면서, 요소 콘텐츠 박스를 가득 채웁니다. 서로의 가로세로비가 일치하지 않으면 객체 일부가 잘려나갑니다.

 

 

 

반응형
반응형
<!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%로 같이 잡으면 꽉찬 영역이 동적으로 변하는 걸 확인 할 수 있습니다.

반응형
반응형

📝position (relative , absolute, fixed)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
    span{
        background-color: red;
        margin:5px;
        position:relative;
        color:white;
    }
    div{
        background-color: blue;
        color:white;
        
    }
    </style>
</head>
<body>
    <span style="top:5px">span</span><span style="top:-5px">span</span><span style="bottom:5px">span</span><span style="right:5px">span</span>
    <div style="position:absolute; bottom:5px">abc</div>
    <span >div는 없어요!</span>
    <div style="position: fixed;  right:0">sdfsd</div>
</body>
</html>

position을 통해 해당 요소의 위치를 옮길 수 있습니다.

 

  • relative
    • 해당 요소 위치를 기준으로 top, bottom, left, right를 줄 수 있습니다.
  • absolute
    • 부모 요소를 기준으로 배치됩니다. 그 기준으로 top, bottom, left, right를 줄 수 있습니다.
    • 여기에서는 absolute적용시킨 부모요소가 따로 없기 때문에 그 위에인 body가 조상이 되어서 body 기준으로 위치를 지정받게 됩니다.
  • fixed 
    • 문서 흐름에서 제거 되어서 다른 요소를 밀어내거나 하지 않습니다
    • 스크롤바를 내리던 올리던 작업표시줄은 계속 위에 있잖아요 그런 기능입니다. 항상 어딜가든 고정되어 있는 것이죠

 

 

📝원하는 DIV 최상단 노출시키기 (z-index)

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
    
    div{
        width:50px;
        height:50px;
        position:absolute;
        
    }
    </style>
</head>
<body>
    <div style="left:20px; background-color: blue; z-index: 4;"></div>
    <div style="left:40px; background-color: rgb(56, 56, 255);  z-index: 3"></div>
    <div style="left:60px; background-color: rgb(148, 148, 255);  z-index: 2"></div>
    <div style="left:80px; background-color: rgb(212, 212, 255);  z-index: 1"></div>
</body>
</html>

첫번째 사진 z-index를 적용 안 한 사진입니다. 맨 마지막 div가 맨 위에 올라간 걸 볼 수 있습니다. 하지만 전 반대로 첫번째가 가장 위로가게 하고 싶습니다. 이걸 어떻게 할까요 z-index를 적용시키면 됩니다. z-index를 적용시키려면 position을 꼭 넣어줘야합니다. positon이 있어야 겹치던가 해서 위 아래를 상대적인 숫자 값을 넣어서 정할 수 있으니깐요

 

z-index는 양수 ~ 음수까지 갖을 수 있습니다. 숫자가 낮을 수록 뒤에 배치되며 숫자가 높을 수록 앞으로 나옵니다.

 

 

반응형
반응형

📝div로 테이블 형식 만들기

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    
    <title>Document</title>
    <style>
    div {
        border-style:solid;
    } 


    </style>
</head>
<body>
    <div class="con" style="display:table; width:800px;">
        <div style="display:table-row">
            <div class ="A" style="display:table-cell">A</div>
            <div class ="B" style="display:table-cell">B</div>
            <div class ="C" style="display:table-cell">C</div>
            <div class ="D" style="display:table-cell">D</div>
        </div>
        <div style="display:table-row">
            <div class ="A" style="display:table-cell">A</div>
            <div class ="B" style="display:table-cell">B</div>
            <div class ="C" style="display:table-cell">C</div>
            <div class ="D" style="display:table-cell">D</div>
        </div>
    </div>
    
    
     
</body>
</html>

table 말 그대로 table형식으로 보여지게 만듭니다.

table-rowtr의 기능을하고

table-celltd의 기능을 합니다.

 

개인적으로 이런식으로 사용하는 경우보단 table 자체를 사용하던가 display:flex나 display:grid를 사용하는게 일반적입니다.

 

📝visibility:hidden vs display:none

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">   
    <title>Document</title>
</head>

<style>

.div1{
	display: none;
}

.div2{
	visibility: hidden;
}

</style>
<body>
    <div class="container">
		ABC
        <div class="div1">Div1</div>
		DEF
        <div class="div2">Div2</div>
		GHI
    </div>
</body>
</html>

  • display:none
    • 보이지도 않고 해당 공간도 존재하지 않게 된다
  • visibility:hidden
    • 보이지만 않고 해당 공간은 존재한다. (visibility:visible은 보이게 하는 css이다.)

 

 

 

반응형
반응형

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BmbxuPwQa2lc/FVzBcNJ7UAyJxM6wuqIj61tLrc4wSX0szH/Ev+nYRRuWlolflfl" crossorigin="anonymous">
    
    <title>Document</title>
    <style>
        div{
            border-color:black;
            border-style:solid;
            border-width:20px;
            width:200px
        }
    </style>
</head>
<body>
    <div style="box-sizing: content-box;">
        <p>content-box</p>
    </div>
    <br>
    <div style="box-sizing: border-box;">
        <p>border-box</p>
    </div>

</body>
</html>

box-sizing에는 content-box border-box가 있습니다.

 

content-box content영역 즉 p태그의 영역에 200px인거고 + 20의 border를 가집니다. 총 240입니다.

border-box border영역까지 포함해서 200px을 가집니다. 여기선 p태그가 160을 가지게 되죠 양쪽 border 20px씩

반응형
반응형

HTML에서 레이아웃의 배치는 정말 중요합니다.

 

큰 틀이 만들어져야 뭐를 배치시킬지 중요한 건 사람들이 눈에 띄게 배치시켜야하는 등 수익과도 연관된 부분이죠 그리고 큰 틀이 제대로 갖춰줘야 안에 넣을 때 배치가 예쁩니다.

 

레이아웃 정렬의 경우는 부모 DIV크기 안에서만 움직이기 때문에 이점 꼭 유의하시길 바랍니다. 아니면 헷갈립니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">   
    <title>Document</title>
</head>

<style>
.container{
	border: 2px dotted red;
	padding:10px
}

.div1{
	background-color: red;
	color:white;
	padding:10px;
}

.div2{
	background-color: orange;
	color:white;
	padding:10px;
}

.div3{
	background-color: green;
	color:white;
	padding:10px;
}
</style>
<body>
    <div class="container">
        <div class="div1">Div1</div>
        <div class="div2">Div2</div>
        <div class="div3">Div3</div>
    </div>
</body>
</html>

기본 형태입니다 이제 display:flex를 이용해 놀아보도록 하죠

일단 부모 div에 적용시키는 스타일부터 알아보도록 하죠 → 부모에게 설정을 줘야 플렉스 박스 아래것들이 적용된다

📝display:flex

.container{
	display:flex;
	border: 2px dotted red;
	padding:10px;
	height:200px
}

 

flex 설정된 부모의 크기 안에 자식들이 세로로 다 들어가게 됩니다 (가로 성질 → 꼬챙이로 저 세개를 동시에 찌르는 방향이라고 생각하면 쉽습니다) 즉, 한 줄(가로) 안에 자식들이 다 들어가게 됩니다

 

📝flex-wrap

.container{
    display:flex;
    flex-wrap: wrap;
    border: 2px dotted red;
    padding:10px;
    height:200px;
}

.div1{
    background-color: red;
    color:white;
    width: 500px;
}

.div2{
    background-color: orange;
    color:white;
    width: 500px;
}

.div3{
    background-color: green;
    color:white;
    width: 500px;
}

 

flex-wrap을 적용 안 시켰을 때에는 하나의 줄(row)안에 다 들어가야하기 때문에 flex의 자식인 flex item의 width가 500이여도 다르게 들어갑니다

flex-wrap을 적용시켰을 때에는 width를 맞춰주고 만약 넘어가는 경우 줄바꿈이 일어납니다

 

📝flex-direction:column

.container{
	display:flex;
	flex-direction:column;
	border: 2px dotted red;
	padding:10px;
	height:200px
}

 

flex-direction:column이면 다시 display:block의 성질로 되돌아갑니다 (세로 성질)

default값은 row입니다. (display:flex만 적용시킨 것 = flex-direction:row)

 

📝flex-direction:row-reverse

.container{
	display:flex;
	flex-direction:row-reverse;
	border: 2px dotted red;
	padding:10px;
	height:200px
}

 

flex-direciton:row-reverse는 말 그대로 row한 거를 반대로 보이게 합니다 그래서 Div1이 맨 오른쪽 그다음 Div2 그다음 Div3가 나오게 됩니다

 

 

  • flex-direction option
    • row
    • row-reverse
    • column
    • column-reverse

https://developer.mozilla.org/en-US/docs/Web/CSS/flex-direction

 

flex-direction - CSS: Cascading Style Sheets | MDN

The flex-direction CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).

developer.mozilla.org

 

📝justify-content (좌우 정렬)

.container{
	display:flex;
	/* justify-content: left; */
	/* justify-content: center; */
	justify-content: right;
	border: 2px dotted red;
	padding:10px;
	height:200px
}

 

justify-content 정렬기능인데 flex-direction의 메인축(가로성질 또는 세로성질)에 따라 정렬이 됩니다 위에는 가로 성질인 display:flex이기 때문에 가로로 선을 그었을 때 그 선에서 왼쪽 정렬, 가운데 정렬, 오른쪽 정렬을 하게 됩니다

 

그외 다양한 레이아웃 배치 형태가 있습니다.

 

 

📝justify-content (상하 정렬)

.container{
	display:flex;
	flex-direction: column;
	/* justify-content: start; */
	/* justify-content: center; */
	justify-content: end;
	border: 2px dotted red;
	padding:10px;
	height:200px
}

 

justify-content를 이용해 상하로 정렬하는 방법은 위에서 알려준 flex-direction: column으로 설정하고 위에 justify-content 옵션은 동일하게 적용시키면 됩니다. (구분을 두고 싶으면 LEFT = START , CENTER = CENTER, RIGHT = END 로 표현 하시면 됩니다.)

 

  • justify-content option
    • start = flex-start
    • center
    • end = flex-end
    • space-between
    • space-around
    • space-evenly

https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content

 

justify-content - CSS: Cascading Style Sheets | MDN

The CSS justify-content property defines how the browser distributes space between and around content items along the main-axis of a flex container, and the inline axis of a grid container.

developer.mozilla.org

 

 

📝align-items

.container{
	display:flex;
	align-items: start;
	/* align-items: center; */
	/* align-items: end; */
	align-items: end;
	border: 2px dotted red;
	padding:10px;
	height:200px
}

align-items의 경우 flex-direction을 바꾸지 않고 상하(메인축과 반대축) 정렬을 줄 수 있습니다 위에 예제들이랑 height가 달라졌는데 align-items를 주는 경우는 자식들을 display:inline 성격으로 만들어버립니다

 

.container{
	display:flex;
	align-items: center;
	justify-content: center;
	border: 2px dotted red;
	padding:10px;
	height:200px
}

justify-content와 혼합해서 위와 같은 형식으로도 구현이 가능합니다.

 

  • justify-content option
    • stretch
    • center
    • start = flex-start
    • end = flex-end

 

https://developer.mozilla.org/en-US/docs/Web/CSS/align-items

 

align-items - CSS: Cascading Style Sheets | MDN

The CSS align-items property sets the align-self value on all direct children as a group. In Flexbox, it controls the alignment of items on the Cross Axis. In Grid Layout, it controls the alignment of items on the Block Axis within their grid area.

developer.mozilla.org

 

 

📝align-content

  .container{
    display:flex;
    flex-wrap: wrap;
    border: 2px dotted red;
    padding:10px;
    height:200px;
    align-content: end;
    /*align-items: end; */
  }

  .div1{
    background-color: red;
    color:white;
    width: 500px;
  }

  .div2{
    background-color: orange;
    color:white;
    width: 500px;
  }

  .div3{
    background-color: green;
    color:white;
    width: 500px;
  }

 

flex-wrap에서 wrap인 상태에서 align-items로 적용한 경우 end 정렬이 되는 듯 안 되는 느낌을 받습니다 

 

 

align-content의 경우 wrap 상태에서의 상하(메인축과 반대축) 정렬을 줄 수 있습니다

 

  • align-content option
    • start
    • center
    • space-between
    • end
    • space-around

 

https://developer.mozilla.org/en-US/docs/Web/CSS/align-content

 

align-content - CSS: Cascading Style Sheets | MDN

The CSS align-content property sets the distribution of space between and around content items along a flexbox's cross axis, or a grid or block-level element's block axis.

developer.mozilla.org

 

 

 

📝gap, row-gap, column-gap

.container{
    display:flex;
    gap:10px;
    /*column-gap:10px;*/
    /*row-gap:10px;*/
    border: 2px dotted red;
    padding:10px;
    height:200px;
}

gap을 적용시켰을 때에는 상하좌우의 마진을 줍니다 row-gap과 column-gap으로 줄의 마진 간격 열의 마진 간격을 따로 줄수도 있습니다

 

 

그 밑에 부모 div의 자식인 플렉스 아이템에 적용시키는 style을 알아봅시다.

 

📝align-self (개별 정렬)

.container{
	display:flex;
	border: 2px dotted red;
	padding:10px;
	height:200px
}

.div1{
	align-self: flex-start;
	background-color: red;
	color:white;
	padding:10px;
}

.div2{
	align-self: center;
	background-color: orange;
	color:white;
	padding:10px;
}

.div3{
	align-self: flex-end;
	background-color: green;
	color:white;
	padding:10px;
}

align-self를 이용해 각각의 요소를 개별로 정렬시킬 수 있습니다. 상위 Div에는 display:flex가 선언되어야 합니다

 

 

📝order

<div class="container">
  <div class="div1">1</div>
  <div class="div2">2</div>
  <div class="div3">3</div>
</div>

.container{
    display:flex;
    border: 2px dotted red;
    padding:10px;
    height:200px
}

.div1{
    order:1;
    background-color: red;
    color:white;
    padding:10px;
}

.div2{
    order:10;
    background-color: orange;
    color:white;
    padding:10px;
}

.div3{
    order:-5;
    background-color: green;
    color:white;
    padding:10px;
}

order를 이용해 각각 요소의 위치를 변경할 수 있습니다. 숫자가 작을수록 우선순위가 높습니다.

📝flex-grow

<div class="container">
  <div class="div1">1</div>
  <div class="div2">2</div>
  <div class="div3">3</div>
</div>

.container{
    display:flex;
    border: 2px dotted red;
    padding:10px;
    height:200px
}

.div1{
    flex-grow:2;
    background-color: red;
    color:white;
    padding:10px;
}

.div2{
    flex-grow:1;
    background-color: orange;
    color:white;
    padding:10px;
}

.div3{
    background-color: green;
    color:white;
    padding:10px;
}

기본적으로 div의 크기는 content의 크기만큼 가져가게 된다.

flex-growwidth를 따로 설정 안 하고 비율로 width를 가져가게 한다. 위 그림에서 3은 따로 지정을 안 해서 Content 크기만큼 넓이를 가지게 되고 3을 제외한 넓이를 1과 2는 2:1 비율로 가져가게된다

 

📝flex-shrink

<div class="container">
  <div class="div1">I'm a box, hello world! 💪🏻</div>
  <div class="div2">I'm a box, hello world! 💪🏻</div>
  <div class="div3">I'm a box, hello world! 💪🏻</div>
</div>

.container{
    display:flex;
    border: 2px dotted red;
    padding:10px;
    height:200px
}

.div1{
    background-color: red;
    color:white;
    flex-shrink: 0;
    padding:10px;
}

.div2{
    background-color: orange;
    color:white;
    flex-shrink: 0;
    padding:10px;
}

.div3{
    flex-shrink: 0;
    background-color: green;
    color:white;
    padding:10px;
}

flex-shrink 미적용 flex-shrink 적용

flex-shrink창 크기가 줄일 때 줄어드는 속도에 대한 비율이다

 

참고로 flex-shrink:0을 준 경우 화면 크기에 따라 div 크기가 줄어들지 않습니다.

 

📝flex-basis

<div class="container">
  <div class="div1">I'm a box, hello world! 💪🏻</div>
  <div class="div2">I'm a box, hello world! 💪🏻</div>
</div>

.container{
    display:flex;
    border: 2px dotted red;
    padding:10px;
    height:200px
}

.div1{
    background-color: red;
    color:white;
    flex-grow: 1;
    padding:10px;
}

.div2{
    background-color: orange;
    color:white;
    flex-basis:300px;
    flex-grow: 1;
    padding:10px;
}

flex-basis의 경우 min width처럼 최소 크기를 정해주는 역할과 동일합니다.

위 코드에서 보면 줄어들다가 300px에서 줄어들지 않습니다.

grow도 1:1로 동일한데 넓이가 다른 이유는 flex-basis로 시작지점부터 grow되는 게 달라서 그렇습니다. (300px부터 grow되기 시작해서 그럼)

 

참고로 flex-grow:0; flex-basis의 값을 지정하면 flex-basis크기만큼만 가지게 되고 grow가 0이라 더이상 커지게 되지 않아서 max-width처럼 동작하게 됩니다.

 

 

📝Flex 연습하기

 

https://flexboxfroggy.com/#ko

 

Flexbox Froggy

A game for learning CSS flexbox

flexboxfroggy.com

 

반응형
반응형

📝블록태그

  • 테트리스 블록처럼 층층이 쌓여가는게 특징
  • 블록요소안에 블록요소 가능
  • 블록요소 안에 인라인 요소 가능
  • 일부 블록요손 블록요소를 포함 할 수 없다.
  • 기본적 가로사이즈 100%
  • 가로 세로 사이즈 적용 가능
  • 안쪽 바깥족 여백 모든방향 적용 가능

 

📝블록태그 종류 

<address>, <article>, <aside>, <audio>, <blockquote>, <canvas>, <dd>, <div>, <dl>, <fieldset>, <figcaption>, <figure>, <footer>, <form><h1>, <h2>, <h3>, <h4>, <h5>, <h6><header>, <hgroup>, <hr>, <noscript>, <ol>, <output>, <p>, <pre>, <section><table>, <ul>, <video>

 

 

📝인라인태그 

  • 한줄로 선처럼 나열이 된다. 
  • 안쪽여백, 바깥쪽여백은 좌우측만 적용 
  • 가로 세로 사이즈 적용이 안 된다.(일부요소는 가능 , input, select, img) 
  • 인라인 요소엔 인라인요소만들어간다. 
  • 자신의 부모의 가로폭보다 현재 가로폭이 길면 다음줄로 넘어간다.

 

📝인라인태그 종류

<a>, <abbr>, <acronym>, <b>, <bdo>, <big>, <br/>, <button>, <cite>, <code>, <dfn>, <em>, <i><img><input>, <kbd>, <label>, <map>, <object>, <q>, <samp>, <small>, <script><select><span>, <strong>, <sub>, <sup>, <textarea>, <tt>, <var>

 

 

📝display - block 

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
</head>
<style>
.container {
	border : 2px green solid;
}

.footnote{
	color:red;
}

span {
	background-color: powderblue;
	display: block;
	width: 100px;
	height: 60px;
}

</style>
<body>
<div class="container">
	<span>block span</span>과 <span>block span</span>입니다.
</div>
<b class="footnote">* 한 줄을 독점적으로 차지하여 옆에 다른 태그가 배치되지 않는다.</b>
	
</body>
</html>

 

인라인태그를 블록태그취급합니다.밑으로 쌓이고 넓이를 길게 가져가는 특징이 있죠

 

📝display - inline 

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
</head>
<style>
.container{
	background-color: orange;
}

.footnote{
	color:red;
}

div div {
	display : inline;
	
	background-color: powderblue;
}
</style>
<body>
<div class="container">
	<div>inline Div</div>
	<div>inline Div</div>
	<div>inline Div</div>
</div>
<b class="footnote">* inline박스는 라인 안에 다른 요소들과 함께 배치 공간이 좁으면 남은 부분이 다음 라인으로 넘어간다</b>
	
</body>
</html>

 

블록태그를 인라인태그취급합니다 옆으로 쌓이는 특징이 있습니다.

 

📝display - inline-block

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
</head>
<style>
.container{
	background-color: orange;
}

.footnote{
	color:red;
}

div div {
	display : inline-block;
	border : 2px dotted orangered;
	background-color: powderblue;
	margin : 10px;
	width: 60px; height: 80px;
}
</style>
<body>
<div class="container">
	<div>inline-block Div</div>
	<div>inline-block Div</div>
	<div>inline-block Div</div>
</div>
<b class="footnote">* inline-block 박스는 라인 안에 다른 요소들과 함께 배치 동시에 width, height, margin으로 크기 조절도 가능</b>
	
</body>
</html>

 

인라인 속성(오른쪽으로 채워지는)을 가지고 블록 속성(width ,height을 가짐)

반응형