no image
[JavaScript] JavaScript에서 알아두어야 할 기본 용어
이 글은 혼자공부하는 자바스크립트(저자 : 윤인성)의 책 내용과 유튜브 동영상을 참고하여 개인적으로 정리하는 글임을 알립니다. JS는 인터프리터 언어이다. 표현식과 문장 표현식 : 값을 만들어내는 코드 문장 : 하나 이상의 표현식이 모인 것, 문장 끝에는 세미콜론 또는 줄바꿈으로 문장이 종결되었음을 표현 자바스크립트에서 값을 만들어내는 코드를 표현식이라고 부른다. 273 10 + 20 + 30 + 2 'ReBugs' 하나 이상의 표현식이 모이면 문장이 된다. 문장 끝에는 마침표를 찍듯이 세미콜론 또는 줄바꿈을 넣어서 문장이 종결되었음을 알려준다. 키워드와 식별자 키워드 자바스크립트가 처음 만들어질 때 정해놓은 특별한 의미가 있는 단어를 키워드라고 한다. 식별자 식별자는 프로그래밍 언어에서 이름을 붙일 때..
2024.01.12
no image
[Spring] 스프링 프로젝트 생성
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 개발환경 Windows 11 pro IntelliJ 23.3.2 JDK 17 작성일 24년 1월 환경 변수 설정 JAVA_HOME 환경 변수 - 시스템 변수 - 새로 만들기 시스템 변수 편집에서 변수 이름은 JAVA_HOME, 변수 값은 JDK의 설치 경로로 잡는다. 확인 버튼을 누른다. CLASSPATH 다시 시스템 변수에서 새로 만들기를 클릭한다. 변수 이름은 CLASSPATH, 변수 값은 %JAVA_HOME%\lib 로 설정한다. 확인 버튼을 누른다. Path 환경 변수 편집 시스템 변수 - Path - 편집 버튼을 눌러서 환경 변수 편집 창을 띄운다. 새로 만들기 버튼으로 %JAVA_HOME%\bin를 ..
2024.01.11
no image
[JSP] JSTL(JSP Standard Tag Library)
실행환경 windows 11 pro IntelliJ : 23.3.2 Apache Tomcat : 9.0 JDK : 17.0.9 라이브러리 추가 JSTL이란 JSP Standard Tag Library를 뜻한다. 먼저 JSTL JAR 파일을 받아야 한다. 아래의 링크에서 다운로드를 진행해야 한다. https://mvnrepository.com/artifact/javax.servlet/jstl/1.2 빨간색으로 표시된 부분을 클릭해서 jar 파일을 다운로드 받자. 인텔리제이로 돌아와서 Project Structure를 클릭한다. modules - 해당 프로젝트 선택 후 오른쪽에 보이는 +(Add) 버튼을 클릭한다. 이후 JARs or Dircetories.. 버튼을 눌러서 아까 다운로드 받은 JAR 파일을 ..
2024.01.10
no image
[JSP] IntelliJ에서 Servlet 생성
개발환경 windows 11 pro jdk : 17.0.9 Apache Tomcat : 9.0 intelliJ : 2023.3.2 프로젝트에서 new 를 할 때 서블릿 추가 버튼이 없는 사람을 위한 글이다. Servlet 생성 새로운 프로젝트를 생성한다. Add Frameworks Support에서 Java EE 에서 아래 부분을 체크하고 apply - ok 를 누른다. Project Structure - Libraries - +버튼 - From Maven을 누른다. 톰캣 9.0 기준 javax.servlet:javax.servlet-api:4.0.1 를 검색한다(오른쪽 검색버튼을 누르고 기다리면 됌) 프로젝트를 선택하고 ok를 누른다. servlet api가 추가된 것을 확인하고 apply - ok 버..
2024.01.09
no image
IntelliJ에서 Database(MySQL, Oracle) 연결하기
개발 환경 windows 11 pro jdk : 17.0.9 mysql : 8.0.35 oracle : 19.3.0 intelliJ : 2023.3.2 데이터베이스 연결하기 우측 상단의 톱니바퀴 모양을 클릭하고 Project Structure 클릭 Libraries - +버튼 - Java 클릭 JDBC가 있는 폴더에서 jar 파일 클릭 mySQL, Oracle 각각 JAR이 다르니 검색해서 버전에 맞는거 다운로드 하세요 프로젝트 선택후 ok 버튼 클릭 정상적으로 추가된 것을 확인했으면, ok 버튼이나 apply 버튼 클릭 이제 데이터베이스와 연결할 준비가 끝났다. 또 다른 방법 우측 끝에서 Database 아이콘 클릭 + 버튼 클릭 Data Source - 원하는 데이터 베이스 클릭 MySQL - MyS..
2024.01.09
no image
IntelliJ Address localhost 1099 already in use 오류 해결
문제상황 이미 1099 포트가 사용되고 있다 (백그라운드에서 작동되고 있어서 그런 것으로 추정) 이클립스에서는 자동으로 종료가 됐는데, intelliJ에서는 그게 불가능한 것 같다. 문제 해결 cmd에서 아래의 명령어를 입력한다. netstat -ano| find "1099" 현재 1099 포트를 사용하고 있는 프로세스 PID가 우측에 나타난다. 문제의 PID는 12892 이제 작업관리자로 해당 PID를 검색해서 삭제해야 한다. 작업 끝내기를 누르면 해결 완료
2024.01.08
no image
[JSP] IntelliJ 에서 JSP 개발환경 만들기
개발 환경 windows 11 pro jdk : 17.0.9 Apache Tomcat : 10.1.17 intelliJ : 2023.3.2 IntelliJ에서 JSP 개발환경 초기 설정 인텔리제이를 실행하고 프로젝트를 만든다. 우측 상단에 돋보기 버튼을 누른다. add framework support 를 검색하고 클릭한다. Java EE - web applition을 체크하고 Create web.xml 도 체크하고 ok를 누른다. 이후 우측 상단의 current file 의 드랍다운 박스를 눌러서 Edit configurations...를 누른다. 아래와 같은 화면이 나오면 왼쪽 상단의 + 버튼을 누른다. 이후 Tomcat Server - Local을 누른다. Application server에서 Con..
2024.01.08
no image
[CSS] CSS 필수 속성(배경 속성, 위치 속성, 애니메이션 속성)
이 글은 코딩 자율학습 HTML+CSS+JS(저자 : 김기수)의 책 내용과 유튜브 영상을 개인적으로 정리하는 글입니다. 배경 속성 background-color 속성 요소의 배경에 색상을 넣을 수 있다. 속성 값으로는 색상값을 사용하면 된다. background-image 속성 요소의 배경에 해당 속성을 사용하면 이미지를 넣을 수 있다. 속성 값은 삽입할 이미지의 경로를 url() 함수로 지정하면 된다. 요소의 배경 크기가 반드시 지정되어야 한다. 이미지의 크기가 요소의 배경크기와 맞아야 한다. -요소의 배경이 이미지 크기보다 작으면 잘린다. -요소의 배경이 이미지 크기보다 크면 이미지 패턴이 반복된다. backgrount-repeat 속성 요소의 배경 크기가 삽입하려는 이미지보다 크면 이미지를 자동으로..
2024.01.07

