1.  연결 선택자

1) 자손 선택자와 후손 선택자

 

🥑  자손 선택자 = 자식 선택자 child selector
      - 부모 선택자 바로 아래 계층에 있는 선택자

      - 자손 선택자 표기는 '>'로 표시
      - 형태 : 선택자A > 선택자B  - 선택자 A의 자손에 위치하는 B를 선택

🥑  후손 선택자 = 하위 선택자  descendant selector
      - 부모 선택자 안에 들어있는 모든 자식 선택자( 손자 요소까지 고려함 )

      - 후손 선택자의 표기는 공백으로 표현
      - 형태 : 선택자A  선택자B - 선택자 A의 후손에 위치하는 B를 선택

<head>
    <style>
        div > h1 { /* 자손 선택자 */
            background-color: blue;
        }

        div h1 { /* 후손 선택자 */
            background-color: blue;
        }

        div span { /* 후손 개념의 div 아래에 있는 모든 span */
            background-color: yellow;
        }

        div > span { /* 자손 개념의 div 바로 아래에 있는 span */
            border: 4px solid blue;
        }

        .point span {
            color: red;
        }

    </style>
</head>
<body>
    <div>
        <h1>제목1</h1>
        <h2>제목2</h2>
        <div>
            <ul>
                <li>menu1</li>
                <li>menu2</li>
                <li><span>menu3</span></li>
            </ul>
        </div>
        <h2>제목2</h2>
        <span>span</span>
        <ul class="point">
            <li>menu4</li>
            <li>menu5</li>
            <li><span>menu6</span></li>
        </ul>
    </div>
</body>

출력 결과

 


 

 

💡 table 태그와 자손 선택자 주의 사항
      ▶️ 웹 브라우저가 자동으로 tbody 태그를 추가
      ▶️ table > tbody > tr > th 처럼 'tbody'를 입력해야 속성 적용이 된다

 

<head>
    <style>
        /* table 태그 아래의 tr 태그 아래 th 태그의 color 속성에 red 키워드를 적용 */
        table > tr > th {
            color: red;
        }

        table > tbody > tr > th {
            color: red;
        }
    </style>
</head>
<body>
    <table border="1">
        <tr>
            <th>Name</th>
            <th>Region</th>
        </tr>
        <tr>
            <td>홍길동</td>
            <td>대구광역시 중구</td>
        </tr>
    </table>
</body>

출력 결과


2) 동위 선택자

 

🥑  동위 관계자에서 뒤에 위치한 태그를 선택할 때 사용하는 선택자

[인접 형제 선택자 adjacent selector]
형태 : 선택자A + 선택자B
  -  선택자A 바로 뒤에 위치하는 선택자 B를 선택

[형제 선택자 sibling selector]

형태 : 선택자A ~ 선택자B  -  선택자A 뒤에 위치하는 선택자 B를 선택

 

<head>
    <style>
        h1 + h2 {
            /* h1 바로 뒤에 있는 h2 태그에 글자 색상 지정 */
            color: red;
        }

        h1 ~ h2 {
            /* h1 뒤에 있는 모든 h2 태그에 글자 색상 지정 */
            background-color: orange;
        }
    </style>
</head>
<body>
    <h1>제목1</h1>
    <h2>제목2</h2>
    <h2>제목2</h2>
    <h2>제목2</h2>
    <h2>제목2</h2>
    <h2>제목2</h2>
</body>

 

출력 결과

 


 

2.  속성 선택자

 

📌   특정 속성을 가진 html 태그를 선택
📌   선택자 뒤에 대괄호([])를 사용하여 속성과 값을 입력

 

종류 선택 요소 예시
[속성] 해당 속성이 있는 요소 [required]
[속성=값] 지정한 속성값이 있는 요소 [target = _blank]
[속성~=값] 지정한 속성값이 포함된 요소 (단어별) [class ~= button]
[속성|=값] 지정한 속성값이 포함된 요소 (하이픈 포함, 단어별) [title |= us]
[속성^=값] 지정한 속성값으로 시작하는 요소 [title ^= eng]
[속성$=값] 지정한 속성값으로 끝나는 요소 [href $= xls]
[속성*=값] 지정한 속성값의 일부가 일치하는 요소 [href *= w3]

 


1) 특정 속성값이 있는 요소를 선택하는 경우

형태 : 선택자[속성=속성값] - 속성 안의 값이 특정값과 조건에 만족하는 문서 객체를 선택

 

<head>
    <style>
        input[type=text] {
            /* input 태그 중에서 type 속성값을 password로 가지는 태그의 배경 색상을 지정 */
            background-color: blue;
        }

        /* 자바스크립트의 쿼리셀렉터에서 폼 태그를 선택할때 주로 name 속성을 사용 */
        input[name=id] {
            color: #fff;
        }

        input[type=text], input[type=password] {
            background: none;
            border: none;
            border-bottom: 1px solid #666666;
            padding: 6px;
            margin: 0 2px;
            font-size: 16px;
        }

    </style>
</head>
<body>
    <form>
        <input type="text" name="id" />
        <input type="password" name="passwd" />
    </form>

</body>

출력 결과

 


3. 가상 클래스와 가상 요소

 

1) 반응 선택자

 

🥑  사용자의 반응으로 생성되는 특정한 상태를 선택하는 선택자
  

:active   - 사용자가 마우스로 클릭한 태그 설정
:hover    - 사용자의 마우스 포인터가 위치한 태그 설정
:link        - 방문하지 않은 링크에 스타일을 적용
:visited  - 방문했던 링크에 스타일을 적용

 

<head>
    <style>
        h1:hover {
            /* h1 태그에 마우스를 올렸을 때 글자 색상을 변경 */
            color: red;
            cursor: pointer;
        }
        h2:active {
            /* h2 태그에서 마우스로 클릭했을 때 글자 색상을 변경하고 배경 색상을 나타냄 */
            color: blue;
            background-color: orange;
        }
    </style>
</head>
<body>
    <h1>제목1</h1>
    <h2>제목2</h2>
    <h2>제목2</h2>
    <h2>제목2</h2>
</body>

 

:hover
:active


 

<head>
    <style>
        a {
            text-decoration: none;
        }
        a:visited {
            color: red;
        }
        /* href 속성을 가지고 있는 a 태그 뒤의 공간에 "- (href 속성)"을 추가. */
        a:link::after {
            content: ' - ' attr(href);
        }
    </style>
</head>
<body>
    <h1><a>Nothing</a></h1>
    <h1><a href="http://www.w3.org/">W3C</a></h1>
    <h1><a href="https://github.com/">Github</a></h1>
</body>

 

 


 

2)  상태 선택자

 

🥑  입력 양식(form 태그)의 상태를 선택할 때 사용하는 선택자

 :checked   - 체크상태의 input 태그에 선택
 :focus         - 초점이 맞춰진 input 태그를 선택
 :enabled    - 사용 가능한 input 선택
 :disabled   - 사용 불가능한 input 선택
 :not              - 스타일을 적용하려고 하는 필드를 나열하는 것보다 적용하지 않는 필드가 더 적을 때 사용
 :anchor      - 앵커의 목적지가 되는 부분의 스타일을 쉽게 적용할 수 있다

                               

      💫  '앵커'는 페이지가 긴 웹 문서에서 특정 요소를 클릭하면 그 위치로 한번에 이동하도록 도와주는 기능

 

<head>
    <style>
        input:enabled { /* 입력을 할 수 있는 상태의 input 태그의 배경 색상과 글자 색상 지정 */
            background: blue;
            color: white;
        }

        input:disabled { /* 입력을 할 수 없는 상태의 input 태그의 배경 색상 지정 */
            background: black;
        }

        input:focus { /* input 태그의 입력을 위한 초점이 맞추어진 상태에서의 배경 색상 지정 */
            background: orange;
        }

    </style>
