배운 내용들 다시 복기
http://localhost:8080/htmlcssjs 에서 htmlcssjs가 왜 자동으로 붙는지?
초기에 src/main/resources → spring/dispatcher 폴더의 view_resorver에 아래와 같이 세팅되었기 때문이다.
<context:component-scan base-package="com.mycompany.htmlcssjs">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
context의 base-package에 htmlcssjs로 지정해주었기 때문.
밑의 코드는 Controller의 한 부분이다.
@RequestMapping("/exam10_float_layout") // 이것은 도메인 주소를 나타냄
public String exam10FloatLayout() {
log.info("exam10_float_layout() 실행"); // 도메인 요청이 들어오면 이 메소드가 실행된다.
return "css/exam10_float_layout"; // (/WEB-INF/views/)생략 css/exam10_float_layout --> 파일 경로를 나타낸 것이기 때문에 정확하게 기입해야 한다 (JSP파일명과)
}
@RequestMapping은 도메인 주소를 나타낸다고 보면 된다.
http://localhost:8080/htmlcssj 이후에 "/exam10_float_layout"를 입력받게 되면 exam10FloatLayout 메소드가 실행이 된다. log.info("메시지")는 이 메소드가 실행이 될 때 콘솔창에 메시지를 출력하게 되고, return "css/exam10_float_layout" 이 부분은 (/WEB-INF/views/) css폴더 아래 exam10_float_layout파일을 해당 브라우저의 화면에 보여주게 되는 것이다.
(return 부분은 파일 경로를 나타낸 것. 정확하게 기입해야한다. 파일은 JSP파일)
● /WEB-INF/views/ 부분은 왜 생략해도 되는건지?
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
prefix는 접두사를 표현하며 이는 초기 설정으로 /WEB-INF/views/ 이것이 앞에 붙는다는 것이다.
suffix는 접미사로 .jsp를 붙인다는 의미이다.
저번 시간 float 학습에 이어서 수업 시작.
■ 레이아웃
오늘은 화면의 전체적 구성을 공부한다.
<header>, <section>, <article> 태그 등 <div>와 같은 역할을 한다. 그런데 태그 이름이 왜 다를까?
→ 해당 태그의 의미를 담은 내용을 넣어주면 해당 HTML을 분석하기 쉽고 여러모로 좋기 때문.
<nav>를 붙이는 이유?
→ 네비게이션을 뜻하고 주로 메뉴를 감싸는 용도로 쓴다.
<article>은 <nav>에 따른 내용이기 때문에 <nav> 밑이나 중앙에 편성되거나 한다.
익숙하지 않고 일단 어떻게 쓸지 모르겠다면 <div>를 사용하자.
★ 프로젝트 시 W3School 문서 Block & Inline 정보를 보며 태그의 이름을 확인해보자.
화면을 구성하는 작업에 있어서 해당 태그의 영역을 확인해보려면 border를 이용해보자.
nav {
border: 1px solid yellow; // 경계선을 나타내준다.
float: left;
width: 29%;
}
article {
border: 1px solid black; // 경계선을 나타내준다.
float: left;
width: 69%;
}
● box sizing
너비 + 패딩 + 테두리 = 요소의 실제 너비
높이 + 패딩 + 테두리 = 요소의 실제 높이
요소의 너비/높이를 설정할 때 요소가 설정한 것보다 더 크게 나타나는 경우가 많다.
(요소의 테두리와 패딩이 요소의 지정된 너비/높이에 추가되기 때문)
box-sizing 속성을 사용하면 요소의 전체 너비와 높이에 패딩과 테두리를 포함할 수 있다.ex) box-sizing: border-box;
● flex
#wrapper{
display: flex;
flex-direction: row;
height: 300px;
align-items: flex-end;
justify-content: center;
}
id가 wrapper인 <div>태그에 css를 적용한 예이다.
row일 때와 column일 때의 align-items는 수직 정렬이냐 수평 정렬이냐 달라진다.
row일 때와 column일 때의 justify-content는 수직 정렬이냐 수평 정렬이냐 달라진다.
* flex-grow → 비율을 나타낸다.
ex) 다음 세개의 태그들은 wrapper 되어있다.
#div1 {
width: 100px;
height: 100px;
flex-grow: 1;
}
#div2 {
width: 100px;
height: 100px;
flex-grow: 3;
}
#div3 {
width: 100px;
height: 100px;
flex-grow: 1;
}
→ (전체 너비나 높이에서 = row로 표현되느냐, column으로 표현되느냐에 따라 달라짐) div1은 1/5, div2는 3/5, div3은 1/5를 차지하게 된다.
# float을 사용할 때와 flex를 사용할 때는 어떤 기준으로 사용해야 할까?
→ 앞으로 직접 사용하며 확인해보자!
# flex의 추가기능?
flex-grow, flex-shrink, flex-basis
→ 이 기능들이 합쳐져 flex: 값; 으로 사용하는 식으로 바뀌었다. 앞으로 비율 배치는 flex만으로 사용하자.
★ Bootstrap
세계에서 가장 유명한 CSS 프레임워크!
W3School에서의 부트스트랩 튜토리얼은 보기가 편하고 간단히 사용해볼 수 있다.
부트스트랩 사이트에서는 초심자가 보기는 불편하지만 내용이 풍부하다.
https://www.w3schools.com/bootstrap5/bootstrap_get_started.php
사용 예시)
<div class="container-fluid p-5 bg-primary text-white text-center">
.container-fluid{ ... }
.p-5 { ... }
.bg-primary { ... }
.text-white { ... }
.text-center { ... }
이런식으로 클래스 이름으로 미리 정의해둔 css를 적용할 수 있다!!
빠르게 HTML문서 구조를 가져온 다음 클래스 이름으로 수정하여 변형 가능하다는 것이다.
# 부트스트랩 사용 방법
● CDN으로 사용하기
<!-- Latest compiled and minified CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
→ 미리 만들어 놓은 css를 참조한다는 코드 (이 코드를 넣어야 부트스트랩 css를 사용할 수 있다)
<!-- Latest compiled JavaScript -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
→ 미리 만들어 놓은 script를 참조한다는 코드 (이 코드를 넣어야 부트스트랩 반응형 script를 사용할 수 있다)
● 다운로드하여 사용하기
→ src 부분에 다운받은 css파일과 js파일의 경로를 넣어주면 된다.
# cdn을 가져와서 사용하는 것이 좋을까, 다운로드 받아 사용하는 것이 좋을까?
상황에 따라 다르다.
만약, cdn으로 외부에서 참조하여 가져오는 경우 그 외부 파일이 깨지거나 끌어오지 못하게 되는 상황이 된다면 불안정해진다.
따라서 다운로드 받아 사용하는 것이 안정적이다.
반대의 경우,
나의 파일의 크기가 커지는 경우라면 (엄청 큰 가정하에) 속도가 느려질 수 밖에 없다.
나의 웹 서버가 무거워진다는 뜻이다. 그럴 땐 외부에서 참조받아 사용하는 것이 유리할 수 있다.
이 경우엔 HTML만 넘겨주면 되기 때문이다.
ex) 한국 ↔ 미국
HTML (파일 크기 1) + CSS, JS (파일 크기 10) → 넘겨줌
기본적으로 통신거리가 멀기 때문에 통신 지연이 있기 때문에,
전세계적으로 운용하는 웹 서버인 경우에는 CDN이 더 빠르다. (더 적합하다)
● row, column
한 행을 row라고 표현한다. 한 행에는 열(column)이 들어갈 수 있는데, 한 열의 크기가 '1'이라면 총 12개의 열을 배치할 수 있다. (부트스트랩은 한 행 전체 열의 가로 비율을 12비율로 나눈다.)
row는 하나의 행을 의미하고 한 row에 column은 12등분이 되어 구성된다.
ex) div class="col-sm-6 col-md-4"
→ 스몰범위에 있다면 6등분을 차지하고, 미디움범위내에 있다면 4등분을 차지한다라는 뜻
★ 그리드 표기 방식
→ 규격은 정해져있고 이 규격을 얼마나 잘 활용하느냐에 따라 사이트의 완성도가 올라간다!
● .container 를 적용했을 때
도큐먼트 규격대로 컨테이너의 규격이 알맞게 구성된다.
container-fluid → 전체(브라우저 창의 최대) 사이즈로 늘려준다.
● typography
.text-start // 왼쪽에서부터
.text-end // 오른쪽에서부터
.text-center // 가운데
● 기본 브라우저의 h1~h6 태그의 크기와 부트스트랩의 h1~h6의 크기는 다르다.
부트스트랩을 적용하게 되면 기본 여백도 사라져 있다.
★ Spacing
https://www.w3schools.com/bootstrap5/bootstrap_utilities.php
The classes are used in the format: {property}{sides}-{size} for xs and {property}{sides}-{breakpoint}-{size} for sm, md, lg, xl and xxl.
Where property is one of:
m - sets margin
p - sets padding
Where sides is one of:
t - sets margin-top or padding-top
b - sets margin-bottom or padding-bottom
s - sets margin-left or padding-left
e - sets margin-right or padding-right
x - sets both padding-left and padding-right or margin-left and margin-right
y - sets both padding-top and padding-bottom or margin-top and margin-bottom
blank - sets a margin or padding on all 4 sides of the element
Where size is one of:
0 - sets margin or padding to 0
1 - sets margin or padding to .25rem
2 - sets margin or padding to .5rem
3 - sets margin or padding to 1rem
4 - sets margin or padding to 1.5rem
5 - sets margin or padding to 3rem
auto - sets margin to auto
'JAVA' 카테고리의 다른 글
25일차 2024 - 4 - 1 (0) | 2024.04.01 |
---|---|
24일차 2024 - 3 - 29 (2) | 2024.03.29 |
22일차 2024 - 3 - 27 (0) | 2024.03.27 |
21일차 2024 - 03 - 26 (0) | 2024.03.26 |
20일차 2024 - 3 - 25 (Spring 시작) (1) | 2024.03.25 |