이 글은 혼자공부하는 자바스크립트(저자 : 윤인성)의 책 내용과 유튜브 동영상을 참고하여 개인적으로 정리하는 글임을 알립니다.


JS는 인터프리터 언어이다.

표현식과 문장

  • 표현식 : 값을 만들어내는 코드
  • 문장 : 하나 이상의 표현식이 모인 것, 문장 끝에는 세미콜론 또는 줄바꿈으로 문장이 종결되었음을 표현

 

자바스크립트에서 값을 만들어내는 코드를 표현식이라고 부른다.

273
10 + 20 + 30 + 2
'ReBugs'

 

하나 이상의 표현식이 모이면 문장이 된다.

문장 끝에는 마침표를 찍듯이 세미콜론 또는 줄바꿈을 넣어서 문장이 종결되었음을 알려준다.

 

키워드와 식별자

키워드

자바스크립트가 처음 만들어질 때 정해놓은 특별한 의미가 있는 단어를 키워드라고 한다.

 

식별자

식별자는 프로그래밍 언어에서 이름을 붙일 때 사용하는 단어이다.

주로 변수명이나 함수명 등으로 사용된다.

식별자를 만들 때는 다음 규칙을 따라야 한다.

  • 키워드를 사용하면 안 된다.
  • 숫자로 시작하면 안 된다.
  • 특수 문자는 _와 $만 허용
  • 공백 문자를 포함할 수 없음

 

일반적으로 자바스크립트에서 식별자를 만드는 규칙이 있다.

  • 클래스의 이름은 항상 대문자로 시작
  • 변수와 인스턴스, 함수, 메소드의 이름은 항상 소문자로 시작
  • 여러 단어로 이루어진 식별자는 각 단어의 첫 글자를 대문자 한다.(Camel Case)
구분 단독으로 사용 다른 식별자와 사용
식별자 뒤에 괄호 없음 변수 속성
식별자 뒤에 괄호 있음 함수 메소드

 

출력

경고창 출력하기

파일을 만들었을 때 가장 기본적인 자바스크립트의 출력 방법은 alert() 함수를 사용하는 것이다.

해당 함수를 사용하면 웹 브라우저에 경고창을 띄울 수 있다.

<script>
  alert("경고!")
</script>

 

콘솔에 출력하기

콘솔에 출력을 하려면 console.log()를 이용한다.

<script>
  console.log("Hello World!")
</script>

콘솔 출력 결과는 웹 페이지에서 F12를 눌러 개발자도구에 들어가면 확인할 수 있다.

'JavaScript Category > JavaScript' 카테고리의 다른 글

[JavaScript] 객체(Object)  (0) 2024.01.16
[JavaScript] 함수  (1) 2024.01.15
[JavaScript] 반복문  (0) 2024.01.14
[JavaScript] 배열(Array)  (0) 2024.01.14
[JavaScript] 자료형, 상수와 변수, 자료형 변환  (1) 2024.01.13

이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.


개발환경

  • Windows 11 pro
  • IntelliJ 23.3.2
  • JDK 17
  • 작성일 24년 1월

 

환경 변수 설정

JAVA_HOME

  1. 환경 변수 - 시스템 변수 - 새로 만들기
  2. 시스템 변수 편집에서 변수 이름은 JAVA_HOME, 변수 값은 JDK의 설치 경로로 잡는다.
  3. 확인 버튼을 누른다.

 

CLASSPATH

  1. 다시 시스템 변수에서 새로 만들기를 클릭한다.
  2. 변수 이름은 CLASSPATH, 변수 값은 %JAVA_HOME%\lib 로 설정한다.
  3. 확인 버튼을 누른다.

 