</head>
<body>
    <form>
        <!-- 입력을 할 수 있는 상태 -->
        <h1>enabled</h1>
        <p>
            <input type="text" name="email"/>
        </p>

        <!-- 입력을 할 수 없는 상태 -->
        <h1>disabled</h1>

        <p>입력을 할 수 없는 상태로 만들기
            <input disabled="disabled" name="adress"/> <span>클릭</span>
        </p>
</body>

 


 

<head>
    <style>
        /*
        * 부정 선택자 : 선택자를 반대로 적용.

        input 태그 중에서 type 속성값이 password가 아닌 태그의 background 속성에 red 키워드를 적용
         */
        input:not([type=password]) {
            background: red;
        }
    </style>
</head>
<body>
    <input type="password" />
    <input type="text" />
    <input type="password" />
    <input type="text" />
    <input type="date" />
</body>

 


 

3) 구조 선택자

 

🥑  CSS3부터 지원하는 선택자로 특정한 위치에 있는 요소를 찾아 스타일을 적용 할 때 사용

 

:first-child  -  부모박스 안에서 형제 관계 중에서 첫 번째에 위치하는 태그 선택
:last-child   -  부모박스 안에서 형제 관계 중에서 마지막에 위치하는 태그 선택
:nth-child(수열)  -  부모박스 안에서 형제 관계 중에서 "앞에서" 수열번째의 태그 선택
:nth-last-child(수열)  -  부모박스 안에서 형제 관계 중에서 "뒤에서" 수열번째의 태그 선택

📍 자주 사용하는 수열에는 숫자번째(숫자), 짝수열(2n), 홀수열(2n+1)

 

<head>
    <style>
        div span:first-child { /* div의 자손 중 첫번째 자식에 해당하는 span 태그 지정 */
            background: red;
        }
        div p:first-child { /* div의 자손 중 첫번째 자식에 해당하는 p 태그 지정. 이 문서에는 없음 */
            background: blue;
        }
        div span:last-child {
            background: red;
        }
        div p:last-child {
            background: blue;
        }
    </style>
</head>
<body>
    <div>
        <span>text1</span>
        <p>text2</p>
        <span>text3</span>
        <p>text4</p>
    </div>
</body>


<head>
    <style>

        li {
            list-style: none;
            float: left;
            padding: 15px;
        }
        li:nth-child(2n) { /* li 태그 중에서 짝수 번째에 해당하는 li 태그들의 배경 색상과 글자 색상을 지정 */
            background: gray;
            color: pink;
        }
        li:nth-child(2n+1) { /* li 태그 중에서 홀수 번째 해당하는 li 태그들의 배경 색상과 글자 색상을 지정 */
            background: black;
            color: #ffd800;
        }
        li:first-child { /* li 태그 중에서 첫 번째에 해당하는 li 태그의 글자 색상을 지정 */
            color:white;
        }
        li:last-child { /* li 태그 중에서 마지막 번째에 해당하는 li 태그의 글자 색상을 지정 */
            color: green;
        }
        li:nth-child(3) { /* 1부터 시작 ~ n */
            background: pink;
            color: gray;
        }
    </style>
</head>
<body>
    <ul>
        <li>menu1</li>
        <li>menu2</li>
        <li>menu3</li>
        <li>menu4</li>
        <li>menu5</li>
        <li>menu6</li>
    </ul>
</body>


 

4)  형태 구조 선택자


🥑  일반 구조 선택자와 비슷하지만 태그 형태를 구분

 

:first-of-type                    -  부모박스 안에서 형제 관계 중에서 첫 번째에 위치하는 특정한 태그 선택
:last-of-type                     -  부모박스 안에서 형제 관계 중에서 마지막에 위치하는 특정한 태그 선택
:nth-of-type(수열)           -  부모박스 안에서 형제 관계 중에서 앞에서 수열번째의 특정한 태그 선택
:nth-last-of-type(수열)  -  부모박스 안에서 형제 관계 중에서 뒤에서 수열번째의 특정한 태그 선택

 

<head>
    <style>
        h1:first-of-type { /* h1 태그 중에서 첫 번째 h1 태그의 글자 색상 지정 */
            color: red;
        }
        h2:first-of-type { /* h2 태그 중에서 첫 번째 h2 태그의 글자 색상 지정. 구조 선택자라면 문서에 없음. */
            color: blue;
        }
        h2:last-of-type { /* h2 태그 중에서 마지막 번째 h2 태그의 글자 색상과 배경 색상 지정. 구조 선택자라면 문서에 없음. */
            color: white;
            background: blue;
        }
        div span:first-of-type {
            background: red;
        }
        div p:first-of-type {
            background: blue;
        }
        div span:last-of-type {
            background: red;
        }
        div p:last-of-type {
            background: blue;
        }
    </style>
</head>
<body>
    <h1>header-1</h1>
    <h2>header-2</h2>
    <h3>header-3</h3>
    <h3>header-3</h3>
    <h2>header-2</h2>
    <h1>header-1</h1>

    <div>
        <span>text1</span>
        <p>text2</p>
        <span>text3</span>
        <p>text4</p>
    </div>
</body>

 


 

5)  시작문자 선택자
       

🥑  태그 내부의 첫 번째 글자와 첫 번째 줄을 선택할 때 사용

🥑  특별히 화면에 보이는 부분을 꾸밀 때 불필요한 태그를 사용하지 않도록 하기 위해 콜론 2개(::)를 붙여서 표현 

 

::first-letter  첫 번째 글자를 선택
::first-line      첫 번째 줄을 선택

 

<head>
    <style>
        p::first-letter { /* 문단의 첫 번째 글자를 선택 */
            font-size: 20px;
            color: red;
            font-weight: 900; /* 글자 굵기 */
        }
        p::first-line { /* 문단의 첫 번째 줄을 선택 */
            background: blue;
            color: yellow;
        }

    </style>
</head>
<body>
<h1>리메이크되는 [달콤한 인생] </h1>

<p>
    영화감독을 꿈꾸시는 분이라면 크게 도움이 될 영화 중의 하나인 페데리코 펠리니 감독의 [달콤한 인생]이 리메이크 된다고 합니다.
</p>

<p>
    '아니, 왜?'라는 말이 나올 정도로 완성도 높은 영화들을 리메이크하는 것을 좋아하지 않지만, 현재를 배경으로 하거나 현재의 시각으로 본다면 어떻게 변하게 될 것이라고 한다면 리메이크를 반기게 될 것 같습니다. 아무튼 원작을 존경하는 관점에서 리메이크를 하게 된다고 하는데요.
</p>

<p>
    그동안 후속편이나 프리퀄 제작을 시도했으나 여의치 않았고 원작에서 큰 영감을 얻어 현대적으로 재해석하게 될 것이라고 합니다.
</p>

</body>


 

6)  가상 요소 선택자


🥑  HTML 코드에 존재하지 않는 구조 요소에 스타일을 부여할 수 있다

       ➡️  문서내에서 보이지 않지만, 미리 정의한 위치에 삽입하는 것이 가능
🥑  선택될 요소(element)의 특별한 상태를 지정하는 선택자로 선택될 요소의 앞 혹은 뒤쪽으로 가상의 요소를 넣어 표현

 

::before    특정요소의 앞에 삽입, 내용이나 필요한 경우 content 속성을 이용
::after       특정요소의 뒤에 삽입, 내용이나 필요한 경우 content 속성을 이용

 

<head>
    <style>
        h2::before {
            content: '하하';
        }
        p::after {
            content: '호호';
        }
    </style>
