본문 바로가기

WEB/CSS

CSS3 - float, flex

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>CSS float 관련 속성</title>
    <link rel="stylesheet" href="../css/normalize.css">
    <style>
        #menu {list-style:none; padding:0 }
        /*ul의 li 요소에 float 지정 - 배치방향이 가로 */
        /* left: 왼쪽부터 가로정렬 */
        /* right: 오른쪽부터 가로정렬 (역순) */
        #menu li {float:left; margin: 15px 25px }

        /* 특정 요소에 float 속성이 부여되면 뒤에 따라오는 요소에도 float 속성이 부여됨 */
        /*후속 요소에 부여된 float 속성을 제거하려면 clear 속성을 사용하면 됨*/
        /*left/right: left/right float속성만 제거*/
        /*both: 모든 float 속성 제거*/
        hr {clear:both}

        .box {height: 50px; padding: 10px; font-size:30px;
            color:white; font-weight: bold; margin: 30px 0 }
        .d1 {background: red; width: 300px; float:left}
        .d2 {background: orange; width:500px; float:right}

        img {float:left; margin: 10px;}
        .imgdiv {width: 500px; float: left}


        .container {width: 75%; padding:15px;
            border: 1px dashed black; margin:0 auto}
        header {height:120px; background: orange}
        aside {width: 15%; height: 500px;
            background: limegreen; float:left;}
        section {width:83%; height:500px;
            background: skyblue; float:right }
        footer {height:120px; background: gold; clear: both}



    </style>


</head>
<body>
    <h1>CSS float 관련 속성</h1>
    <h2>개요</h2>
    <p>html요소의 배치는 일반적으로 위에서 아래로 배치됨 </p>
    <p>하지만, 이러한 배치방식을 바꾸어 다른 요소들과 잘 어울리게
        좌우로 배치하고 싶다면 float 속성을 사용</p>
    <p>웹페이지 레이아웃 구성에 자주 사용</p>

    <ul id="menu">
        <li>contact</li>
        <li>store</li>
        <li>support</li>
        <li>cart</li>
    </ul>


    <hr>
    <div class="box d1">&sharp;1</div>
    <div class="box d2">&sharp;2</div>

    <hr>
    <p>float의 원래 용도는 텍스트와 이미지를 함께 배치할 때
        이미지 주위를 텍스트로 감싸기 위한 것이었음 </p>
    <img src="../img/plane.png" width="150px">
    <div class="imgdiv">dsasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasa
    dsasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasa
    dsasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasa
    dsasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasa
    dsasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasa
    dsasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasa
        dsasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasa
        dsasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasa
    dsasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasa
    dsasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasa
    dsasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasa
    dsasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasa</div>





    <hr>
    <p>float 속성으로 레이아웃 구성하기</p>

    <div class="container">
        <header>header</header>
        <div id="main">
        <aside>aside</aside>
        <section>section</section>
        </div>
    <footer>footer</footer>
    </div>








</body>
</html>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>CSS flex 관련 속성</title>
    <link rel="stylesheet" href="../css/normalize.css">
    <style>
        .container {border:1px dashed black;
            display: flex}
        /* flex :item들 수평으로 배치, item의 크기는 내용의 width만큼 차지 */
        .item { background: gold;
            padding:30px; margin: 10px; text-align: center;
            color:crimson; font-size: 30px}

        .fd {
            flex-direction: row; /*item을 행(가로)로 배치*/
            flex-direction: column; /* item을 열(세로)로 배치*/
            flex-direction: row-reverse; /*item을 행으로 역순 배치 */
            flex-direction: column-reverse; /*item을 열으로 역순 배치 */
        }

        .jc {justify-content: flex-start; /*item을 시작위치(왼/위)에 배치*/
            justify-content: flex-end; /*item을 끝위치(아래/오른)로 배치*/
            justify-content: center; /*item을 중앙에 배치*/
            justify-content: space-between; /*item을 사이에만 일정한 간격으로 배치*/
            justify-content: space-around; /*item을 앞뒤에 적절한 공간 배치*/
            justify-content: space-evenly; /*item을 앞뒤에 똑같은 간격 공간 배치*/
              }


        .ai div:first-child{padding: 0;}
        .ai div:nth-child(2) {padding: 0;}
        .ai div:nth-child(3) {padding: 10px;}
        .ai div:nth-child(4) {padding: 0;}
        .ai div:last-child {padding: 0;}



        .ai {
            height:300px;
            align-items: flex-start; /*item을 기본위치(왼/위)에 배치*/
            align-items: flex-end;  /*item을 끝위치(아래)에 배치*/
            align-items: center;  /*item을 중앙위치에 배치*/
            align-items: baseline;  /*item을 텍스트 베이스라인 위치에 배치*/

        }


        .fg1 {flex-grow:1;}
        .fg2 {flex-grow:2;}
        .fg3 {flex-grow:8;}








    </style>


</head>
<body>
    <h1>CSS flex 관련 속성</h1>
    <h2>개요</h2>
    <p>레이아웃 배치 전용 CSS속성으로 고안됨</p>
    <p>따라서, float이나 inline-block보다 편리하고 강력한 기능이 많음 </p>
    <p>caniuse.com에서 flex지원 브라우저 확인</p>
    <p>flexboxfroggy.com/#ko에서 flex관련 속성 실습해볼 수 있음</p>

    <h2>기본구조</h2>
    <img src="../img/flex01.png" width="50%">
    <p>flexbox는 복수의 하위요소인 flex item과
        그 상위요소인 flex container로 구성</p>

    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
    </div>

    <h2>flexbox 속성</h2>
    <img src="../img/flex02.png" width="50%">
    <p>flexbox 속성은 container에 정의하는 속성과 item에 정의하는 속성으로 나눠짐</p>
    <p>flex-direction 속성은 item들이 배치되는 축의 방향을 결정</p>

    <div class="container fd">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
    </div>


    <p>justyfy-content 속성으로 item들을
        메인축방향으로 적절히 정렬할 수 있음</p>

    <div class="container jc">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
    </div>


    <p>align-items 속성으로
        item들을 수직축 방향을 적절히 </p>

    <div class="container ai">
        <div class="item">a</div>
        <div class="item">b</div>
        <div class="item">g</div>
        <div class="item">1</div>
        <div class="item">B</div>
    </div>


    <p>flex-grow 속성으로 각 item의 끝 여백을 적절한 크기로 확장할 수 있음</p>
    <p>즉, flex-basis 속성을 이용해서 item의 너비를 설정하고,
        flex-grow로 flex-basis로 설정한
        item의 너비보다 더 커질 수 있도록 결정 </p>
    <div class="container">
        <div class="item fg1">1</div>
        <div class="item fg1">2</div>
        <div class="item fg1">3</div>
    </div>

     <div class="container">
        <div class="item fg2">1</div>
        <div class="item fg3">2</div>
        <div class="item fg2">3</div>
    </div>


























</body>
</html>

'WEB > CSS' 카테고리의 다른 글

CSS3 - 프로젝트용 css  (0) 2022.06.08
CSS3 - project (웹)  (0) 2022.06.08
CSS3 - background, table  (0) 2022.06.08
CSS3 - list, position  (0) 2022.06.08
CSS3 - text, display  (0) 2022.06.08