티스토리 뷰

속성의 상속 

 

부모박스에 주었던 속성이 자식에게 상속되는 것. 배경색상, 넓이, 높이, margin, border 등은 상속되지 않으나 글자 색깔, line-height(줄간격) 등은 상속된다.

 

visual studio code 왼쪽 숫자 옆에 접기 버튼 누르면 어느거랑 한 세트로 열고 닫고 됐는지 알 수 있고, 

드래그 하면 같은 태그가 보인다. 

[레이아웃 만들기 숙제_선생님 코드]

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>중첩박스 + float속성 실습</title>
    <!-- css, rel은 연결하려는 파일의 종류를 컴퓨터에게 알려주는 역할,href에 상대경로를 써준다. 현재 폴더에서 css폴더 안에 있는 layout.css를 연결한다. -->
    <link rel="stylesheet" href="./css/layout.css" />
  </head>
  <body>
    <!-- 먼저 컨텐츠를 모두 감싸는 커다란 박스가 필요하다. 그 박스를 중앙에 보내면 된다. 웹사이트에서 섹션 영역을 작업할 때는 컨텐츠 영역에 모두 넣어놓는게 원칙이다. 입찰/채용공고 글씨는 h2를 사용한다. h1은 로고자리이다. 컨텐츠 아래 카드 3개를 감싸는 박스가 필요하다. 코드를 만들 때는 반드시 큰 박스부터 작은 박스 순서대로. 구조를 나누는 연습을 잘해야한다. -->
    <div class="container">
      <h2>입찰/채용공고</h2>
      <!-- 슬래쉬는 엔터틱 코드 찾아서 써주는게 좋다. -->
      <ul class="buttons">
        <!-- 버튼은 버튼이라는 태그가 따로 있지만(버튼의 모양과 기능에 따라 쓸 수 있는게 다름) 나중에 배우기로! 탭메뉴를 배울 때 ul,li쓰기도 한다. 클릭하면 이동하는 경우는 a 태그를 쓴다. -->
        <li class="btn1">전체공고</li>
        <li class="btn2">입찰공고</li>
        <li class="btn3">채용공고</li>
      </ul>
      <div class="card_wrap">
        <!-- 디자인이 모두 똑같다면 class이름 동일하게 두기 -->
        <!-- 작은 제목은 h4로 처리한다. h3은 중간 글자크기, 제목에 따른 내용은 p태그, 날짜는 span태그(inline속성이라 마진 주기 어려움.)날짜는 p태그 써도 된다. 카드 안의 내용 안에 패딩이 들어있고, 보더와 패딩을 모두 고려해야할 경우 box-sizing을 쓴다. -->
        <div class="card margin_none">
          <h4>입찰공고</h4>
          <h3>대전투자금융 채용 대행 용역 입찰공고(본공고)</h3>
          <p>
            지역의 투자생태계 혁신을 주도하는 벤처금융 전문기관
            [대전투자금융]에서 더 나은 벤처투자생태계 조성을...
          </p>
          <span>2024-12-06</span>
        </div>

        <div class="card">
          <h4>입찰공고</h4>
          <h3>대전투자금융 채용 대행 용역 입찰공고(본공고)</h3>
          <p>
            지역의 투자생태계 혁신을 주도하는 벤처금융 전문기관
            [대전투자금융]에서 더 나은 벤처투자생태계 조성을...
          </p>
          <span>2024-12-06</span>
        </div>

        <div class="card">
          <h4>입찰공고</h4>
          <h3>대전투자금융 채용 대행 용역 입찰공고(본공고)</h3>
          <p>
            지역의 투자생태계 혁신을 주도하는 벤처금융 전문기관
            [대전투자금융]에서 더 나은 벤처투자생태계 조성을...
          </p>
          <span>2024-12-06</span>
        </div>
      </div>
    </div>
  </body>
</html>

 