</head>
<body>
    <h2>TITLE-1</h2>
    <p>
        Lorem Ipsum is simply dummy text of the printing and typesetting industry.
    </p>

</body>


 

7)  반응 문자 선택자    

::selection   사용자가 드래그한 글자를 선택 

 

<head>
    <style>
        p::selection {
            background: black;
            color: red;
        }
    </style>
</head>
<body>
<h1>Lorem ipsum dolor sit amet</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse sed nisi velit. Phasellus suscipit
    pellentesque leo, vel efficitur mi placerat sed. Fusce vel condimentum leo, at iaculis ante. Suspendisse posuere,
    dolor non tempor ullamcorper, nisl elit facilisis erat, nec lacinia augue erat id lacus. Curabitur mollis,
    justo nec lobortis hendrerit, libero nunc aliquam lacus, ut tristique sem nunc eu metus. Quisque varius orci eu
    felis sollicitudin malesuada. Vivamus pretium ligula velit, eget facilisis enim imperdiet ac.</p>
<p>Nam enim sem, pulvinar sed nibh non, vestibulum suscipit dui. Vestibulum vitae sodales velit.
    Nam cursus, velit id semper malesuada, sem mauris iaculis diam, sit amet auctor ligula lectus in eros.
    Aliquam tincidunt semper odio, sit amet ornare neque tristique ut. Suspendisse placerat consequat lectus ut varius.
    Aliquam in ligula non massa auctor porta. Proin auctor mattis elit sit amet tincidunt. Cras auctor mauris augue,
    et volutpat diam iaculis vitae.</p>
</body>

 

 

 

 

[ 내용 참고 : IT 학원 강의 및 책 'Do it HTML+CSS+자바스크립트 웹 표준의 정석' ]


 

1.  수직 중앙 정렬에 사용하는 방법 

case 1. line-height로 부모 박스의 높이를 지정
case 2. displaydml table-cell 속성 적용 후 vertical-align 사용
case 3. position이 absolute일 경우 top: 50%; transform

 

<head>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        div {
            width: 200px;
            height: 100px;
            border: 2px solid black;
            background-color: lightgoldenrodyellow;
            text-align: center; /* 수평 중앙 정렬 */
        }
        div.line-height {
            line-height: 100px; /* 높이를 line-height로 사용 */
        }
        div.cell {
            display: table-cell;
            vertical-align: middle;
        }
        div.rel {
            position: relative;
        }
        div.rel p {
            position: absolute;
            top: 50%;
            transform: translateY(-50%);
        }
    </style>
</head>
<body>
    <div class="line-height">vertical-align</div>
    <div class="cell">vertical-align</div>
    <div class="rel"><p>vertical-align</p></div>
    <!-- line-height를 사용할 경우에는 요소가 한줄이어야 함 -->
    <div class="inline-height">vertical-align vertical-align vertical-align</div>
</body>

출력 결과


 

2. overflow와 scroll

1)  overflow 속성


🚀  내부 요소가 부모 박스의 범위를 벗어날 때 어떻게 처리할 것인지 지정
🚀  콘텐츠가 자주 업데이트 되는 경우 높이가 콘텐츠 양에 따라 자동으로 변경이 되거나 박스의 높이를 고정값으로 할 때 사용

 

hidden : 영역을 벗어나는 부분은 보이지 않음
scroll : 영역을 벗어나는 부분은 스크롤 바가 나타남
visible : 박스를 넘어가도 보여줌
auto : 박스를 넘어가지 않으면 스크롤 바가 나오지 않고, 박스를 넘어갈 때 스크롤 바가 나타남

 

<head>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .contents1 {
            width: 200px;
            height: 200px;
            border: 2px solid black;
            float: left;
            box-sizing: border-box;
            margin: 10px;
        }
        .contents2 {
            width: 200px;
            height: 200px;
            border: 2px solid black;
            float: left;
            box-sizing: border-box;
            margin: 10px;
            margin-left: 30px; /* 왼쪽과 바깥쪽 여백을 30px로 지정함 */
        }
        .contents3 {
            width: 200px;
            overflow: hidden;  /* 박스 높이가 지정되지 않았을 경우 박스 안의 내용만큼 박스 높이도 함께 늘어남 */
            border: 2px solid black;
            float: left;
            box-sizing: border-box;
            margin: 10px;
            margin-left: 30px;
        }
        .contents4 {
            width: 200px;
            height: 200px;
            overflow: hidden; /* 박스 높이가 지정되어있으면 지정된 높이만큼만 보여줌. */
            border: 2px solid black;
            float: left;
            box-sizing: border-box;
            margin: 10px;
            margin-left: 30px;
        }
    </style>
</head>
<body>
<!--박스의 높이에 맞게 텍스트 양을 넣은 예-->
<div class="contents1">
    <h4>콘텐츠의 양이 일정</h4>
    <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown </p>
</div>

<!--박스의 높이보다 텍스트의 양이 많아서 박스 밖으로 흘러넘치는 예-->
<div class="contents2">
    <h4>콘텐츠의 양이 많거나 유동적일때 흘러 넘침</h4>
    <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.</p>
</div>

<!--박스의 높이를 설정하지 않고 overflow:hidden을 지정하여 텍스트만큼 높이도 함께 늘어나는 예-->
<div class="contents3">
    <h4>콘텐츠의 양에 따라서 높이가 늘어남</h4>
    <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.</p>
</div>

<!--박스의 높이를 지정하고 overflow:hidden을 주어서 높이만큼만 보여지도록 한 예-->
<div class="contents4">
    <h4>박스의 지정된 높이만큼만 콘텐츠가 보여짐</h4>
    <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.</p>
</div>
</body>

 

출력 결과

 


 

2) scroll 속성

 

🚀   overflow: scroll 속성 사용
        ▶️  박스(block)의 내부 스크롤 바를 지정하고자 할 때 사용

 

overflow : 영역을 벗어나는 가로, 세로 부분을 스크롤 바로 나타나게 하거나 숨김
overflow-x : 가로 좌표에 대한 스크롤 바를 나타나게 하거나 숨김
overflow-y : 세로 좌표에 대한 스크롤 바를 나타나게 하거나 숨김

 

<head>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .scroll_box1 {
            float: left;
            box-sizing: border-box;
            width: 200px;
            height: 200px;
            border: 2px solid black;
            margin: 10px;
            overflow: scroll; /* 가로 세로 스크롤 바를 모두 보임 */
        }
        .scroll_box2 {
            float: left;
            box-sizing: border-box;
            width: 200px;
            height: 200px;
            border: 2px solid black;
            margin: 10px;
            margin-left: 30px; /* 왼쪽 바깥쪽 여백은 30px로 지정함 */
            overflow-x: scroll; /* 가로 스크롤 바를 표시 */
            overflow-y: hidden; /* 세로 스크롤 바를 숨김 */
        }
        .scroll_box3 {
            float: left;
            box-sizing: border-box;
            width: 200px;
            height: 200px;
            border: 2px solid black;
            margin: 10px;
            margin-left: 30px; /* 왼쪽 바깥쪽 여백은 30px로 지정함 */
            overflow-x: hidden; /* 가로 스크롤 바를 숨김 */
            overflow-y: scroll; /* 세로 스크롤 바를 표시 */
        }
    </style>
</head>
<body>
    <!-- 스크롤 바를 가로, 세로 모두 표시 -->
    <div class="scroll_box1">
        <h4>SCROLL-X,Y</h4>
        <p><img src="../box2/img2/camera02.png" alt="대체이미지"></p>
    </div>
    <!-- 스크롤 바를 가로만 표시 -->
    <div class="scroll_box2">
        <h4>SCROLL-X</h4>
        <p><img src="../box2/img2/camera02.png" alt="대체이미지"></p>
    </div>
    <!-- 스크롤 바를 세로만 표시 -->
    <div class="scroll_box3">
        <h4>SCROLL-Y</h4>
        <p><img src="../box2/img2/camera02.png" alt="대체이미지"></p>
    </div>
