[Html/Css] 기초 정리

 

 

기본 글씨 서체
font-size : 20px; /*글자 크기*/
font-family : 'gulim'; /*서체*/
color : black; /*글자 색*/
letter-spacing : -1px; /*자간*/
text-align : center; /*글자 정렬 위치*/
font-weight : 600; /*글자 굵기*/

 

 

가운데 정렬
display : block;
margin-left : auto;
margin-right : auto;

 

 

* span과 p의 차이

span = inline 속성 -> 요소의 폭 높이 등 설정 불가 (기본적으로 display:inline;)

p = block 속성 -> 요소의 폭 높이 등 설정 가능 (기본적으로 display:block;)

 

 

네모 박스 디자인 속성
width: 200px; /*너비*/
background-color: cadetblue; /*배경색*/
margin: 10px; /*여백*/
padding: 40px; /*안쪽 여백*/
border: 4px solid black; /*테두리 (두께 종류 색상)*/
border-radius: 5px; /*테두리 둥글게*/

 

 

* inherit

일부 속성은 상속이 가능하다. 예를 들어 글자와 관련된 스타일들이 주로 inherit 된다.

 

 

레이아웃 만들기

기본적으로 header, navbar, content, footer로 나눈다. (공통적으로 div -> block 속성)

 

  • float 사용
.container{
    width: 1000px;
} /* 해당 레이아웃의 흘러넘침을 방지하는 감싸는 컨테이너*/

.header{
    width: 100%; /*부모 요소의 style의 %를 따름*/
    height: 100px;
    background-color: black;
}

.navbar{
    width: 20%;
    height: 400px;
    background-color: red;
    float: left; /* 해당 요소를 공중에 띄워서 left 정렬*/
}

.content{
    width: 80%;
    height: 100px;
    background-color: blue;
    float: left; /* 해당 요소를 공중에 띄워서 left 정렬*/
}

.footer{
    width: 100%;
    height: 100px;
    background-color: yello;
    clear: both; /* float 속성으로 인해 공중에 뜬 태그들의 다음으로 정렬하기 위해 사용*/
}

 

 

  • inline-block 사용
.container{
    width: 1000px;
} /* 해당 레이아웃의 흘러넘침을 방지하는 감싸는 컨테이너*/

.header{
    width: 100%; /*부모 요소의 style의 %를 따름*/
    height: 100px;
    background-color: black;
}

.navbar{
    width: 20%;
    height: 400px;
    background-color: red;
    display: inline-block; /*inline-block 속성 추가*/
    vertical-align: top; /* inline 요소에 사용*/
}

.content{
    width: 80%;
    height: 100px;
    background-color: blue;
    display: inline-block; /*inline-block 속성 추가*/
}

.footer{
    width: 100%;
    height: 100px;
    background-color: yello;
}

 

* display: block; = 한 행을 전부 차지 함.

* display: inline-block; = 내 크기 만큼 차지 함.

 

*** inline-block는 html의 태그 간에 띄어쓰기(공백)가 생기면 그대로 공백이 반영 된다. ***

 

 

  - 해결 1) 태그 사이에 공백을 제거한다. (사실 상 안쓰는게 나음)

<div class="navBar"></div><div class="content"></div>

 

  - 해결 2) 주석을 사용한다.

<div class="navBar"></div><!--
--><div class="content"></div>

 

  - 해결 3) 부모의 폰트 사이즈 0으로 만들기

<div style="font-size: 0px;">
	<div class="navBar"></div>
	<div class="content"></div>
</div>

 

 

* inline or inline-block 속성을 사용하게되면 vertical-align: top; 태그를 사용한다.

vertical-align을 사용하는 이유는 inline 속성의 주변에 글씨를 쓸 때 baseline이 존재할 경우, baseline 위 쪽에 오려고 하기때문에 vertical-align으로 위치를 지정해 주어야 한다.

 

 

셀렉터
.content li{} /* 자식의 요소 전부 다 */
.content > li{} /* 직계 자식 요소 만 */
<div class="content title"></div> <!-- 클래스 여러개 부여 -->

 

 

 

 

