BackEnd/WEB

CSS_국비_DAY43

Leo.K 2022. 4. 29. 09:51

오늘은 html로 작성한 구조를 보기 좋게 꾸며주기 위한 CSS문법을 배웠습니다. WAS 언어를 배우는 과정에서 간략하게 정리하는 문법이므로 CSS와 HTML의 정리가 섞여있을 수 있습니다.

CSS란? 

  • Cascade Style Sheet
  • Html내의 style을 지정하는 언어입니다. 
  • 방법 
    • Inline 방식    : Element내에 직접 지정합니다. 
    • 선언적 방식   : Document위쪽에 선언해서 사용(<head><style>여기에 선언</style></head>)
    • 외부파일 연결 : 다른 Document(html문서)에서도 재사용 가능합니다. 

 

[Inline 방식]

형식 -> <태그명style="속성: 값; 속성: 값; ...  속성: 값;" ></p>

[선언적 방식]

형식 -> selector { style속성 : 값; style속성 : 값; ... style속성 : 값;} 

  1. Element(Tag) Selector :  tag명 {}
    1. 태그명을 선택자(Selector)로 사용하여 선택자에 해당하는 모든 태그에 style을 입힙니다.
  2. ID Selector              : #id명 {}
    1. id 속성을 선택자로 사용하여 id속성이 같은 태그에 style을 입힙니다. (id는 식별자이므로 태그마다 다릅니다.)
  3. Class Selector          : .클래스명 {}
    1. 클래스 속성을 선택자로 사용하여 클래스속성이 같은 태그에 Style을 입힙니다. (class는 그룹을 지정하는 개념이므로 여러 태그가 같은 클래스명을 사용할 수 있습니다.)
  4. Attribute Selector      : Element[Attribute='값']
    1. 속성이 ''인 태그에 style을 입힙니다.

[외부파일 연결]

형식 -> <link rel="stylesheet" href="CSS파일이 저장된 위치 경로"> 

  1. 보편적으로 모양을 입혀주고자 하는 파일과 같은 폴더 하위에 위치시킵니다. 
  2. 외부폴더에 CSS파일을 만들어서 style을 지정해주고, 위의 형식처럼 relation을 지정해주는데 반드시, 정확한 경로를 설정 해줘야 합니다. 
    1. 상대경로 : 현재 위치에서 시작해서 목적지 주소로 가는 경로
    2. 절대경로 : 루트 위치에서 시작해서 목적지 주소로 가는 경로

 

[속성 & 태그]

<p> : 한 문단을 지정합니다. [Block Element]

margin  :  현재 태그 영역의 바깥 쪽 여백을 설정하는 속성 

padding  :  현재 태그 영역의 안쪽 여백을 설정하는 속성 

※ 주의사항 ※

안쪽 여백을 잡게 되면, 전체 박스 크기에서 컨텐츠의 크기는 그대로 있지만 박스 크기가 증가합니다. 즉, 안쪽 페딩을 지정한 후에 박스크기가 최초로 설정한 값과 같다고 생각하면 안됩니다.  

박스의 너비 = 최초 설정한 콘텐츠 크기 + 2 * 수평방향 페딩값    

박스의 높이 = 최초 설정한 콘텐츠 크기 + 2 * 수직방향 페딩값    

아래의 그림을 보면서 설명하겠습니다. 

위에서 보면 두 개의 박스는 하나의 속성만 달리하고,  width와 height의 속성을 동일하게 200px로 주었습니다. 그런데 왜 크기가 다를까요? 

box-sizing : 사용자가 지정한 width, height로 박스 크기를 200 x 200으로 지정하여, 그 크기 내부에 border와 padding속성이 지정됩니다.

content-box : 사용자가 작성하는 content크기를 200 x 200으로 지정합니다. paddint과 border의 크기를 더한 크기가 박스의 크기가 됩니다. 

즉 사용자가 지정한 width와 height값이 무엇을 기준으로 잡느냐에 따라 태그의 크기가 달라질 수 있습니다.

font-size 

ㄴ> px(가변크기) : 반응형 웹 구현을 할때, 페이지가 디스플레이되는 화면의 크기에 따라 폰트의 크기가 비율적으로 변하는 것입니다.