</body>

 

출력 결과

 

 

 

 

 

[ 내용 참고: IT 학원 강의 ]


1.  웹 문서의 레이아웃

1) display 속성

 

🐰  display 속성은 주로 웹 문서의 내비게이션을 만들면서 메뉴 항목을 가로로 배치할 때 많이 사용한다.

종류 설명
block 인라인 레벨 요소를 블록 레벨 요소로 만든다.
inline 블록 레벨 요소를 인라인 레벨 요소로 만든다.
inline-block 인라인 레벨 요소와 블록 레벨 요소의 속성을 모두 가지고 있으며 마진과 패딩을 지정할 수 있다.
none 해당 요소를 화면에 표시 x

 

display: block 사용 예
<head>
    <style>
        .transform {
            display: block; /* 속성 변경 */
        }
    </style>
</head>
<body>
    <!-- span 태그의 기본 속성에 의한 배치 -->
    <span>SPAN 01</span>
    <span>SPAN 02</span>
    <span>SPAN 03</span>
    <!-- span 태그의 변경된 속성에 의한 배치 -->
    <span class="transform">SPAN 04</span>
    <span class="transform">SPAN 05</span>
    <span class="transform">SPAN 06</span>

</body>

출력 결과


display: inline 사용 예
<head>
    <style>
        li {
            border: 2px solid black; 
        }
        .v_menu {
            list-style: none; /* 목록 항목의 스타일 기호를 없앰 */
        }
        .h_menu {
            display: inline;
        }
    </style>
</head>
<body>
    <ul>
        <li class="v_menu">세로메뉴01</li>
        <li class="v_menu">세로메뉴02</li>
        <li class="v_menu">세로메뉴03</li>
        <li class="v_menu">세로메뉴04</li>
    </ul>

    <ul>
        <li class="h_menu">네이버</li>
        <li class="h_menu">다음</li>
        <li class="h_menu">쿠팡</li>
        <li class="h_menu">구글</li>
    </ul>
</body>

출력 결과


display: inline-block 사용 예

 

  -  inline의 경우 한줄로 배치할 수 있지만, 넓이와 높이, 마진과 같은 정확한 값이 필요한 경우에는 적용이 힘듦
  -  inline 속성의 특성은 내부 콘텐츠만큼만 공간을 차지하고 있어서 넓이와 높이의 스타일이 적용이 안됨
  -  inline-block을 사용하면 해당 요소들을 가로로 배치할 수 있고 각 요소의 넓이와 높이 등 정확한 수치를 지정할 수 있음

<head>
    <style>
        li {
            border: 2px solid black;
        }
        .menu1 {
            display: inline; 
            background-color: yellowgreen;
            width: 150px;
            height: 40px; /* 넓이, 높이를 지정하였으나 inline 속성이기에 넓이, 높이가 적용되지 않음 */
        }
        .menu2 {
            display: inline-block; 
            background-color: orange;
            width: 150px;
            height: 40px; 
        }
    </style>
</head>
<body>
    <ul>
        <li class="menu1">inline</li>
        <li class="menu1">inline</li>
        <li class="menu1">inline</li>
        <li class="menu1">inline</li>
    </ul>

    <ul>
        <li class="menu2">inline-block</li>
        <li class="menu2">inline-block</li>
        <li class="menu2">inline-block</li>
        <li class="menu2">inline-block</li>
    </ul>
</body>

출력 결과


display: none 사용 예


   -  해당 요소와 공간을 모두 표시하지 않음
   -  비슷한 속성 중에 visibility: hidden; 이 있는데, visibility 속성은 화면에는 요소가 보이지 않으나 공간은 그대로 유지

        사용 예)
        팝업창(레이어 방식) 닫기.
        반응형 웹의 경우 모바일에서는 보이지만 PC에서는 보이지 않게 하려면 display: none 속성을 사용

<head>
    <style>
        .camera02 {
            display: none; /* 해당 요소의 공간과 내용을 없앰 */
           /* visibility: hidden; */
        }
    </style>
</head>
<body>
    <img src="img2/camera04.png" class="camera01" alt="camera04.png">
    <img src="img2/camera05.png" class="camera02" alt="camera05.png">
    <img src="img2/camera06.png" class="camera03" alt="camera06.png">
</body>

출력 결과

 


2) 왼쪽이나 오른쪽으로 배치하는 float 속성

 

🐰  html 초기 형태는  table 태그가 레이아웃을 잡는 용도로 사용
🐰  html4 부터는 레이아웃 용도로 table 태그 대신 div에 float 속성을 부여하는 방향으로 사용
🐰  html5 이후 부터 display 속성에 flex, grid 추가 하여 레이아웃에 사용

 

    💡 float 속성
      · float의 사전적 의미는 '떠오르다', '떠다니다'
      · 웹 페이지에서는 float을 왼쪽이나 오른쪽에 배치할 때 사용하며 배치를 하지 않을 경우 'none'으로 표현
      · 삽화 사용뿐 아니라, 레이아웃(block)을 나열할 때 많이 사용

 

left : 문서의 왼쪽으로 배치. 블록 박스를 왼쪽으로부터 나열하고 싶을 때 사용.
right : 문서의 오른쪽으로 배치. 블록 박스를 오른쪽으로부터 나열하고 싶을 때 사용.
none : 배치하지 않음. 정렬하지 않음
 ➡️  left와 right를 통해 나열 속성을 지정하면 display 개념은 무시됨. (none은 제외)

 

<head>
    <style>
        .camera {
            float: left;
        }
    </style>
</head>
<body>
    <img src="img/camera01.png" class="camera" alt="camera01">
    <h2>TITLE-1</h2>
    <p>
        Lorem Ipsum is simply dummy text of the printing and typesetting industry.
    </p>
</body>

출력 결과

 

<head>
    <style>
      div {
        width: 300px;
        height: 300px;
        border: 2px solid black;
      }

      .box1 {
        float: left;
      }

      .box2 {
        float: left;
      }
      .box3 {
        float: right;
      }
    </style>
</head>
<body>
    <div class="box1">01</div>
    <div class="box2">02</div>
    <div class="box3">03</div>
</body>

출력 결과

 


 

3) float 속성을 해제하는 clear 속성

 


🐰  float 속성으로 박스를 배치하면 이어지는 요소들도 동일한 속성이 적용
🐰  float 속성이 더 이상 필요하지 않다면 기존 속성을 해체하기 위한 clear 속성을 사용

  🥕  clear : float 나열에 대한 값을 지우고, 문서의 흐름을 제거하기 위해 사용하는 태그

  clear: left  ▶️  왼쪽으로 붙는 float 정렬을 취소
  clear: right  ▶️  오른쪽으로 붙는 float 정렬을 취소
  clear: both  ▶️  왼쪽, 오른쪽으로 붙는 float 정렬을 취소
  clear: none  ▶️  clear 속성을 설정하지 않은 것과 같음

 

<head>
    <style>
        div {
            width: 300px;
            height: 300px;
            border: 2px solid black;
        }
        .box1 {
            float: left;
        }
        .box2 {
            float: left;
        }
        .box3 {
            float: left;
        }
        .clear {
            clear: both;
        }
    </style>
</head>
<body>
    <div class="box1">01</div>
    <div class="box2">02</div>
    <div class="box3">03</div>
    <div class="clear">04</div>
    <div>05</div>
    <div>06</div>
    <div>07</div>