Path 환경 변수 편집

  1. 시스템 변수 - Path - 편집 버튼을 눌러서 환경 변수 편집 창을 띄운다.
  2. 새로 만들기 버튼으로 %JAVA_HOME%\bin를 추가한다.
  3. 방금 추가한 환경 변수를 가장 위로 올린다.
  4. 확인 버튼을 누른다.

 

 

프로젝트 생성

이제 프로젝트를 만들면 된다.

아래의 사이트에 접속한다.

https://start.spring.io

24.01.08일 기준으로 3.2.1 버전이 가장 최신 버전이다.

Dependencies에 Spring Web과 Thymeleaf를 추가해준다.

이후 Generate 버튼을 누른다.

 

다운로드 받은 파일을 원하는 위치로 이동시킨다.

그리고 압축을 해제한다.

 

IntelliJ IDE를 킨다.

새로운 프로젝트를 생성하는 것이 아니라 Open 버튼을 누른다.

 

아까 다운로드 받은 파일의 경로로 들어가서 build.gradle 파일을 선택하고 ok 버튼을 누른다.

 

아래와 같은 창이 뜨면, Open as Project 버튼을 누른다.

 

src - main - java - 폴더 밑에 아래와 같은 자바 파일이 보일 것이다.

 

해당 클래스를 실행하면 콘솔창이 아래와 같이 된다.

 

이제 웹 브라우저에서 localhost/8080에 접속하면 아래와 같은 화면이 뜬다.

오류 페이지가 아니다. 이 화면이 떠야 문제없이 잘 된 것이다.

실행환경

  • windows 11 pro
  • IntelliJ : 23.3.2
  • Apache Tomcat : 9.0
  • JDK : 17.0.9

 

라이브러리 추가

JSTL이란 JSP Standard Tag Library를 뜻한다.

먼저 JSTL JAR 파일을 받아야 한다.

아래의 링크에서 다운로드를 진행해야 한다.

https://mvnrepository.com/artifact/javax.servlet/jstl/1.2

 

빨간색으로 표시된 부분을 클릭해서 jar 파일을 다운로드 받자.

 

인텔리제이로 돌아와서 Project Structure를 클릭한다.

 

modules - 해당 프로젝트 선택 후 오른쪽에 보이는 +(Add) 버튼을 클릭한다.

이후 JARs or Dircetories.. 버튼을 눌러서 아까 다운로드 받은 JAR 파일을 추가해준다.

 

apply - ok를 누른다.

 

JSTL 라이브러리

라이브러리 기능 접두어
코어 일반 프로그램 언어에서 제공하는 변수선언, 조건/제어/반복문등의 기능을 제공한다. c
포맷팅 숫자,날짜,시간을 포맷팅 하는 기능과 국제화, 다국어 지원 기능을 제공한다. fmt
함수 문자열을 처리하는 함수를 제공한다.  fn
데이터베이스 데이터베이스의 데이터를 입력/수정/삭제/조회하는 기능을 제공한다. sql
XML처리 XML 문서를 처리할 때 필요한 기능을 제공한다. x
<!--아래의 코드는 JSP에서 코어 태그라이브러리를 사용할 때 작성해야 한다.-->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

 

JSTL 문법

연산자 예제 결과내용
c:url url 호출 
<c:url value="test.jsp"/>
<c:url value="/test.jsp" context="/other"/>
c:out 객체를 화면에 출력 
<c:out value="${data}"/>
<c:out value="${data}" default="값없음"/>
c:set  저장영역에 객체를 저장 
<!-- scope : page, request, session, application -->
<c:set scope="request" var="data" value="my_testValue" />
c:forEach  반복문 제어
<c:forEach var="NOTICE" items="${NOTICE_LIS}" varStatus="status">
<c:out value="${NOTICE.COLUMN}"/>
</c:forEach>
 
<!-- 0123456 -->
<c:forEach var="S" begin="0" end="6">
<c:out value="${S}"/>
</c:forEach>
 
<!-- 036 -->
<c:forEach var="S" begin="0" end="6" step="3">
<c:out value="${S}"/>
</c:forEach>
c:remove  저장영역에서 객체를 삭제  <c:remove scope="request" var="data" />
c:if  조건문 제어
<c:if test="${empty data}">
data 값이 비어있으면 실행
</c:if>
c:choose
c:when
c:otherwise 
복합조건문 제어
<c:choose>
<c:when test="${data == 'A'}">data 값이 A이면 실행</c:when>
<c:when test="${data == 'B'}">data 값이 B이면 실행</c:when>
<c:when test="${data == 'C'}">data 값이 C이면 실행</c:when>
<c:otherwise>data 값이 A, B, C값이 아닐 경우 실행</c:otherwise>
</c:choose>
c:import!  다른 JSP 화면을 현재 화면에 출력 <c:import! url="test.jsp"/>
c:redirect  경로 이동 <c:redirect url="주소"/>

 

status 상태 속성 제어

< c:foreach items=”${RESULT}” var=”RESULT” varStatus=”status”>
 
    ${status.current}<br/> <!– 현재 아이템 –>
    ${status.index}<br/>   <!– 0부터의 순서 –>
    ${status.count}<br/>   <!– 1부터의 순서 –>
    ${status.first}<br/>   <!– 현재 루프가 처음인지 반환 –>
    ${status.last}<br/>    <!– 현재 루프가 마지막인지 반환 –>
    ${status.begin}<br/>   <!– 시작값 –>
    ${status.end}<br/>     <!– 끝값 –>
    ${status.step}<br/>    <!– 증가값 –>
 