ㄴ> pt(고정크기) : 폰트의 크기가 고정되어 변하지 않는 속성입니다. 

font-weight : 폰트의 굵기를 저장합니다. 400:normal 700: bold 

 

[수평메뉴 만들기]

li는 블록요소이므로 자동으로 줄 바꿈이 되기 때문에, 메뉴를 수평으로 만들기 위해서는 li태그의 display속성을 inline-block으로 설정해주어야 합니다. 또한 <a>태그는 인라인 요소이기 때문에, li블록 요소에 꽉차게 지정하기 위해서는 display 속성을 block으로 지정하여 크기조절이 가능한 상태로 만들어야 합니다.

[기본 구조]

1
2
3
4
5
6
7
8
9
10
<hr>
    수평메뉴
<hr>
 
<ul id="main_menu">
    <!-- <a> : anchor(닿) tag -->
    <li><a href="https://www.naver.com">네이버</a></li>
    <li><a href="https://www.daum.net">다음</a></li>
    <li><a href="https://www.google.com">구글</a></li>
</ul>
cs

자식선택자 : 현재 태그에서 바로 밑에 있는 태그를 선택하는 선택자입니다.    

ㄴ> div > div [div태그 바로 밑에 있는 div태그]

자손선택자 : 현재 태그의 하위에 있는 모든 태그를 선택하는 선택자입니다.

ㄴ> div   div [div태그 밑에 있는 모든 div태그]  

hover        : 마우스가 해당 태그에 올라갔을 때 지정할 이벤트 속성입니다. 해당태그 바로 뒤에 ":hover"의 형식으로 작성합니다. 

ㄴ> div > a:hover [div태그의 바로 밑 자식태그 중 anchor태그에 마우스가 올라가는 경우]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
@charset "UTF-8";
 
ul#main_menu {
    list-style: none;
}
 
/* 하위(자식) 요소 지정 선택자(Selector) 
   
   부모 > 자식 : 부모 바로 밑에 자식(바로 밑에 하위 요소만 해당) -> 자식 선택자
   부모   자식 : 부모 밑에 모든 자식(모든 하위 요소) -> 자손 선택자
 
*/
ul#main_menu > li {
    display: inline-block; /*li가 블록 요소 이므로 줄 바꿈 없이 1줄에 표시하려고*/
    /* border: 1px solid red; */
    margin-right: 30px;
}
 
ul#main_menu > li > a {
    display: block;        /* a가 인라인 요소이므로 크기를 지정하기 위해서 */
    width: 100px;
    text-align: center;
    
    text-decoration: none;
    
    border: 1px solid orange;
    color: lime;
    
    font-weight: bold;
}
/* a tag에 올라가면 지정할 속성 */
ul#main_menu > li > a:hover{
    border: 1px solid red;
    color: blue;
}
 
 
cs

[새로 알게 된 TIP]

  1. html, JavaScript는 문자의 개념이 없고 모두 문자열이므로, '', ""둘다 사용가능하다.
  2. 코드를 수정하고 페이지를 새로고침할 때 반응속도가 느린 이유.
    1. 일반적으로 브라우저가 처리를 효과적으로 하기 위해서 가장 처음 한 번 접속했을 때, 전달받은 내용을 캐싱(저장)을 해놓습니다. 그 다음에 코드를 수정하고 두번째로 접속하여 새로고침을 하면 반영이 안되거나 느린 경우가 있습니다.
    2. 브라우저는 한 번 접속한 사용자에 대해 이전에 캐싱한 내용을 불러와서 사용자에게 제공하기 때문에 수정한 내용이 반영이 안 될수 있습니다. 따라서 수정한 내용을 바로 보기 위해서는 다음과 같은 방법으로 캐싱한 내용을 삭제해야 합니다.

크롬 설정 -> 개인정보 및 보안 -> 인터넷 사용기록 삭제(방문기록, 쿠키, 캐시 등을 삭제합니다.)

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

JSP_국비_DAY46  (0) 2022.05.04
국비_DAY45  (0) 2022.05.03
국비_DAY44  (0) 2022.05.02
HTML_FORM_TAG_국비_DAY42  (0) 2022.04.28
HTML_국비_DAY41  (0) 2022.04.27