</body>

 

출력 결과

 

display : inline-block 과 float : left 속성의 다른점

 

 - inline-block은 가로로 배치하면서도 기본 마진과 패딩을 가지고 있지만,

    float: left는 가로로 배치될 때 요소에 기본 마진과 패딩이 없고 clear 속성으로 플로팅을 해제해야 함

 


2.  여백을 조절하는 속성

 

1) 요소 주변의 여백을 설정하는 margin 속성

margin: <크기>|<백분율>|auto

 

 

🐰  마진 margin은 요소 주변의 여백을 의미

🐰  top ▶️ right ▶️ bottom ▶️ left 순으로 적용

 

 

 

 

 

 


 

2) margin 속성을 사용하여 웹 문서를 가운데 정렬하기

 

🐰  웹 문서 전체를 화면 중앙에 배치할 때 margin 속성을 사용

🐰  margin-left 와 margin-right 의 속성값을 auto로 지정

       ➡️  CSS는 웹 브라우저 화면의 너비에서 요소 너빗값을 뺀 나머지 영역을 좌우 마진으로 자동 계산

       ➡️  block 속성을 가진 박스의 넓이가 지정되어 있을 때 margin:0 auto를 통해 가운데 배치가 가능하며

            margin: auto auto 라고 입력하면 브라우저의 위아래는 자동 인식이 되지 않지만 좌우는 자동으로 가운데 배치가 가능

<head>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .banner {
            width: 740px;
            height: 120px;
            background-color: burlywood;
            float: left;
        }
        .login {
            width: 333px;
            height: 120px;
            background-color: beige;
            float: left;
            margin-left: 8px;
            /* 로그인 박스 기준에서 간격을 주고자 왼쪽 바깥쪽 여백을 지정하였으며,
            배너 박스 기준일 때 바깥쪽 여백은 margin-right가 됨. */
        }

        .main {
            width: 1081px; /* 배너 박스와 로그인 박스를 더한 값 */
            height: 120px; /* 두 개 박스의 고정 높이 */
            margin: 100px auto;
            /* margin 값이 2개일 때 top bottom, left right로 지정 */
        }
    </style>
<body>
    <div class="main">
        <div class="banner">배너영역</div>
        <div class="login">로그인</div>
    </div>
</body>

출력 결과

 

안쪽 박스에 border가 추가 되면 박스의 넓이와 높이에 영향을 주게 되어서 박스들이 밑으로 밀려나는 현상이 나타남
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .banner {
            width: 740px;
            height: 120px;
            background-color: burlywood;
            float: left;
            border: 2px solid black;
        }
        .login {
            width: 333px;
            height: 120px;
            background-color: beige;
            float: left;
            margin-left: 8px;
            border: 2px solid black;
        }
        /*
        배너 영역 박스 넓이 : 740 + 2 + 2 = 744px
        로그인 박스 넓이 : 333 + 8 + 2 + 2 = 345px
        부모 박스의 넓이 : 744 + 345 = 1089px
        부모 박스의 높이 : 120 + 2 + 2 = 124px
         */
        .main {
            width: 1081px; /* 배너 박스와 로그인 박스를 더한 값 */
            height: 120px; /* 두 개 박스의 고정 높이 */
            margin: auto auto /* margin 값이 2개일 때 top bottom, left right로 지정 */
        }
    </style>
<body>
    <div class="main">
        <div class="banner">배너영역</div>
        <div class="login">로그인</div>
    </div>
</body>

출력 결과

 


 

3) 마진 중첩 이해하기

 

🐰  박스 모델들을 세로로 배치할 경우 각 마진과 마진이 서로 만나면 마진값이 큰 쪽으로 겹쳐지는 문제가 발생

       ▶️ 이런 현상을 마진 중첩 margin overlap 또는 마진 상쇄 margin collapse 라고 함

       ▶️ 오른쪽 마진과 왼쪽 마진이 만날 경우에는 중첩되지 않음

 


 

4) 콘텐츠와 테두리 사이의 여백을 설정하는 padding 속성

 

 

 

🐰  패딩 padding 이란 콘텐츠 영역과 테두리 사이의 여백을 말함

🐰  4개 방향의 패딩을 한꺼번에 지정할 수도 있고, 예약어를 사용해서 특정 방향에만 지정할 수도 있다.

 

 

 

 

 

 

 

 

 

 

[ 내용 참고 : IT 학원 강의 및 책 'Do it HTML+CSS+자바스크립트 웹 표준의 정석' ]


 

1.  CSS 박스 모델

 

1) 블록 레벨 요소와 인라인 레벨 요소

 

🍒  블록 레벨 block-level 요소 

      -  화면의 가로(폭) 길이 (100%)를 차지, 뒤에 오는 요소는 줄 바꿈이 일어나며 

          여러 개의 <div> 태그를 나열하면 수직 방향으로 정렬이 됨

           ▶️  대표적인 태그 : div, p, h1~h6, ul, ol, form, table, blockquote~

<body>
    <div>HTML5-WEB</div>
    <div>HTML5-WEB</div>
    <div>HTML5-WEB</div>
    <div>HTML5-WEB</div>
    <div>HTML5-WEB</div>
</body>

출력 결과


 

🍒  인라인 레벨 inline-level 요소

    -  해당 태그의 컨텐츠 만큼 공간을 차지(폭이 컨텐츠의 양에 비례), 글자와 같이 옆으로 나열되며 나타남
    -  줄 바꿈이 일어나지 않기 때문에 <span></span> 이라고 나열하면 수평 방향으로 정렬
    -  width, height, margin-top, margin-bottom이 적용되지 않음
    -  태그 종류 : a, img, span, sub, sup, i, b, em(글자를 꾸미는 태그 종류), input

<head>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
    <span>SPAN-inline</span>
    <span>SPAN-inline</span>
    <span>SPAN-inline</span>
    <span>SPAN-inline</span>
    <span>SPAN-inline</span>

</body>

출력 결과

 


span에 margin 적용 시 margin-left, margin-right는 적용되어서 나오는 예시
<head>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        span {
            width: 100px;
            height: 100px;
            background-color: aqua;
            margin: 10px;
            float: left;
        }
    </style>
</head>
<body>
    <span> inline 성격의 태그</span>
    <span> inline 성격의 태그</span>
</body>

출력 결과

 


2)  박스 모델의 기본 구성

 

 

 

🍒  박스모델 box model 요소

     -  박스 형태인 요소를 말함

     -  콘텐츠 영역 ▶️ 패딩 padding ▶️ 테두리 border ▶️ 마진 margin 으로 구성

     -  마진이나 패딩은 웹 문서에서 다른 콘텐츠 사이의 간격이나 배치 등을 고려할 때 필요한 개념

 

 

💡  박스의 실제 넓이와 높이 공식
     - 한개의 박스에 margin + border + padding 값이 모두 적용되었다는 가정
     - width 속성과 height 속성은 텍스트가 들어가는 영역(contents)의 넓이와 높이를 지정

* 전체 넓이 : width + 2 * (margin + border + padding)
* 전체 높이 : height + 2 * (margin + border + padding)

 

3) 콘텐츠 영역의 크기를 지정하는 width, height 속성

 

종류 설명
<크기> 너비나 높이의 값을 px이나 em 단위로 지정
<백분율> 박스 모델을 포함하는 부모 요소를 기준으로 너빗값이나 높잇값을 백분율(%) 로 지정
auto 박스 모델의 너빗값과 높잇값이 콘텐츠 양에 따라 자동으로 결정된다. 기본값.