< /c:forEach>

 

JSTL for문

인덱스로 접근

<c:forEach var="i" begin="1" end="5" step="1" varStatus="status">
    번호 : ${status.count}
    이름 : ${item[i].name}
    직업 : ${item[i].job}
    급여 : ${item[i].salary}
</c:forEach>

 

begin과 end로 접근

<c:forEach var="item" items="${list}" begin=0 end=5 step=1 varStatus="status">
    번호 : ${status.count}
    이름 : ${item.name}
    직업 : ${item.job}
    급여 : ${item.salary}
</c:forEach>

 

일반적인 접근

<c:forEach var="item" items="${list}" varStatus="status">
    번호 : ${status.count}
    이름 : ${item.name}
    직업 : ${item.job}
    급여 : ${item.salary}
</c:forEach>

 

JSTL break문 구현

<c:set var="doneLoop" value="false" /> 
<c:forEach var="entity" items="${_STORE}" varStatus="status">
    <c:if test="${status.count % 6 eq 1}">
        <c:set var="doneLoop" value="false" />
    </c:if>
    <c:if test="${not doneLoop}"> 
        <span><input type="checkbox" id="store_id" name="store_id" value="<c:out value="${entity.STORE_ID}"/>" <c:out value="${entity.USE_YN}"/>><c:out value="${entity.STORE_NM}"/></span>
        <c:if test="${status.count % 6 eq 0}"> 
            <c:set var="doneLoop" value="true"/> 
        </c:if>
    </c:if>
</c:forEach>

 

reference : https://yunamom.tistory.com/179

개발환경

  • windows 11 pro 
  • jdk : 17.0.9
  • Apache Tomcat : 9.0
  • intelliJ : 2023.3.2

 

프로젝트에서 new 를 할 때 서블릿 추가 버튼이 없는 사람을 위한 글이다.

Servlet 생성

새로운 프로젝트를 생성한다.

 

Add Frameworks Support에서 Java EE 에서 아래 부분을 체크하고 apply - ok 를 누른다.

 

Project Structure - Libraries - +버튼 - From Maven을 누른다.

 

톰캣 9.0 기준

javax.servlet:javax.servlet-api:4.0.1 를 검색한다(오른쪽 검색버튼을 누르고 기다리면 됌)

 

프로젝트를 선택하고 ok를 누른다.

 

servlet api가 추가된 것을 확인하고 apply - ok 버튼을 누른다.

 

file - settings.. 버튼을 누른다.

 

Editor - File and Code Templates -  Other 탭에서

Web - Java code templates - Servlet Class.java를 누르면

아래에 보이는 것처럼 자바 소스코드가 보인다.

이 부분을 전체 복사한다.

 

이제 Other 탭 말고 Files 탭으로 가서

+버튼을 눌러서 이름은 Servlet으로 지정하고

아까 복사했던 자바 코드를 아래 사진과 같이 붙여넣은 뒤 apply - ok 버튼을 누른다.

 

그러면 이제 Servlet 버튼이 생겼다.

 

서블릿을 생성하면 아래와 같은 창이 뜨는데, 왜 뜨는지 아직 모르겠다.

대충 javaee type에 jdk-17을 넣고

클래스 이름에는 서블릿 이름을 넣어주어서 생성한다.

 

이러면 서블릿이 생성된다.

 

+이렇게 서블릿을 생성한 뒤, IOExceptiom, ServletException 오류가 뜨는 경우가 있다. (내가 그랬다.)

Incompatible types. Found: 'javax.servlet.ServletException', required: 'java.lang.Throwable'

이런 경우엔 조금 기다렸다가 인텔리제이를 재부팅하니까 해결되었다.

정확한 원인은 모르겠으나 인텔리제이의 단순 오류로 추정된다.

 

개발 환경

  • windows 11 pro
  • jdk : 17.0.9
  • mysql : 8.0.35
  • oracle : 19.3.0
  • intelliJ : 2023.3.2

 

데이터베이스 연결하기

우측 상단의 톱니바퀴 모양을 클릭하고 Project Structure 클릭

 

 

Libraries - +버튼 - Java 클릭

 

JDBC가 있는 폴더에서 jar 파일 클릭

mySQL, Oracle 각각 JAR이 다르니 검색해서 버전에 맞는거 다운로드 하세요

 

프로젝트 선택후 ok 버튼 클릭

 

정상적으로 추가된 것을 확인했으면, ok 버튼이나 apply 버튼 클릭

이제 데이터베이스와 연결할 준비가 끝났다.

 

또 다른 방법

  1. 우측 끝에서 Database 아이콘 클릭
  2. + 버튼 클릭
  3. Data Source - 원하는 데이터 베이스 클릭
  • MySQL - MySQL
  • Oracle - Oracle

 

이후 데이터베이스 아이디와 패스워드를 입력한다.

 

Test Connection을 통해서 연결 테스트를 한다.

Succeeded가 뜨면 apply -> ok 버튼을 누른다.

문제상황

이미 1099 포트가 사용되고 있다
(백그라운드에서 작동되고 있어서 그런 것으로 추정)
이클립스에서는 자동으로 종료가 됐는데, intelliJ에서는 그게 불가능한 것 같다.

 

