ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 0725. CSS
    CSS 2023. 7. 25. 18:18

    CSS

    Cascading Style Sheet

     

    웹 요소에 둘 이상의 스타일을 적용 시 우선순위에 따라 결정

    스타일이 상속 : 부모태그, 자식태그

     

    선택자 범위     속성명        속성값 

     body    {      background      red        ;

     

     

    외부 스타일 시트

    한 폴더 내에 css 파일 생성 후(폴더명/파일명.css)

    head 안에 <link> 걸어서 입력

     

      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>네이버 첫 페이지</title>
        <link rel="stylesheet" href="css/1.new.css" />
      </head>

     

    내부 스타일 시트

    1. <head> - <style>

    html 문서이지만 style 태그 안에는 css 문법으로 작동한다.

    * 전체 파일에 같은 스타일을 적용하되, 특정 페이지에서만 다른 스타일 적용할 때 사용

    <title>네이버 첫 페이지</title>
        <style>
          body {
            background-color: pink;
          }
        </style>
      </head>

    2. inline style

    <style>
          body {
            background-color: pink;
          }
        </style>
      </head>
      <body>
        <a href="mail.html" style="background: skyblue">네이버 메일로</a><br />
        <a href="cafe.html">네이버 카페로</a><br />
        <a href="news.html">네이버 뉴스로</a><br />
      </body>

     

    2. inline style 출력값

     

    • 우선순위

    가장 구체적으로 지정된 것

    동일한 수준일 경우 나중에(최신) 지정된 것

    1.태그에 바로 지정된 것(inline)

    2.해당 페이지에 지정된 것(head 안에 style 태그)

    3.외부 스타일 시트(css파일)

    4.브라우저 default 스타일 (아무 것도 안 했을 때 기본 스타일)

    !important 지정 시 그게 가장 우선적으로 적용된다.

     

    --> 라이브러리는 윗단에, 내가 쓸 건 아랫단에 정의하면 좋다.


    선택자

     

    🖤1. 기본선택자

     1) 태그명 =>  { background } : 태그선택자

     2) 클래스 => .class { background }

     3) id =? #name { background }

     

     

    2. 전체선택자

      *   {속성 : 값;...}

    전체적으로 적용할 값

    태그들의 디폴트 스타일 지정 시 사용(구체성은 가장 낮음)

    ex:기본 폰트 설정

     

    3. id선택자

    특정 id에 대한 한 값을 설정하고 싶을 때

     

    내부스타일 시트에서 <style>

    안에 id에 대한 선택자를 줄 때는 #id명

    #container {
            width: 500px;
          }
        </style>
      </head>
      <body>
        <div id="container">
          <h1 class="accent bg">레드향</h1>

     

    🖤4. 가상선택자

      :   상태를 선택하는 것 

    <style>
        a {
          text-decoration: none;
        }
        a:hover {
          text-decoration: underline;
          background-color: paleturquoise;
        }
      </style>
      <body>
        <h1>ㅎㅇ요</h1>
        <a href="#">네이버</a>
      </body>

    a href 로 링크를 하나 만들어 둔 후,

     

    a에 대한 스타일 적용

     

    hover : 커서를 가져다대면 나타나는 스타일

    ※ h1:hover 이렇게 쓸 경우 콜론(:) 다음에 띄어쓰면 인식 x 

    위와 같이 붙여써야 한다.

    h1 :hover는 h1의 후손인 그 아래 범주로 넘어가버림

     

    안 보이지만 커서가 올라간 상태다.

    +) ㅎㅇ요에 커서 닿으면 손가락 만들기

     h1:hover {
          cursor: pointer;
        }

     

    하버 적용 예시

    <style>
        a {
          text-decoration: none;
        }
        a:hover {
          text-decoration: underline;
          background-color: paleturquoise;
        }
        h1:hover {
          cursor: pointer;
        }
        tr:hover {
          background-color: #bbb;
          cursor: pointer;
        }
      </style>

    :checked => checkbox, radio에서 표시된 상태

    :focus => 누르면 테두리가 진해지는 게 기본값

    : enabled => 입력 가능한 칸

    :disabled => 입력할 수 없도록 막음

     

        <title>Document</title>
        <style>
          /* input만 쓰면 input선택자. disabled까지 써 줘야 함 */
          input:disabled {
            background-color: gray;
          }
          input:focus {
            background-color: violet;
          }
          button:hover {
            color: orange; /*글자색*/
            background-color: mediumaquamarine;
            font-weight: bold; /*폰트 굵기*/
          }
        </style>

     


    5. 속성 선택자

      [  ]  

     

    form 요소와 주로 쓴다.

     

                     속성명       속성값

    input    [    type      =     text    ]  { 

     

    input[type="text"] {
            background-color: yellowgreen;
            color: wheat;
            font-size: 30px;

     

    더보기

    선택자[속성=값] : 특정 값과 일치하는 태그

    선택자[속성 ^= 값] : 특정 값으로 시작하는 태그

    선택자[속성 $= 값] : 특정 값으로 끝나는 태그

    선택자[속성 *=값] : 특정 값을 포함하는 태그

     

     

     

    🖤6. 구조 선택자

     

    자손 / 후손(자손을 포함한 이하 모두)

      >  

     

    p>a :자손

    p  a :후손

     

     

    id선택자의 자손 > 선택자

    #d1 > p {  /* id가 d1바로 아래 p태그만 스타일 적용*/

     

     

    #d2    p    { /* id가 d1 아래 아무 p태그나 스타일 적용*/  

    => 공백 때문에 후손이 됨

     

    ⭐DOM Tree

    Document Object Model Tree

    html문서의 대상을 Tree구조로 인식하는 법(거꾸로 된 나무)

     

       .menu .item>a   

    menu 클래스의 후손 item클래스의 자손 a

     

     

     <style>
          a {
            text-decoration: none;
          }
          ul > li:hover {
            background-color: black;
          }
          ul > li:hover > a {
            color: white;
          }
        </style>
      </head>
      <body>
        <ul>
          <!--.menu-->
          <li>
            <!--.item-->
            <a href="#">회원가입</a>
            <!--a-->
          </li>
          <li>
            <a href="#">제품정보</a>
          </li>
          <li>
            <a href="#">게시판</a>
          </li>
          <li>
            <a href="#">장바구니</a>
          </li>
        </ul>

    ul의 자손 중 li가 hover 된 것만 검정색으로 바뀌고 글자는 흰색으로 바뀜

    a 태그가 더 자세하므로 a href에 대한 기본값인 글자색 파란색을 변경하려면 위와 같이 > a 로 또 지정해야 함

     

    용도를 구분하려면 class로 구분 (menu)

          ul.menu > li:hover {
            background-color: black;
          }
          ul.menu > li:hover > a {
            color: white;
          }
        </style>
      </head>
      <body>
        <ul class="menu">
          <!--.menu-->
          <li>
            <!--.item-->
            <a href="#">회원가입</a>
            <!--a-->
          </li>
          <li>
            <a href="#">제품정보</a>

     

    자손 후손은 menu를 쓸 때 이렇게도 구분할 수 있다.

     


    .class

     

    클래스는 공백으로 구분한다.

          <h1 class="accent bg">레드향</h1>

    accent, bg 각각 두 개의 클래스

     

        <style>
          p {
            font-style: italic;
          }
          .accent {
            border: 1px solid #000;
            /* 테두리 */
            padding: 5px;
            /* 테두리와 내용 사이의 여백 */
          }
          .bg {
            background-color: #ddd; /* 배경색 */
          }
        </style>
      </head>
      <body>
        <div>
          <h1 class="accent bg">레드향</h1>
          <p>
            껍질에 붉은 빛이 돌아 <span class="accent">레드향</span>이라 불린다.
          </p>

    이 코드를 적용 시 아래와 같이 나타난다.

    네모된 레드향 부분이 accent

     

    <h1 class ="accent">

     


    <div> <span>

     

     

    기본적으로 width 설정 시 padding 범위까지이다.

     

     

     

     

    margin

     

     

    10px (상하좌우)

    10px 20px (상하, 좌우)

    10px 20px 10px 5px (12시부터 시계방향 - padding에서 적용)

     

     

    width: 500px; /* 너비 */
    margin: 10px auto; /* 10px의 바깥 여백에 자동 가운데 정렬 */
    padding: 10px; /* 테두리와 내용 */
    border: 1px solid #000; /* 테두리 바깥 */

     


    • 단위

    %

    px 해상도에 따라 조절이 안 됨(pc-폰)

    em (현재 크기 기준)

    rem (route를 기준으로 몇 배수인지 / ex - *전체선택자로 폰트 설정 시 그에 맞춤)

     

        <style>
          /*숫자는 1부터 시작하며 2n, 2n+1과 같은 수식도 가능하다.*/
          p:nth-child(1) {
          }
          p:nth-child(2) {
            font-size: 100%;
          }
          p:nth-child(3) {
            font-size: 1.5em;
          }
          p:nth-child(4) {
            font-size: 200%;
          }
        </style>
      </head>
      <body>
        <p>첫 번째 줄</p>
        <p>두 번째 줄</p>
        <p>세 번째 줄</p>
        <p>네 번째 줄</p>
      </body>

     

     

    지브라 효과

    http://127.0.0.1:5500/7.ahover.html

    http://127.0.0.1:5500/7.ahover.html

     

        tr:nth-child(2n) {
          background-color: darkolivegreen;
        }
      </style>

     


    Display

     

    inline은 여백값 적용이 되지 않는다.

     

     

     

         span {
            width: 100px;
            height: 50px;
            padding: 10px;
            margin: 100px;
            background-color: yellow;
          }
        </style>
      </head>
      <body>
        <div class="box">
          이것은 div내용 <span>스팸아니고 스팬</span>입니다.
          후련함..후련함..후련함..후련함..ㅇ라ㅓㄴ아런이렁ㄴ런아러아리ㅓㄴ이런알
        </div>
        <div>
          후련함..후련함..후련함..후련함..ㅇ라ㅓㄴ아런이렁ㄴ런아러아리ㅓㄴ이런알
        </div>
      </body>

    노란칸이 이상하다.

     

     

    display : inline-block 삽입

    ->

          }
          span {
            display: inline-block;
            width: 100px;
            height: 50px;
            padding: 10px;
            margin: 100px;
            background-color: yellow;
          }

     

    이러면 된다.

     


    list 블릿 제거하고 inline 정렬을 특정 메뉴에만 적용하기

    ul.menu li {
            list-style-type: none; <<< 블릿 제거 이거임
            display: inline;
          }
        </style>

     

    간격 구분

    ul.menu li {
            list-style-type: none;
            display: inline;
            margin: 10px 20px;
            padding: 5px 10px 5px 10px;

    주황 : margin

    연두 : padding

     

     

    가운데 정렬하기

     

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <style>
          .box {
            width: 100px;
            height: 100px;
            background-color: yellow;
            margin: 20px;
            float: right;
    
            display: flex;
            justify-content: center;
            align-items: center;
          }
          /* span {
            width: 20px;
            height: 20px;
            margin: 20px auto;
          } */
        </style>
      </head>
      <body>
        <div class="box"><span>박스1</span></div>
        <div class="box"><span>박스2</span></div>
        <div class="box"><span>박스3</span></div>
      </body>
    </html>

     

    ❤️정렬

    더보기

    display : flex;

    justify-content : center; (수직)

    align-item : center; (수평)

     

    float

    딱 붙이기

    위에서 쓰인 코드가 각 방향에서 붙이는 첫 번째 순서이다.

     

     

    <style>
          .box {
            width: 100px;
            height: 100px;
            background-color: yellow;
            margin: 20px;
            float: right;
          }
     </head>
      <body>
        <div class="box">박스1</div>
        <div class="box">박스2</div>
        <div class="box">박스3</div>
      </body>

     


    position

     

     

    static : 기본값

    relative : 상대 위치

    absolute : 상대적 절대(부모태그인 relative 기준) 위치 => 단독이 아닌 자식태그로 쓰임

    fixed : 화면이 기준(브라우저의 좌측 상단)

     


    relative

    기본값으로 static이 적용되어 있어서 style에서 id 지정된 클래스의 position을 relative로 바꿔줘야 한다.

          #box2 {
            position: relative;
            left: 100px;
            top: 50px;
          }
        </style>
      </head>
      <body>
        <div class="box">박스1</div>
        <div class="box" id="box2">박스2</div>
        <div class="box">박스3</div>
      </body>

    fixed

     

          #box3 {
            position: fixed;
            right: 0px;
            bottom: 0px;
          }

     

    `


    repeat : 계속 반복해서 나올 거냐?

     

     

     

     

    페이지를 만들어보자

     

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <style>
          body {
            background-color: yellow; /* 배경색 */
            color: blue; /* 글자색 */
          }
          h1 {
            text-decoration: none;
            color: blueviolet;
            background: burlywood;
            font-weight: bold;
            font-family: 궁서;
          }
        </style>
      </head>
      <body>
        <form action="check"></form>
        <h3>로그인 화면</h3>
        <table border="1">
          <tr align="center">
            <td>아이디</td>
            <td><input type="text" name="id" /></td>
          </tr>
          <tr>
            <td>비밀번호</td>
            <td><input type="password" name="pw" /></td>
          </tr>
          <tr>
            <td colspan="2" align="center" style="background-color: lime">
              <input
                type="submit"
                style="background-color: red; color: green"
                value="서버로 전송"
              />
            </td>
          </tr>
        </table>
      </body>
    </html>

    엄청난 디자인

     


    css framework Bootstrap

     

    사용하기

     

    1. CDN 설치

     

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <!-- Latest compiled and minified CSS -->
        <link
          rel="stylesheet"
        />

        <!-- jQuery library -->

        <!-- Popper JS -->

        <!-- Latest compiled JavaScript -->
      </head>
      <body></body>
    </html>

     


    2. 폰트

     

     

     

    </> 으로 복사

    동일하게 복붙


    기본 클래스

     

    1. container 클래스

    중앙 영역을 잡을 때 씀

    * container 는 bootstrap에서 정한 것이므로 정확히 입력해야 한다.

     

    반응형 웹사이트

     

    2. Grid System

     Grid System

    12개를 쓰는 이유는 약수가 많아서 쓸 수 있는 배열이 많다.(1,2,3,4,6,12)

    최근 프레임은 24개의 열로도 사용한다.

    sm 등은 사이즈를 뜻함 small, medium, large, extra..

    > 해상도 상관없이 3개의 col 불러오겠다.

     

    <div class="row">
          <div class="col-sm-3">col 1</div>
          <div class="col-sm-3">col 2</div>
          <div class="col-sm-3">col 3</div>
          <div class="col-sm-3">col 4</div>

    sm보다 작으면 3개씩 묶어서 4개의 열로 12개의 행을 각각 묶어라

     

    <div class="col-sm-3 col-md-2">col 1</div>

    한 행에 크기가 middle이 될 때까지 2개씩 묶어라

    화면이 middle보다 작아지면 위의 sm-3인 3개씩 묶임

     

    이렇게 된다.

     

    더보기

    응용

        <div class="row">
          <div class="col-sm-6 col-md-4 col-lg-3">col 1</div>
          <div class="col-sm-6 col-md-4 col-lg-3">col 2</div>
          <div class="col-sm-6 col-md-4 col-lg-3">col 3</div>
          <div class="col-sm-6 col-md-4 col-lg-3">col 4</div>

     

          <div class="col-sm-6 col-md-4 col-lg-3">col 5</div>
          <div class="col-sm-6 col-md-4 col-lg-3">col 6</div>
          <div class="col-sm-6 col-md-4 col-lg-3">col 7</div>
          <div class="col-sm-6 col-md-4 col-lg-3">col 8</div>
        </div>

     

     

     

    비균등 컬럼

    합이 12이하이면 되고, 12가 되지 않으면 남은 수는 빈 공간이 된다.

    12가 넘어서면 다음 줄에 표기된다.(ex: 2/6/3/2)

    <div class="row">
          <div class="col-sm-4">사이드 메뉴</div>
          <div class="col-sm-8">본문</div>
        </div>

     

     

     

    Grid 속 Grid

     

      <body>
        <div class="container">
          <div>메뉴 영역</div>
          <div class="row">
            <div class="col-sm-4">사이드 메뉴</div>
            <div class="col-sm-8">
              <div class="row"> <!--여기도 row로 해 줘야함-->
                <div class="col-sm-6 col-md-4 col-lg-3">col 1</div>
                <div class="col-sm-6 col-md-4 col-lg-3">col 2</div>
                <div class="col-sm-6 col-md-4 col-lg-3">col 3</div>
                <div class="col-sm-6 col-md-4 col-lg-3">col 4</div>
    
                <div class="col-sm-6 col-md-4 col-lg-3">col 5</div>
                <div class="col-sm-6 col-md-4 col-lg-3">col 6</div>
                <div class="col-sm-6 col-md-4 col-lg-3">col 7</div>
                <div class="col-sm-6 col-md-4 col-lg-3">col 8</div>
              </div>
            </div>
          </div>
          <div>footer영역(copyright)</div>
        </div>
      </body>

     


    Font

     

    기본값⬇️

    더보기

    기본값 텍스트 클래스

     

    font-size : 16px

    line-height:1.5

     

    text-center

    text-*-center (ex:text-sm-center)

    text-right

     

    .list-inline -> 줄글이 박음질처럼 가로로 됨

     

    .text-primary : 파랑

    .text-danger : 빨강

     

    • background-color

    .bg-success 

     

    • Border

     

     

    전체 선택자로 하고 쓸 만한 요소들

    그외는 Bootstrap 강의자료 11p~ 참고

     

    더보기

     m-숫자 (3이 기본, 1~5)

      ml-2 :margin left 2만큼 줘라

      mx-2 : 좌우 x축으로 2만큼씩 줘라

      mt :top, mb:bottom, my:y축

      mx-auto

     

    margin 은 background 처럼 단축속성이다.
    때문에 margin : top&bottom, left & right 처럼 두 개의 value로 표현할 수 있다.

    auto 값은 브라우저가 남은너비 의 공간을 계산하여 좌우 균등하게 배분해 준다.
    left & right의 value를 auto로 설정했다면,
    element는 지정된 width 만큼 공간을 차지하며, 남은 공간은 균등하게 나뉘어 좌,우 margin이 갖게 된다.
    - 참조: www.w3schools.com/css/css_margin.asp

    그래서 auto를 적용하기 이전에 요소의 width가 정의 되어 있어야 한다.

     

    .table

    thead 말고 tbody만 적용!!

      <body>
        <table class="table"> <!--table은 width가 100%로 부모태그를 다 채움, 수평선만 그어줌-->
          <thead>
            <tr>
              <th>Firstname</th>
              <th>Lastname</th>
              <th>Email</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>John</td>
              <td>Doe</td>
              <td>john@example.com</td>
            </tr>
            <tr>
              <td>Mary</td>
              <td>Moe</td>
              <td>mary@example.com</td>
            </tr>
            <tr>
              <td>July</td>
              <td>Dooley</td>
              <td>july@example.com</td>
            </tr>
          </tbody>
        </table>
      </body>

    table

    bootstrap에서 클래스로 묶은 table 지브라 효과

        <table class="table table-striped">

    *class 뒤에 table 한 개는 무조건 있어야 한다. (혼용해서 쓰면 안 됨)

    +)

    <table class="table table-striped table-bordered">

    이렇게 띄어쓰기 후 나열을 쭉 하면 스타일이 적용된다.

    수직선도 나옴.

     

    더보기
        <table class="table table-hover">

     

    연락처 목록, 아이콘 삽입

    text-primary

    <style>
          .footer {
            background-color: azure;
          }
        </style>
      </head>
      <body>
        <div class="container">
          <div>메뉴 영역</div>
          <div class="row">
            <div class="col-sm-4">사이드 메뉴</div>
            <div class="col-sm-8">
              <h1 class="my-3 text-primary">
                <i class="fa-regular fa-address-book"></i>연락처 목록
              </h1>
              <!--my-3은 margin 3만큼 y축 위아래로 여백 준 것
              text-primary는 중요한 부분이란 뜻으로 같이 딸려 있는 아이콘도 색상이 파란색으로 변한다.-->
              <table class="table table-hover">
                <!--table은 width가 100%로 부모태그를 다 채움, 수평선만 그어줌-->
                <thead>
                  <tr>
                    <th>Firstname</th>
                    <th>Lastname</th>
                    <th>Email</th>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <td>John</td>
                    <td>Doe</td>
                    <td>john@example.com</td>
                  </tr>
                  <tr>
                    <td>Mary</td>
                    <td>Moe</td>
                    <td>mary@example.com</td>
                  </tr>
                  <tr>
                    <td>July</td>
                    <td>Dooley</td>
                    <td>july@example.com</td>
                  </tr>
                  <tr>
                    <td>John</td>
                    <td>Doe</td>
                    <td>john@example.com</td>
                  </tr>
                  <tr>
                    <td>Mary</td>
                    <td>Moe</td>
                    <td>mary@example.com</td>
                  </tr>
                  <tr>
                    <td>July</td>
                    <td>Dooley</td>
                    <td>july@example.com</td>
                  </tr>
                </tbody>
              </table>
            </div>
            <div class="text-center p-4 footer">
              <i class="fa-regular fa-copyright"></i>java-backend. created ny 2023.7
            </div>
          </div>
        </div>
      </body>
    </html>

     

    글자 가운데 정렬을 놓침;

    'CSS' 카테고리의 다른 글

    0726. CSS(2)  (0) 2023.07.26
Designed by Tistory.