@charset "utf-8";
/* 언어인코딩 형식, 기본구조 없이 바로 작성하면 된다. 코딩이 짧아서 초기화까지 같은 파일에 써보자. css파일을 html에 연결할 때 head에 써주고, link태그 써줘야한다.  */
/* 초기화 코드, 초기화해줘야되는 태그들 ul,li(불릿 지워야하므로), a태그는 컬러랑 밑줄 나오는 거 없애줘야한다. 원래 초기화 안에는 body도 있어야한다. */
* {
  margin: 0;
  padding: 0;
}
ul,
li {
  list-style: none; /* 불릿 없애기 */
}
a {
  text-decoration: none; /* 밑줄 없애기 */
  color: #111;
}
/* 레이아웃, 가장 큰 구조부터 불러와라 */
.container {
  width: 1600px;
  height: auto;
  margin: 0 auto; /* 박스 중앙에 배치 */
}
h2 {
  text-align: center;
  margin-bottom: 50px;
  font-size: 28px;
} /* h2는 블록속성! 글자 자체를 가운데로 그냥 보내는게 나중에 제목이 길어졌을 때를 대비해 컨트롤하기 편하다. */
.buttons {
  width: 616px;
  height: 50px;
  margin: 0 auto;
  background-color: aliceblue;
  margin-bottom: 100px;
  /* margin을 이미 줬기 때문에 아래 쪽에 margin bottom이 있어야한다. margin보다 위에 써주게 되면 초기화된다. 가장 아래 스타일이 우선순위가 되므로 */
}
.buttons li {
  /* 공통속성, 한칸 띄고 쓰면 buttons안에 있는 모든 li를 불러오란 뜻 */
  width: 200px;
  height: 50px;
  border-radius: 25px;
  text-align: center;
  line-height: 50px;
  float: left;
}
.btn1 {
  background-color: rgb(73, 153, 126);
  color: aliceblue;
}
.btn2 {
  background-color: #dedede;
  color: #333;
  margin-left: 8px;
}
.btn3 {
  background-color: #e6e3e3;
  color: #272727;
  margin-left: 8px;
}
/* float된 자식박스들은 부모박스들이 높이가 없다고 판단하여 0이 되므로, 박스들을 정렬하기 전에 ! 부모박스의 너비와 높이를 지정해주는 것이 좋다 */
.card_wrap {
  width: 100%; /*부모의 넓이가 1600이므로 100%를 주면 1600이 된다. 1600px로 주면 틀린 건 아니지만 반응형할 때 힘들다. 자식한테 고정 픽셀을 넣어주게 되면 부모 사이즈 픽셀을 바꿔줬을 때 어렵다. 안에 있는 자식박스가 부모박스의 넓이와 동일해야할 때 100%를 써주는게 좋다. 부모 넓이가 변경될 때마다 알아서 변경될 수 있도록*/
  height: 304px; /* card에 float속성을 줬으므로 부모 박스의 높이를 물리적으로 넣어주어야한다! auto 안된다. */
}
.card {
  /* 520은 글자영역의 너비만이다. */
  width: 520px;
  height: auto;
  padding: 24px;
  border: 1px solid #a51414;
  border-radius: 20px;
  box-sizing: border-box;
  color: #555;
  float: left;
  margin-left: 20px;
}
.card h4 {
  /* 같은 폰트 사이즈여도 폰트가 굵으면 작아보이고, 얇으면 커보인다. */
  font-weight: normal;
  font-size: 14px;
  margin-bottom: 16px;
  /* 블록속성이라 아래쪽에 margin 줄 수 있다. */
}
.card h3 {
  font-size: 28px;
  margin-bottom: 16px;
  color: #111;
}
.card p {
  font-size: 16px;
  margin-bottom: 50px;
}
/* 카드 3개를 복제해서 만들었을 때 아래로 배치되는데 카드 1개당 높이를 먼저 개발자도구f12로 확인해본다. 부모의 높이는 304가 된다.  */
/* class="card margin_none" 클래스 이름은 여러 개 지정해줄 수 있다. 외국에는 다른 이름으로 불릴 수 있는 개념  */
.margin_none {
  margin-left: 0;
}

 

display (표현속성)★

웹문서에서 사용되는 태그는 inline, block, inline-block속성으로 나눠진다.

해당 태그의 고유한 속성을 바꾸고 싶을 때 사용하는 속성으로 굉장히 많이 사용된다.

============================================================================