문제 해결

cmd에서 아래의 명령어를 입력한다.

netstat -ano| find "1099"

현재 1099 포트를 사용하고 있는 프로세스 PID가 우측에 나타난다.

문제의 PID는 12892

이제 작업관리자로 해당 PID를 검색해서 삭제해야 한다.

작업 끝내기를 누르면 해결 완료

개발 환경

  • windows 11 pro
  • jdk : 17.0.9
  • Apache Tomcat : 10.1.17
  • intelliJ : 2023.3.2

 

IntelliJ에서 JSP 개발환경 초기 설정

인텔리제이를 실행하고 프로젝트를 만든다.

 

 

우측 상단에 돋보기 버튼을 누른다.

 

add framework support 를 검색하고 클릭한다.

 

Java EE - web applition을 체크하고

Create web.xml 도 체크하고 ok를 누른다.

 

이후 우측 상단의 current file 의 드랍다운 박스를 눌러서 Edit configurations...를 누른다.

 

아래와 같은 화면이 나오면 왼쪽 상단의 + 버튼을 누른다.

 

이후 Tomcat Server - Local을 누른다.

 

  1. Application server에서 Configure.. 를 눌러서 톰캣의 설치 경로를 잡아준다.
  2. Name 은 톰캣과 똑같게 지어준다(권장 사항)
  3. VM options 에 -Dfile.encoding=UTF-8 를 입력한다.(한글 깨짐 방지)

 

이후 Deloyment 탭에서 + 버튼을 눌러서 Artifact...를 누른다.

 

그러면 아래와 같이 완성이된다.

이제 apply 버튼을 누르고 ok 버튼을 누른다.

 

아래와 같이 RUN을 해서 실행결과가 나오면 정상적으로 된 것이다.

 

셧다운 포트 설정

톰캣을 종료하려고 하면 아래와 같은 오류가 발생하는 것을 확인할 수 있다.

 

톰캣이 설치된 폴더로 이동한다.

이후 conf 폴더로 이동한다.

필자의 경로는 C:\Program Files\Apache Software Foundation\Tomcat 10.1\conf 이다.

해당 폴더에서 server.xml을 메모장으로 켜준다.

 

server port가 -1로 설정되어 있다.

이를 8005로 변경한다.

이제 정상적으로 톰캣이 종료된다.

 

 

톰캣 언어 설정 변경(영어로 설정)

Edit Configurations... 를 누른다.

 

VM options를 -Duser.language=en -Duser.region=us 로 바꾼다.

(한글로 설정하려면 -Dfile.encoding=UTF-8 )

이후 apply와 ok를 누른다.

 

우측 상단의 돋보기 버튼을 눌러서

Edit custom VM Options... 를 누른다.

 

-Dfile.encoding=UTF-8 를 추가하고 저장한다.

 

그러면 이제 톰캣 콘솔창이 영어로 출력된다.

 

'Java Category > JSP' 카테고리의 다른 글

[JSP] JSTL(JSP Standard Tag Library)  (0) 2024.01.10
[JSP] IntelliJ에서 Servlet 생성  (0) 2024.01.09
[JSP] 파일 업로드  (0) 2023.12.25
[JSP] JSP와 데이터베이스 연동  (2) 2023.11.27
[JSP] 액션 태그(Action tag)  (1) 2023.11.27

이 글은 코딩 자율학습 HTML+CSS+JS(저자 : 김기수)의 책 내용과 유튜브 영상을 개인적으로 정리하는 글입니다.


배경 속성

background-color 속성

요소의 배경에 색상을 넣을 수 있다.

속성 값으로는 색상값을 사용하면 된다.

<!DOCTYPE html>
<html lang="ko">
<head>
  <title>background-color</title>
  <style>
    div{
      width:100px;
      height:100px;
      background-color:red;
    }
  </style>
</head>
<body>
  <div></div>
</body>
</html>

 

background-image 속성

요소의 배경에 해당 속성을 사용하면 이미지를 넣을 수 있다.

속성 값은 삽입할 이미지의 경로를 url() 함수로 지정하면 된다.

  • 요소의 배경 크기가 반드시 지정되어야 한다.
  • 이미지의 크기가 요소의 배경크기와 맞아야 한다.
    -요소의 배경이 이미지 크기보다 작으면 잘린다.
    -요소의 배경이 이미지 크기보다 크면 이미지 패턴이 반복된다.
<!DOCTYPE html>
<html lang="ko">
<head>
  <title>background-image</title>
  <style>
    div{
      width:160px;
      height: 120px;
      background-image: url('images/coffee.jpg');
    }
  </style>
</head>
<body>
  <div></div>
</body>
</html>

 

backgrount-repeat 속성

요소의 배경 크기가 삽입하려는 이미지보다 크면 이미지를 자동으로 반복해서 채운다.

이때 이미지 반복 설정을 바꾸려면 해당 속성을 사용하면 된다.

속성값 설명
no-repeat 이미지를 반복하지 않는다.
repeat-x 이미지를 가로 방향으로 반복한다.
repeat-y 이미지를 세로 방향으로 반복한다.
repeat 이미지를 가로와 세로 방향으로 반복한다.
round 이미지를 반복하되 이미지가 요소에 딱 맞도록 크기를 자동 조절한다.
space 이미지가 잘리지 않도록 반복한다.

 

background-size 속성