배경
.background {
  background-image : url(../img.jpg); /*배경 이미지 url*/
  background-size : cover; /*배경 크기 cover: 꽉 채움, contain: 배경이 안짤리게 꽉 채움*/
  background-repeat : no-repeat; /*배경 이미지 반복 안함*/
  background-position : center; /*배경 위치*/
  background-attachment : fixed; /*스크롤 시 고정효과*/
  /*filter 속성을 사용하면 더욱 스타일 효과를 줄 수 있음*/
}

 

*margin collapse

두개의 박스에 테두리가 겹치면 하나의 박스에 스타일을 부여했을 시 같이 움직이는 현상.

 - 해결: padding을 1px 준다.

 

 

좌표 레이아웃 설정
.box {
  position: relative; /*좌표 속성의 기준 점*/
  top : 20px; /*위에서 20px*/
  left : 30%; /*왼쪽에서 30%*/
}

 

* position

 - 좌표 이동을 가능하게 한다.

 - 공중에 뜬다 (like float)

 

.box {
  position : static; /* 기준이 없음 (기본 값) */
  position : relative; /* 기준 */
  position : absolute; /* 기준이 부모 중 relative 속성이 있는 것 */
  position : fixed; /* 기준이 브라우저 창 (viewport) */
}

 

 - position: absolute 일 때, 가운데 정렬하기

.button {
  position : absolute; 
  left : 0;
  right : 0; 
  margin-left : auto;
  margin-right : auto;
  width : 아무값이나
}

 

 

max-width & box-sizing

* max-width

 - 기본적으로 width와 같이 사용. width 값을 %로 지정 해놓고 max-width 값을 설정하면 창이 커질 때 최고 width 값이 max-width 값으로 정해진다. (min-width는 반대)

 

* box-sizing

div {
  box-sizing : border-box; /*박스의 폭은 border까지 포함*/
  box-sizing : content-box; /*박스의 폭은 padding 안쪽*/
}

content-box의 width는 margin, padding, border를 포함 하지 않은 값으로 해당 하는 값이 더 해진 값이 box 값이지만 border-box는 해당 하는 값과 width 값의 총 합이 설정한 값이 된다.

 

 

vertical-align 상하정렬 속성

- 테이블

td, th {
  vertical-align : middle;
}

 

- inline 요소

span {
	vertical-align: top;
    vertical-align: super;
    vertical-align: middle;
    vertical-align: sub;
    vertical-align: bottom;
}

 

 

div 태그 table로 바꾸기
.box {
  display : table;
  display : table-row;
  display : table-cell;
}

 

 

Pseudo-class 셀렉터
:any-link /*방문 전, 방문 후 링크 한번에 선택할 때*/
:playing /*동영상, 음성이 재생중일 때*/
:paused /*동영상, 음성이 정지시*/
:autofill /*input의 자동채우기 스타일*/
:disabled /*disabled된 요소 스타일*/
:checked /*체크박스나 라디오버튼 체크되었을 때*/
:blank /*input이 비었을 때*/
:valid /*이메일 input 등에 이메일 형식이 맞을 경우*/
:invalid /*이메일 input 등에 이메일 형식이 맞지 않을 경우*/
:required /*필수로 입력해야할 input의 스타일*/
:nth-child(n) /*n번째 자식 선택*/
:first-child /*첫째 자식 선택*/
:last-child /*마지막 자식 선택*/

* hover, focus, active 스타일의 순서 -> 차례로 적용해야 작동이 잘 됨.

 

 

OOCSS, BEM

 - OOCSS

btn {
  font-size : 10px;
  padding : 8px;
  border : none;
  cursor : pointer;
}

.bg-red {
  background : red;
}
.bg-blue {
  background : blue;
}
<button class="btn bg-red">빨간버튼</button>
<button class="btn bg-blue">파란버튼</button>

 

 

 - BEM(Block__Element--Modifier)

<div class="main">
  <img class="main__img">
  <h4 class="main__h1">이름</h4>
  <p class="main__content">소개글</p>
  <button class="main__button--red">빨간버튼</button>
  <button class="main__button--blue">파란버튼</button>
</div>

 

'Html&Css' 카테고리의 다른 글

[Html/Css] 고급 정리 (SASS)  (0) 2021.11.17
[Html/Css] 중급 정리  (0) 2021.11.15