display속성값

1. none : 화면에서 요소와 요소가 차지하고 있던 공간까지 숨긴다. (브라우저의 크기가 줄어들 때)

2. block : 숨겨져 있던 요소를 다시 나타내거나 inline 또는 inline-block속성을 가진 태그를 block속성으로 바꾼다. 

3. inline :  inline또는 inline-block속성을 가진 태그를 inline속성으로 바꾼다. 

4. inline-block : inline 또는 block속성을 가진 태그를 inline-block속성으로 바꿀 때 사용한다. 

 

예제 실습)

inline을 block으로 바꾸기 

 

block을 inline으로 바꾸기 

 

묶어놓은 글자 부분 꾸밀때, 모션이 들어간 디자인 요소를 만들 때 span태그를 사용한다. span 은 inline속성이라 넓이, 높이, border가질 수 없다. 패딩 적용 불가능. inline속성을 가진 태그에는 패딩, 마진, 보더 쓸 수 없다. 줄이기 때문에 

 

화면에서 요소를 숨기는 방법 

레이아웃 작업을 할 때 요소를 화면에서 숨기고 싶을 때가 있다.

이 때 두가지 방법으로 요소를 숨길 수 있다.

css-display와 visibility  

  • display: none; 차지하고 있던 공간까지 안 보인다.
  • visibility: hidden; 차지하고 있던 공간은 유지되고 컨텐츠만 숨겨진다. (아이콘은 숨기는데 자리는 남겨두어야 할 때 사용)

숨겨진 요소를 다시 나타내고자 한다면 선언한 속성에 따라 반대 속성값으로 나타낼 수 있다.

    • display: block;
    • visibility: visible;

display: flex 자식 박스를 편리하게 정렬하는 flex속성 

  • 어플리케이션 형태의 페이지 또는 반응형 홈페이지에서 많이 쓰인다. 
  • 유동 레이아웃 구현 시 편리하게 사용할 수 있다. 
  • figma의 auto layout과 유사하게 동작한다. 
    더보기

    flex속성은 익스(인터넷 익스플로러)10 이상에서만 지원된다.

    하지만 10버전 이상에도 종종 버그가 발생하므로 익스 환경에서는 float속성(전통방식)을 사용하기를 권장한다.

    익스 11버전에서는 -ms-, -webkit-, -moz- 브라우저 접두사 (=벤더프리픽스) 함께 선언해야 하며 모바일 하위 버전에서는 webkit-flex;를 사용해야 정상적으로 작동된다. 

  • 부모 박스를 '컨테이너(연못)' 안에 있는 여러 개의 자식박스(연잎)들을 단방향으로 정렬할 때 사용하는 속성이다.
  • 가로 또는 세로 방향으로 정렬할 수 있고, 기본 값을 가로 방향이다. 

★ flex속성은 부모에 적용한다.  

부모에 flex가 적용되면 그 안에 자식들은 자동으로 가로로 정렬된다.

자식들을 여러 방법으로 정렬하고 싶다면 하위정렬 속성을 사용하는데, 모두 '부모박스'에 적용해야한다.   

 

기본형

부모박스{

  display : flex;

}

기본 flex의 속성은 자식박스의 총 넓이가 부모컨테이너보다 넓을 경우

자식들에 적용된 width값을 무시하고 무조건 한 줄에 걸쳐 정렬하는 것이 기본값이다.

부모박스에 맞춰 한 줄에 맞춰 무조건 정렬하게 되있다. 자식박스가 아무리 많아도 마찬가지로 한 줄에 정렬된다.  

만약 자식들의 넓이, 높이를 그대로 유지하고 싶거나 또는 자식들 사이에 동일한 간격을 두어 배치하고 싶다면 하위 정렬 속성을 사용한다. 하위 정렬 속성들은 반드시 부모 박스에 display: flex;가 걸려 있어야만 쓸 수 있다. 

 

하위 정렬속성★    