요소의 배경 크기가 이미지보다 크면 background-repeat 속성으로 해결할 수 있지만, 요소의 배경 크기가 이미지보다 작을 때 이미지가 잘려 보이는 문제는 해결할 수 없다.

그 대신 이 문제는 background-size 속성으로 이미지 크기를 지정해서 처리할 수 있다.

cover와 contain은 비슷해 보이지만, 서로 다르게 작동하는 속성값이다.

위쪽이 cover, 아래가 contain이다.

cover는 이미지가 잘리지만, contain은 비율을 유지하면서 이미지가 배경 요소에 꽉 차도록 확대하지만, 배경의 가로와 세로 중 한 부분이 가득 차면 그 상태에서 멈춘다. 그리고 못 채운 부분은 이미지를 반복해서 채운다.

 

또는 아래처럼 너비와 높이를 직접 지정해도 된다.

<!DOCTYPE html>
<html lang="ko">
<head>
  <title>background-size</title>
  <style>
    div{
      width:80px; /* 원본 이미지보다 1/2 작게 설정 */
      height:60px; /* 원본 이미지보다 1/2 작게 설정 */
      background-image:url('images/coffee.jpg');
      background-size:80px 60px; /* 너비와 높이를 80px, 60px로 지정 */
    }
  </style>
</head>
<body>
  <div></div>
</body>
</html>

이렇게 하면 이미지가 잘려보이지 않고 배경에 딱 맞게 표시된다.

 

background-position 속성

삽입하려는 이미지의 위치를 결정할 수 있다.

해당 속성값은 1개만 사용해도 되고 2개를 사용해도 된다.

값을 1개만 사용하면 지정한 값은 x축 값이 되고, y축 값은 기본으로 center가 된다.

2개를 사용하면 각각 x축과 y축 값으로 지정된다.

<!DOCTYPE html>
<html lang="ko">
<head>
  <title>background-position</title>
  <style>
    div{
      width:320px; /* 원본 이미지보다 2배 크게 설정 */
      height:240px;/* 원본 이미지보다 2배 크게 설정 */
      border:1px solid black; /* 요소의 넓이가 잘 보이게 테두리 설정 */
      background-image:url('images/coffee.jpg');
      background-repeat:no-repeat;      
      background-position:100%;
    }
  </style>
</head>
<body>
  <div></div>
</body>
</html>

위 코드를 설명하면 요소의 배경 크기는 삽입하려는 이미지보다 2배 크다.

이 상태에서 이미지를 반복하지 않고 x축 값만 100%로 지정했다.

이렇게 하면 자동으로 y축 값은 center가 된다.

이렇게 하면 자동으로 y축 값은 center가 된다.

참고로 100%는 비율에서 가장 큰 값이기 때문에 x축에 사용하면 가장 오른쪽, y축에 사용하면 가장 아래쪽을 의미한다.

background-position 속성은 background-size 속성값을 cover로 지정해서 같이 사용하면 효과가 좋다.
background-size의 cover와 background-position 속성 값을 center로 지정하면 이미지가 정중앙에 있는 것처럼 보인다.

 

background-attachment 속성

요소에 삽입된 이미지를 스크롤할 때, 이미지 작동 방식을 결정한다.

 

 

<!DOCTYPE html>
<html lang="ko">
<head>
  <title>background-attachment-fixed</title>
  <style>
    body{
      height:1000px;
    }
    .parent{
      width:320px; /* 원본 이미지보다 2배 크게 설정 */
      height:240px;/* 원본 이미지보다 2배 크게 설정 */
      border:1px solid black; /* 요소의 넓이가 잘 보이게 테두리 설정 */
      overflow:scroll;
    }
    .children{
      height:2000px;
      background-image:url('images/coffee.jpg');
      background-attachment:fixed;
    }
  </style>
</head>
<body>
  <div class="parent">
    <div class="children"></div>
  </div>
</body>
</html>

 

 

위치 속성으로 HTML 요소 배치하기

CSS에서 제공하는 속성 중에는 HTML 요소를 기본 흐름에서 벗어나서 원하는 곳에 배치할 수 있는 속성이 있다.

이 속성들의 요소의 위치에 관여한다고 해서 위치 속성이라고 한다.

 

position 속성

HTML 요소를 기본 흐름에서 벗어나 좌푯값에 따라 배치할 때 사용한다.

 

static

position 속성 값을 static으로 지정하면 아무런 변화가 없다.

좌표 속성을 사용할 수 없으며 위치 속성을 사용하지 않았을 때와 같다.

기본 스타일 시트에 적용된 position 값이 static이다.

 

relative

position 속성값을 relative로 지정하면 요소를 좌표 속성에 따라 배치할 수 있다.

좌표 속성에 따라 요소를 배치하는 원리를 이해하려면 좌표계를 알아야 한다.

좌표계는 요소가 웹 브라우저에 표시될 때 x축, y축, z축에 따라 요소가 배치되는 개념이다.

<!DOCTYPE html>
<html lang="ko">
<head>
  <title>relative</title>
  <style>
    .box{
      width:100px;
      height:100px;
    }
    .red-box{
      background-color:red;
    }
    .green-box{
      background-color:green;
      position:relative;
      left:100px;
      /* top 속성 추가 */
      /* top:100px; */
    }
    .blue-box{
      background-color:blue;
    }
  </style>
</head>
<body>
  <div class="box red-box"></div>
  <div class="box green-box"></div>
  <div class="box blue-box"></div>