🍒  넓이 / width : 크기 | 백분율 | auto
🍒  높이 / height : 크기 | 백분율 | auto

 

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .box1 {
            width: 300px; /* 고정 넓이 */
            height: 100px; /* 고정 높이 */
            background-color: blue;
        }
        #box2 {
            width: 50%; /* 가변 넓이 - 현재 브라우저 창 너비의 50%를 유지 */
            height: 100px; /* 고정 높이 */
            background-color: green;
        }
      
    </style>
</head>
<body>
    <div class="box1">BOX-1</div>
    <div id="box2">BOX-2</div>
</body>

 

전체 창 출력
브라우저 창 크기를 줄였을 때

 


 

4) box-sizing 속성

 

🍒  width 속성과 height 속성은 콘텐츠 주변의 여백이나 테두리를 뺀 콘텐츠 영역의 크기를 가리킨다

🍒  웹 문서에 여러 가지 요소를 배치할 때 실제 박스 모델이 차지하는 크기는 콘텐츠와 테두리 사이의 여백, 테두리 두께까지 계산해야 함

 

  💡 box-sizing은 박스 모델의 크기를 쉽게 계산하기 위해 지정하는 속성

종류 설명
boder-box 테두리까지 포함해서 너빗값을 지정
content-box 콘텐츠 영역만 너빗값을 지정. 기본값.
<head>
    <style>
        div {
            width: 300px;
            height: 300px;
            border: 10px solid black; /* 테두리 스타일 */
            padding: 30px; /* 안쪽 여백 공통 지정 */
        }
        .box1 {
            box-sizing: border-box;
            /* 박스의 테두리와 여백을 박스의 넓이와 높이에 포함. 넓이가 300px */
        }
        .box2 {
            box-sizing: content-box;
            /* 기본값과 동일. 넓이: 300 + 20 + 60 = 380px */
        }
    </style>
</head>
<body>
    <div class="box1">01</div>
    <div class="box2">02</div>

</body>

출력 결과


 

5)  box-shadow 속성

 

🍒  사진 주변에 그림자를 추가하는 속성

🍒  수평 거리와 수직 거리는 필수로 지정 ▶️  그림자의 위치는 수평 거리와 수직 거리의 값에 따라 움직이기 때문

box-shadow: <수평거리> <수직거리> <흐림 정도> <번짐 정도> <색상> inset

 

종류 설명
<수평 거리> 그림자가 가로로 얼마나 떨어져 있는지 나타냄.
양수는 오른쪽 / 음수는 왼쪽
<수직 거리> 그림자가 세로로 얼마나 떨어져 있는지 나타냄.
양수는 아래쪽 / 음수는 위쪽
<흐림 정도> 생략하면 0을 기본값으로 하여 진한 그림자를 표시.
값이 커질수록 부드러운 그림자를 표시하며 음수는 사용불가.
<번짐 정도> 양수는 모든 방향으로 그림자가 퍼져 박스보다 그림자가 크게 표시.
음수는 모든 방향으로 그림자가 축소되어 보임.
기본값은 0
<색상> 한 가지만 지정할 수도, 공백으로 구분해서 여러 개 색상 지정 가능
기본값은 검정색
inset 이 키워드를 함께 표시하면 안쪽 그림자로 그린다.

 

2.  테두리 스타일 지정

 

1) 박스 모델의 방향

 

🍒  박스 모델은 상하좌우 4개의 방향이 있어 테두리나 마진, 패딩 등을 지정할 때 한꺼번에 똑같이 지정하거나

      모두 다르게 지정할 수도 있다.

🍒  맨 윗 부분은 top ▶️ 오른쪽은 right ▶️ 아래쪽은 bottom ▶️ 왼쪽은 left  (시계 방향)

       

 


 

2) 테두리 스타일을 지정하는 border-style 속성

 

종류 설명
none 기본값. 테두리가 없다.
hidden 테두리를 감춘다. 표에서 border-collapse: collapse일 경우 다른 테두리도 표시되지 않는다.
solid 테두리를 실선으로 표시
dotted 테두리를 도트형태의 점선으로 표시
dashed 테두리를 직선형태의 점선으로 표시
double 테두리를 이중선으로 표시. 두 선 사이의 간격이 border-width값이 된다.
groove 테두리를 창에 조각한 것처럼 표시. 홈이 파인 듯 입체 느낌이 난다.
inset 표에서 border-collapse: seperate일 경우 전체 박스 테두리가 창에 박혀 있는 것처럼 표시
표에서 border-collapse: collapse일 경우 groove와 똑같이 표시
outset 표에서 border-collapse: seperate일 경우 전체 박스 테두리가 창에서 튀어나온 것처럼 표시
표에서 border-collapse: collapse일 경우 ridge와 똑같이 표시
ridge 테두리를 창에서 튀어나온 것처럼 표시
<style>
    #box1 { border-style:solid; }  /* 실선 */
	#box2 { border-style:dotted; }  /* 점선 */
    #box3 { border-style:dashed; }  /* 짧은 직선 */
</style>


 

3) 테두리 두께를 지정하는 border-width 속성

 

border-width: <크기> | thin | medium | thick

 

🍒  속성 값이 1개  ▶️  4개 방향 테두리 모두 같은 값 적용

🍒  속성 값이 2개  ▶️  첫 번째 값은 top, bottom 테두리 / 두 번째 값은 left, right 테두리 적용

🍒  속성 값이 3개  ▶️  top, right, bottom 순으로 적용 / left 값은 마주보는 right 속성값과 똑같이 적용

🍒  속성 값이 4개  ▶️  top, right, bottom, left 순으로 적용


 

4) 테두리 색상을 지정하는 border-color 속성

 

🍒  테두리 색상을 지정

      ➡️  border-color 사용해서 4개 방향의 테두리 색상 한꺼번에 지정

      ➡️  border-top-color 처럼 테두리 방향을 넣어주면 색상을 하나씩 지정 가능


 

5) 테두리 스타일 묶어 지정하는 border 속성

 

🍒  테두리 스타일과 두께, 색상의 속성을 따로 사용하면 소스 길이가 길어짐

       ▶️  3가지를 한꺼번에 표현하는 방법이 border 속성을 사용하는 것 ( 속성 값 순서는 상관 없다 )

<style>
    * {
        margin: 0;
        padding: 0;
    }
    .box1 {
        width: 300px; /* 고정 넓이 */
        height: 100px; /* 고정 높이 */
        border: green 2px solid; /* 테두리 굵기는 2px, 테두리 스타일 solid, 테두리 색상 green */
    }
    .box2 {
        width: 300px;
        height: 100px;
        border: red dashed;
        border-width: 1px 5px 10px 12px; /* 12시 부터 시계 방향으로 */
    }
    .box3 {
        width: 300px;
        height: 100px;
        border: blue 1px dotted;
        border-bottom-width: 5px; /* 아래 테두리만 따로 지정 */
    }
    .box4 {
        width: 300px;
        height: 100px;
        border: pink dashed;
        border-width: 5px 10px; /* (12시 6시) (3시 9시) */
    }
     </style>
</head>
<body>
    <div class="box1">BOX-1</div>
    <div class="box2">BOX-2</div>
    <div class="box3">BOX-3</div>
    <div class="box4">BOX-4</div>
</body>


 

6) 둥근 테두리를 만드는 border-radius 속성

 

border-radius: <크기> | <백분율>

 

🍒  border-radius 속성을 사용하면 꼭짓점 부분에 원이 있다고 가정해서 둥글게 처리

      ▶️  이 때 원의 반지름을 이용하면 둥근 정도를 나타낼 수 있다

🍒  라운드 지정하는 순서는 top-left, top-right, bottom-right, bottom-left
🍒  원 형태로 만들고 싶다면 border-radius 반지름값을 너비나 높이의 50%로 지정하면 된다.

 

 