[WEB] HTTP와 서블릿(Servlet) 요청(Request), 응답(Response)

 

 

클라이언트와 서버간에 인터넷 통신을 하는 것을 웹 통신이라고 하며, 이러한 웹은 HTTP기반으로 이루어진다. HTTP는 HTML, TEXT 등과 IMAGE, 음성, 영상 파일 등의 다양한 형태의 데이터를 전송할 수 있다.

 

이러한 HTTP를 기반으로 하는 서버에는 WEB서버와 WAS(Web Application Server)서버가 있는데 이 서버의 특징은 아래와 같다.

 

 

- 웹 서버(Web Server)

  • HTTP 기반으로 동작한다.
  • 정적 리소스(HTML, CSS, JS, 이미지, 사진, 영상 등) 제공
  • 예로 APACHE, NGINX 등이 있다.

 

- 웹 애플리케이션 서버(WAS - Web Application Server)

  • HTTP 기반으로 동작한다.
  • 웹 서버 기능을 포함한다. (정적 리소스 제공 가능)
  • 프로그래밍 코드를 실행해서 애플리케이션 로직을 수행한다.
  • 동적 리소스(HTML, HTTP API, 서블릿, JSP 등) 수행
  • 예로 Tomcat, Jetty, Undertow 등이 있다.

 

웹 시스템의 구성

 

기본적으로 웹 시스템의 구성은 정적 리소스는 WEB서버에서 동적(애플리케이션) 리소스는 WAS에서 관리하며 로직 등을 통해 DB 서버와 데이터를 송, 수신 한다.

 

여기서 Client가 WAS와 통신을 할 때, HTTP 메세지를 기반으로 통신한다. HTTP의 메세지는 기본적으로 시작 라인(start-line)과 헤더(header), 메세지 바디(message body), 헤더와 메세지 바디 사이에 공백라인(empty line, CRLF)로 구성된다.

 

- HTTP 요청메세지 시작 라인

  • HTTP 메서드(GET, POST, PUT, PATCH, DELETE)
  • 요청 대상 (/path[?query&parameter=value])
  • HTTP 버전

 

- HTTP 응답메세지 시작 라인

  • HTTP 버전
  • HTTP 상태코드 (200: 성공, 400: 클라이언트 오류, 500: 서버 오류)

 

- HTTP 메세지 헤더

  • HTTP 전송에 필요한 모든 부가정보 (메세지 바디의 내용, 크기, 압축, 인증, 요청 클라이언트 정보 등)

 

- HTTP 메세지 바디

  • 실제 전송할 데이터 (HTML, 이미지, 영상, JSON 등 byte로 표현 할 수 있는 모든 데이터 전송)

 

 

Client와 Server가 통신하면서 수행하려고 했던 의미있는 비즈니스 로직을 제외한 TCP / 소켓 연결, HTTP 메세지 파싱, 서버 기능 프로세스 실행 등 서버해서 설정해야 할 처리들이 있는데 이 설정들은 비슷하게 반복적이고 양도 많기 때문에 서블릿(Servlet)을 사용한다.

 

서블릿(Servlet)은 Client가 Server에 HTTP를 통한 요청과 응답 정보를 편리하게 사용하고 제공 받을 수 있게 해준다. 서블릿을 이용하면 Request와 Response 객체를 사용 할 수 있는데 이 객체를 통하여 HTTP 요청, HTTP 응답 메세지를 편하게 가져오고 입력할 수 있다.

 

 

@WebServlet(name = "testServlet", urlPatterns = "/test")
public class TestServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       // 비즈니스 로직
    }

위와 같은 서블릿을 사용하게 되면 Client와 Server의 통신간에 설정해야 할 처리들을 알아서 설정해주고 의미있는 비즈니스 로직 부분만을 구현 할 수 있다.

 

@WebServlet에서 해당 urlPattern의 URL이 호출되면 service메서드의 비즈니스 로직 부분이 실행되고 HttpServletRequest 객체를 통해 HTTP 요청 정보를 사용 할 수 있으며 HttpServletResponse 객체를 통해 HTTP 응답 정보를 제공 할 수 있다.

 

+ Recent posts