</body>
</html>

 

absolute

position 속성값을 absolute로 지정하면 relative와 마찬가지로 요소가 기본 흐름에서 벗어나 좌표 속성에 따라 배치된다.

다만 relative일 때는 기준점이 요소의 왼쪽 위 모서리지만, absolute일 때는 웹 브라우저의 왼쪽 위 모서리이다.

 

position 속성값을 relative에서 absolute로 바꾸면 전혀 다르게 동작한다.

<!DOCTYPE html>
<html lang="ko">
<head>
  <title>absolute</title>
  <style>
    body{
      margin:0;
    }
    .box{
      width:100px;
      height:100px;
    }
    .red-box{
      background-color:red;
    }
    .green-box{
      background-color:green;
      position:absolute;
      left:100px;
      /* top 속성 추가 */
      /* top:100px; */
    }
    .blue-box{
      background-color:blue;
    }
  </style>
</head>
<body>
  <div class="box red-box"></div>
  <div class="box green-box"></div>
  <div class="box blue-box"></div>
</body>
</html>

absolute 값일 때는 요소를 움직이면 요소가 원래 있던 공간은 빈 공간으로 인식된다.

그래서 파란색 요소가 초록색 요소가 원래 있던 위치로 올라온다.

초록색 요소만 보면 이동한 위치가 relative 일 때와 다르지 않다. absolute는 기준점이 웹 브라우저의 왼쪽 위라고 했는데, 빨간색 요소 옆으로 가지 않고 relative 때처럼 원래 위치에서 오른쪽으로 이동한 이유는 position 속성값이 absolute일 때 top이나 bottom 속성을 지정하지 않으면 left나 right 속성은 원래 위치에서 x축 방향으로만 움직이기 때문이다.

 

position 속성값이 relative와 비교해보면 확실히 차이를 알 수 있다.

.green-box{
      background-color:green;
      position:relative;
      left:100px;
      top:100px;
    }

 

fixed

position 속성값을 fixed로 지정하면 해당 요소는 지정된 위치에 고정된다.

실행하면 absolute와 똑같이 작동하는 것처럼 보이지만, 스크롤했을 때 차이가 난다.

<!DOCTYPE html>
<html lang="ko">
<head>
  <title>fixed</title>
  <style>
    body{
      margin:0;
      height:4000px;
    }
    .box{
      width:100px;
      height:100px;
    }
    .red-box{
      background-color:red;
    }
    .green-box{
      background-color:green;
      position:fixed;
      left:100px;
      top:100px;
    }
    .blue-box{
      background-color:blue;
    }
  </style>
</head>
<body>
  <div class="box red-box"></div>
  <div class="box green-box"></div>
  <div class="box blue-box"></div>
</body>
</html>

 

sticky

스크롤 하는 중에 일정 지점이 되면 요소가 fixed 값처럼 작동한다.

<!DOCTYPE html>
<html lang="ko">
<head>
  <title>sticky</title>
  <style>
    body{
      margin:0;
      height:4000px;
    }
    .box{
      width:100px;
      height:100px;
    }
    .red-box{
      background-color:red;
    }
    .green-box{
      background-color:green;
      position:sticky;
      top:0;
    }
    .blue-box{
      background-color:blue;
    }
  </style>
</head>
<body>
  <div class="box red-box"></div>
  <div class="box green-box"></div>
  <div class="box blue-box"></div>
</body>
</html>

웹 브라우저를 스크롤해 보면 화면에서 사라지는 빨간색과 파란색 요소와 다르게 초록색 요소는 top 속성값이 0인 위치에 고정되어 있다.

 

float 속성

요소를 화면에 배치하는 또 다른 방법으로는 float 속성이 있다.

float 속성은 대상 요소를 공중에 띄워 다음에 오는 요소를 주변에 자연스럽게 배치하기 위한 용도로 사용한다.

 

이미지 요소와 텍스트 요소 배치하기

이미지 요소와 텍스트 요소가 함께 사용될 때 float 속성의 특징을 적용하면 아래와 같은 레이아웃을 만들 수 있다.

<!DOCTYPE html>
<html lang="ko">
<head>
  <title>float</title>
  <style>
    img{
      float:left;
      margin-right:1rem;
    }
  </style>
</head>
<body>
  <img src="images/coffee.jpg" alt="커피">
  <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Corrupti ut dolor ratione blanditiis iste, harum fugit, soluta eum obcaecati, expedita perspiciatis quam culpa? Doloribus repellendus labore sed inventore iusto eveniet. Lorem, ipsum dolor sit amet consectetur adipisicing elit. Maiores at natus aliquid numquam vitae nisi, voluptates laudantium saepe error sapiente nobis adipisci et accusamus molestiae commodi consequuntur earum, ut dicta? Lorem ipsum dolor sit amet consectetur, adipisicing elit. Id molestiae perspiciatis non temporibus voluptates alias ducimus libero esse recusandae placeat, natus quo mollitia sint enim? Ex numquam non officia ipsam?</p>
</body>
</html>

 

블록 성격 요소를 인라인 성격 요소처럼 배치

float 속성의 작동 원리를 이용해 블록 성격 요소를 인라인 성격 요소처럼 배치할 수 있다.

<!DOCTYPE html>
<html lang="ko">
<head></head>
  <title>float</title>
  <style>
    div{
      color:white;
    }
    .red-box{
      background-color:red;
      /* float:left; */
    }
    .blue-box{
      background-color:blue;
      /* float:left; */
    }
  </style>