<head>  
    <style>
        div {
            width: 300px;
            height: 100px;
            border: green 10px solid;
            margin: 10px;
        }
        .box1 {
            border-radius: 30px ; /* 전체 모서리를 30px로 라운드 지정 */
        }
        .box2 {
            border-radius: 10px 20px 30px 40px;
            /* top-left: 10px, top-right: 20px; bottom-right: 30px, bottom-left: 40px 라운드 지정 */
        }
        .box3 {
            border-radius: 10px 40px;
            /* top-left: 10px, top-right: 40px; bottom-right: 10px, bottom-left: 40px 라운드 지정 */
        }
        .box4 {
            width: 100px; height: 100px; border-radius: 100px; /* 원모양 */
        }
      
    </style>
</head>
<body>
    <div class="box1">BOX-1</div>
    <div class="box2">BOX-2</div>
    <div class="box3">BOX-3</div>
    <div class="box4">BOX-4</div>
</body>

 

출력 결과

 

 

 

 

[ 내용 참고 : IT 학원 강의 및 책 'Do it HTML+CSS+자바스크립트 웹 표준의 정석' ]


 

1. CSS 란?

👩🏻‍💻  CSS (style)각 요소들이 어떻게 보이는가를 정의하는데 사용되는 스타일 시트 언어로 홈페이지의 스타일 즉 디자인 요소를 담당

 

1) 스타일

 

a.  스타일 형식

[기본구조]
선택자(Selector) { 속성(property) : 값(value); }
(* 스타일은 기본적으로는 마지막에 작성된 순서대로 표현되어짐!)

 

  ✏️  맨 앞의 선택자는 스타일을 어느 태그에 적용할 것인지 알려 주는 것

  ✏️  속성과 값이 하나의 쌍으로 이루어진 것을 스타일 규칙이라 하며, 세미콜론(;)으로 구분해 스타일 규칙을 여러 개 지정할 수 있다.

 

b. 스타일의 주석 표기

<style>
    /* style 안에 작성하는 주석방법! */
</style>

 

  ✏️  /* */ 안에 한 줄 또는 여러 줄 들어갈 수 있다.


💡 CSS 소스 경량화 

    -  CSS 소스는 네트워크를 이용해 파일로 내려받으므로 되도록 파일 크기가 작은 것이 좋다.

    -  즉, 줄 바꿈, 공백등을 제거하고 꼭 필요한 정보만 남겨 파일을 작게 만드는 것을 'CSS 소스 경량화(minify)' 라고 한다. 

 

 


2) 스타일 시트

 

📁  스타일 규칙을 한눈에 확인하고 필요할 때마다 수정하기도 쉽도록 한군데 묶어 놓은 것을 '스타일 시트'라고 한다.

 

스타일 시트 갈래

 

a.  브라우저 기본 스타일

  ·  CSS를 사용하지 않은 웹 문서라 하더라도 웹 브라우저에 표시할 때는 기본 스타일을 사용

 

b. 사용자 스타일

 

💡  인라인 스타일(Inline style)

    -  HTML 요소 내부에 style 속성을 사용하여 CSS 스타일을 적용하는 방법

</h2 style="color:green">

 

 

💡  내부 스타일 시트(Internal style sheet)

    - <style>태그를 사용하여 CSS 스타일을 적용하는 방법

<head>
  <style>
       body { background-color: lightyellow; }
  </style>
</head>

 


💡  외부 스타일 시트(External style sheet)
    -  외부에 작성된 .CSS문서 즉 스타일 시트 파일을 연결하여 적용하는 방법

<head>
    <link rel="stylesheet" href="외부 스타일 시트 파일 경로">
</head>

 

    ⚡️  외부 스타일 시트 작성
         1. html 파일이 있는 디렉토리에 css 라는 이름의 디렉토리를 생성
         2. css 디렉토리에 main.css 파일 생성
         3. html 파일의 <style> 태그 안의 부분을 복사해서 main.css에 붙여넣기
               ▶️  <style> 태그는 포함하지 않음
         4. html 파일의 <style> 태그 삭제
         5. <link> 태그로 css 파일을 연결

     ⚡️  외부 스타일 시트의 단점
           - 캐쉬 때문에 바로 적용이 안 되는 경우가 있음


 

<!-- main.css 파일 -->
.de {
    color: #09F;
}
<head>
    <meta charset="UTF-8">
    <title>CSS 지정 방식</title>
        <link rel="stylesheet" href="./css/main.css" />
</head>

<body>
    <p class="de">
        디지털 디자인 이란 ?<br>
        우선 '디지털(Digital)' 그리고 '디지털 스토리텔링(Digital Storytelling)'이란 말에 대해 생각해보자.
    </p>

</body>

출력 결과

 


2.  CSS 기본 선택자 

1)  클래스 선택자  class selector

.클래스명 { 스타일 규칙 }

 

👩🏻‍💻  클래스 이름을 사용해서 다른 선택자와 구별하는데, 클래스 이름 앞에 마침표(.)를 붙여야 한다. 

👩🏻‍💻  클래스 스타일을 적용할 때는 태그 안에 class="클래스명" 처럼 class 속성을 사용해서 지정

👩🏻‍💻  요소 하나에 클래스 스타일을 2개 이상 적용할 수 있다.  

       ▶️ 이 때 공백으로 구분해서 스타일 이름을 적으면 된다.

<head>
    <meta charset="UTF-8">
    <title>CSS 지정 방식</title>
    <style>
        .de {
            color: #09F;
        }
    </style>
</head>

<body>
    <p class="de">
        디지털 디자인 이란 ?<br>
        우선 '디지털(Digital)' 그리고 '디지털 스토리텔링(Digital Storytelling)'이란 말에 대해 생각해보자.
    </p>
</body>

출력 결과


 

2) 전체 선택자  universal selector

* { 속성: 값... }


 👩🏻‍💻  html내에 등장하는 모든 형태를 선택 (초기화, 기본 설정값) 가급적 사용안하는 것이 좋음.

         ➡️ reset.css 치면 나오는 글 참고해서 작성하는 것이 좋다.

<style>
    * {
         margin: 0; /* 바깥여백 */
         padding: 0; /* 안쪽여백 */
      }
</style>
</head>
<body>
    <h4>Artwork Concept Drawing</h4>
    <h1>아트웍 컨셉 드로잉</h1>
    <p>
        편집 포트폴리오에 포함될 수 있는 북커버 및 동화책 삽화 제작, 웹 포트폴리오에 포함될 수 있는 아트웍 실습,
        3D 캐릭터 디자인이나 모션 그래픽에 사용할 수 있는 아트웍 표현에 대하여 학습합니다.
    </p>
</body>

 

출력 결과

 


3)  타입 선택자 type selector 

태그명 { 스타일 규칙 }


👩🏻‍💻  특정 태그를 사용한 모든 요소에 스타일을 적용하는 선택자로, html 화면 내에서 하나의 이름으로 한 번만 사용권장
       ➡️  주로 큰 단락, 부모에서 사용

👩🏻‍💻  여러 태그들을 한 번에 선택해 스타일 속성을 적용할 때 쉼표 사용

 

  💡  태그(tag)와 요소(element)

      -  태그는 말 그대로 태그 자체를 가리키는 반면, 요소는 태그를 적용한 것을 가리킴

      -  즉 요소는 태그 안에 적힌 문자들을 지칭

<style>
        * {
            margin: 0; /* 바깥여백 */
            padding: 0; /* 안쪽여백 */
        }

        body {
            background: #000000; /* 배경색 지정. #000 -> 검정색 */
            color: white; /* 글자색 */
        }