==================================================================================1. justify-content : 가로 정렬 속성(부모박스의 왼쪽, 중앙, 오른쪽과 같이 '가로방향'으로 자식박스들을 일괄 정렬하는 속성 

    속성값 

      •      flex-start : 기본값, 부모박스의 왼쪽부터 정렬된다.
      •      flex-end : 자식박스들을 부모박스의 오른쪽으로 정렬한다. 
      •      center (=margin: 0 auto) : 자식박스들을 부모박스의 가로 중앙에 정렬한다. 
      •      space-between : 부모박스 안의 자식박스를 양끝 정렬하여 사이사이 동일한 여백을 만든다. 
      •      space-around : 자식 요소들 양 옆으로 동일한 간격을 주어 정렬한다. 
      •      space-evenly(고르게) : 자식 요소들을 부모 박스 안에서 좌우 동일한 간격으로 고르게 정렬한다. 

세로 정렬 속성

==================================================================================

1. align-itmes : 세로 정렬 속성(부모박스의 top, middle, bottom위치에 자식박스들을 배치하는 속성 

    속성값 

      •      flex-start : 기본값, 부모박스의 top위치에 정렬된다.
      •      flex-end : 자식박스들을 부모박스의 bottom위치에 정렬한다. 
      •      center (=margin: 0 auto) : 자식박스들을 부모박스의 middle(세로 중앙)에 정렬한다. 
      •      baseline(글자가 시작하는 방향) : 요소들을 컨테이너의 시작 위치에 정렬한다. 
      •      stretch : 요소들을 컨테이너에 맞도록 늘린다. 이때, 자식박스의 정렬방향이 row면 자식박스에 height속성이 없어야한다. 자식박스의 정렬방향이 column이면 자식박스에 width이 없어야한다. 

 

 <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>표현속성</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      div {
        width: 200px;
        height: 200px;
        margin: 20px;
        background-color: blueviolet;
        text-align: center;
        line-height: 200px;
      }
      .box2 {
        display: none; /* 요소 숨기기(공간 유지 X) */
        display: block; /* 숨긴 요소 나타내기, inline써도 되고, inline-block으로 써도된다. 마우스 호버할 때 숨겨져 있던 게 나타나는 걸 구현하고 싶을 때 사용한다. */
      }
      .box1 {
        visibility: hidden; /* 요소 숨기기(공간 유지) */
        visibility: visible; /* 숨긴 요소 나타내기 */
      }
    </style>
  </head>
  <body>
    <div class="box1">box1</div>
    <div class="box2">box2</div>
    <div class="box3">box3</div>
  </body>

 

벤또 디자인을 구현할 때는 grid방식이 더 유용하다. flex로는 어렵다. 각각의 세로 비율이 다 다르고, 가로 비율도 다르다. 

grid는 칸을 만들어서 표처럼 사용한다. 

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>flex</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      /* 부모박스 */
      .container {
        width: 1200px;
        height: 800px;
        background-color: coral;
        margin: 100px auto;
        display: flex;
        /* 가로정렬속성 */
        justify-content: flex-end;
        justify-content: center;
        justify-content: space-between;
        justify-content: space-around;
        justify-content: space-evenly;
        /* 세로정렬속성 */
        align-items: flex-strat;
        align-items: center;
        align-items: flex-end;
        align-items: baseline;
        align-items: stretch; /* height가 없어야한다. */
      } /* flex는 부모박스
    에 적용!!! */
      /* 하위 정렬속성도 부모박스에 적용!!! */
      /* justify-content: flex-start; /* 기본값이라 변화가 없다.  */

      /* 자식박스 */
      .container div {
        width: 100px;
        /* height:100px; */
        /* stretch를 적용하려면 height속성이 선언되지 않아야함 */
        text-align: center;
        line-height: 100px;
      }
      .box1 {
        background-color: aquamarine;
      }
      .box2 {
        background-color: rgb(81, 172, 101);
      }
      .box3 {
        background-color: darkmagenta;
      }
      .box4 {
        background-color: darkkhaki;
      }
      .box5 {
        background-color: chartreuse;
      }
      .box6 {
        background-color: blueviolet;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div class="box1">box1</div>
      <div class="box2">box2</div>
      <div class="box3">box3</div>
      <div class="box4">box4</div>
      <div class="box5">box5</div>
      <div class="box6">box6</div>
    </div>
  </body>