</head>
<body>
  <div class="red-box">red-box</div>
  <div class="blue-box">blue-box</div>
</body>
</html>

 

float 요소를 left로 지정하면 블록 성격을 인라인 성격으로 바꿀 수 있다.

<style>
    div{
      color:white;
    }
    .red-box{
      background-color:red;
      float:left;
    }
    .blue-box{
      background-color:blue;
      float:left;
    }
  </style>

 

clear 속성

clear 속성은 float 속성을 해제할 때 사용하는 속성이다.

float 속성은 여러 문제점이 있다. 이러한 문제점은 float 속성이 대상 요소의 다음 요소에 영향을 주기 때문이다.

따라서 영향을 주지 않도록 float 속성을 해제해야 한다.

 

<!DOCTYPE html>
<html lang="ko">
<head>
  <title>clear</title>
  <style>
    .box{
        width:100px;
        height:100px;        
    }
    .red-box{
      background-color:red;
      float:left;
    }
    .green-box{
      background-color:green;
      float:left;
    }
    .blue-box{
      background-color:blue;
    }
  </style>
</head>
<body>
  <div class="box red-box"></div>
  <div class="box green-box"></div>
  <div class="box blue-box"></div>
</body>
</html>

파란색 요소만 float 속성을 적용하지 않았다.

이 결과는 파란색 요소가 사라진 것이 아니라 빨간색 요소 밑에 있다.

float 속성이 적용된 요소는 자신의 원래 위치를 보장받지 못하기 때문이다.

 

파란색 요소를 정상적으로 보이게 하려면 파란색 요소 바로 전에 있는 초록색 요소에 적용된 float 속성을 해제해야 한다.

아래의 코드처럼 파란색 요소에 clear 속성을 추가한다.

이때 초록색 요소의 float 속성값이 left이니 clear 속성에도 left 값을 적용한다.

.blue-box{
      background-color:blue;
      clear:left;
    }

이제 파란색 요소는 다른 요소의 float 속성에 영향을 받지 않아 정상적으로 표시된다.

 

전환 효과 속성 적용하기

전환

CSS에서 한 요소에 적용된 스타일 속성값을 다른 속성 값으로 변하게 하는 것을 전환이라고 한다.

<!DOCTYPE html>
<html lang="ko">
<head>
  <title>Transition</title>
  <style>
    .red-box{
      width:100px;
      height:100px;
      background-color:red;
    }
    .red-box:hover{
      background-color:blue;
    }
  </style>
</head>
<body>
  <div class="red-box"></div>
</body>
</html>

 

transition-property 속성

이 속성은 전환 효과를 적용할 대상 속성을 지정한다.

속성값 설명
none 전환 효과 속성을 지정하지 않는다.
all 모든 속성을 전환 효과를 대상으로 지정

 

color 속성에 전환 효과를 주고 싶다면 아래와 같이 작성하면 된다.

 

전환 효과를 여러 속성에 지정하고 싶다면 쉼표로 구분해 작성하면 된다.

 

개별 속성이 아닌 모든 속성에 전환 효과를 넣고 싶으면 all로 지정하면 된다.

 

transition-duration 속성

이 속성은 전환 효과의 지속 시간을 설정하는 데 사용한다.

속성값으로는 초 단위 값을 사용한다.

아래와 같은 코드를 작성하면 전환 효과가 1초 동안 발생한다.

어떤 요소에 전환 효과를 지정하려면 반드시 property  속성과 duration 속성을 함께 사용해야 한다.

 

transition-timing-function 속성

이 속성은 전환 효과의 진행 속도를 지정한다.

속성값으로는 정해진 키워드와 cubic-bezier()함수를 사용할 수 있다.

<!DOCTYPE html>
<html lang="ko">
<head>
  <title>transition-timing-function</title>
  <style>
    .container{
      padding:10px;
      color:white;
      border:1px solid black;
    }
    .bar{
      width:100px;
      background-color:red;
      transition-property:width;
      transition-duration:1s;
      margin-bottom:10px;
    }
    .container:hover .bar{
      width:200px;
    }
    .bar:nth-child(1){
      transition-timing-function:linear;
    }
    .bar:nth-child(2){
      transition-timing-function:ease;
    }
    .bar:nth-child(3){
      transition-timing-function:ease-in
    }
    .bar:nth-child(4){
      transition-timing-function:ease-out;
    }
    .bar:nth-child(5){
      transition-timing-function:ease-in-out;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="bar">linear</div>
    <div class="bar">ease</div>
    <div class="bar">ease-in</div>
    <div class="bar">ease-out</div>
    <div class="bar">ease-in-out</div>    
  </div>  
</body>
</html>

 

기본으로 제공되는 속성값의 속도 방식이 마음에 들지 않는다면 cubic-bezier()함수로 직접 정할 수도 있다.

이는 크롬의 개발자 도구나 별도의 외부 사이트에서 계산하는 것이 편하다.

'HTML & CSS > CSS' 카테고리의 다른 글

[CSS] CSS 필수 속성(박스 모델)  (1) 2024.01.06
[CSS] CSS 필수 속성(CSS의 특징, 텍스트 속성)  (2) 2024.01.05
[CSS] CSS 선택자  (1) 2024.01.04
[CSS] CSS 기초 문법  (1) 2024.01.03