</style>
</head>
<body>
    <h4>Artwork Concept Drawing</h4>
    <h1>아트웍 컨셉 드로잉</h1>
    <p>
        편집 포트폴리오에 포함될 수 있는 북커버 및 동화책 삽화 제작, 웹 포트폴리오에 포함될 수 있는 아트웍 실습,
        3D 캐릭터 디자인이나 모션 그래픽에 사용할 수 있는 아트웍 표현에 대하여 학습합니다.
    </p>
</body>

출력 결과


 

태그 선택자와 클래스 선택자를 함께 사용하면 더 정확하게 태그를 선택할 수 있음 
   ex. 태그명.클래스명
<head>
    <style>
        li.select {
            color: red;
        }
    </style>
</head>
<body>
    <h1 class="select">Lorem ipsum</h1>
    <ul>
        <li class="select">Lorem ipsum</li>
        <li>Lorem ipsum</li>
        <li>Lorem ipsum</li>
        <li>Lorem ipsum</li>
    </ul>
</body>

 

출력 결과

 

 


4) id 선택자  id selector

#아이디명 { 스타일 규칙 }

 

👩🏻‍💻  id 선택자도 클래스 선택자와 마찬가지로 특정 부분에 스타일을 적용할 때 사용
👩🏻‍💻  마침표(.) 대신 # 기호를 사용한다는 점만 제외하면 클래스 선택자와 사용법은 동일
👩🏻‍💻  주로 큰 단락, 부모에서 사용. 자바 스크립트에서 사용.

<head>
    <meta charset="UTF-8">
    <title>스타일시트</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        #title1 {color: #666666;}
        #title2 {color: blue;}
        #title3 {color: orange;}
        #title4 {color: red;}
        #title5 {color: gray;}
        #title6 {color: green;}
    </style>
</head>
<body>
    <h1 id="title1">웹디자인</h1>
    <h2 id="title2">스마트폰 웹디자인</h2>
    <h3 id="title3">웹기획</h3>
    <h4 id="title4">웹프로그래밍</h4>
    <h5 id="title5">웹퍼블리쉬</h5>
    <h6 id="title6" style="color:red;">제이쿼리</h6>
</body>

출력 결과

 


id는 고유값이어야 하지만, 스타일시트에서는 id 속성 중복이 문제가 되지 않음
하지만 자바스크립트는 id 속성이 중복될 경우에 문제가 발생
    예) getElementById(), getElementsByClassName()

id 속성은 중복되지 않게 사용해야 함
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #rint { color: red;}
    </style>
</head>
<body>
    <h1 id="rint">CSS3 Selector Basic</h1>
    <h2 id="rint">CSS3 Selector Basic</h2>
    <h3 id="rint">CSS3 Selector Basic</h3>
</body>

출력 결과

 


5) 그룹 선택자

선택자1, 선택자2 { 스타일 규칙 }

 

👩🏻‍💻  여러 선택자에서 같은 스타일 규칙을 사용하는 경우 쉼표(,)로 구분해 여러 선택자 나열 후 스타일 규칙을 한 번만 정의

 


 

3. 캐스케이딩 스타일 시트

 

🚀  캐스케이딩 cascading 은 CSS 의 'C'에 해당하며, 스타일 시트에서 우선순위가 위에서 아래로 적용된다는 의미로 사용

🚀  CSS에서는 웹 요소에 둘 이상의 스타일을 적용할 때 우선순위에 따라 적용할 스타일을 결정

 

스타일 충돌하지 않게 하는 방법 : 스타일 우선순위 적용 / 스타일 상속

 

 

1) 스타일 우선순위

 

👾  어떤 스타일을 먼저 적용할 것인지 결정하는 규칙

👾  웹 브라우저 내용을 표시할 때 사용자 스타일, 제작자 스타일, 웹 브라우저 기본 스타일 순으로 우선 적용

👾  중요도가 같은 스타일인 경우 필요한 요소에만 적용할 스타일 일수록 우선순위가 높아진다.

a. ! important : 스타일에 강제 스타일 적용 시 사용 ex) background-color: yellow !important;
b. 인라인 스타일  ex) <h2 style="color:green">
c. id 스타일  ex) #id { color: #000; }
d. 클래스 스타일  ex) .class { color:#000; }
e. 타입 스타일  ex) h1 { color:#fff; }

 

<head>  
    <style>

        * {
            margin: 0;
            padding: 0;
        }

        p {
            font-style: italic; /* 글자 스타일 */
            color: red !important /* 글자 색상. 중요 스타일은 !important 붙임 */
        }

        p {
            color: orange; /* 글자 색상 */
        }
    </style>
</head>
<body>
    <h1>디자인스킬업</h1>
    <p style="color:blue;">
        2D 그래픽은 모든 그래픽에서 기본이라 할 수 있습니다. 그래픽 작업에서 높은 비중을 차지합니다.
    </p>
</body>

출력 결과


💡 소스코드의 작성 순서

    -  스타일 시트에서 중요도와 적용범위가 같아면 그 다음은 스타일을 정의한 소스 순서로 우선순위가 정해진다.

        ➡️  나중에 작성한 스타일이 먼저 작성한 스타일을 덮어쓴다.

<head>
     <style>
        * {
            margin: 0; /* 바깥여백 */
            padding: 0; /* 안쪽여백 */
        }
        body {
            background: #000000; /* 배경색 지정. #000 -> 검정색 */
            color: white; /* 글자색 */
        }
        body {
            background: #999; /* 동일한 속성에 값을 지정하는 경우 나중의 것이 적용됨 */
            font-family: '돋움'; /* 기본 글꼴 돋움 */
            font-size: 10px; /* 글자 크기 10px */
        }
        body {
            line-height: 30px; /* 줄 간격 30px */
        }
        a {
            text-decoration: none; /* a 속성을 가진 링크에 어떤 꾸밈도 하지 않음 */
            color: yellow; /* 링크를 지정한 글자의 색상을 노란색으로 지정 */
        }
        .color1 {
            color:green;
        }
    </style>
</head>

<body>
    <h4>Artwork Concept Drawing</h4>
    <h1 class="color1">아트웍 컨셉 드로잉</h1>
    <p class="color1">
        편집 <a href="#">포트폴리오</a>에 포함될 수 있는 북커버 및 동화책 삽화 제작, 웹 포트폴리오에 포함될 수 있는 아트웍 실습,
        3D 캐릭터 디자인이나 모션 그래픽에 사용할 수 있는 아트웍 표현에 대하여 학습합니다.
    </p>
</body>

출력 결과


 

2) 스타일 상속

 

👾  웹 문서에서 사용하는 여러 태그는 서로 포함 관계

       ▶️ 이 때 포함하는 태그를 부모 요소, 포함된 태그를 자식요소
👾  '스타일 상속' : 부모 태그에 특정 값을 적용 시 아래, 즉 하위 요소에도 그 속성들이 그대로 적용
       ▶️  예를 들어 정렬 text-align, color, font-size...

       ▶️   body 태그는 웹 문서에서 사용한 모든 태그의 부모요소

<head>
    <meta charset="UTF-8">
    <title>스타일시트</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
       
        body {
            font-family: '돋움'; /* 글꼴 */
            color: red; /* 글자 색상 */
        }
    </style>
</head>
<body>
    <h1>디자인과정</h1>
    <ul>
        <li>웹학과</li>
        <li>편집디자인학과</li>
        <li>CG학과</li>
        <li>모션영상학과</li>
        <li>건축인테리어학과</li>
        <li>기계학과</li>
    </ul>
</body>

출력 결과

 

 

 

 

 

[ 내용 참고 : IT 학원 강의 및 책 'Do it HTML+CSS+자바스크립트 웹 표준의 정석' ]

+ Recent posts