본문 바로가기
JAVA/SpringBoot

타임리프를 활용한 웹 페이지 레이아웃과 디자인

by GangDev 2024. 3. 26.

 

타임리프에서 레이아웃과 디자인 관리는 웹 페이지의 일관성과 재사용성을 높이는 데 중요하다.
공통 레이아웃의 재사용을 통해 개발 시간을 단축시키고, 동적으로 디자인을 조정함으로써 사용자 경험을 향상시킨다.
(즉, 웹 애플리케이션의 유지보수성과 확장성을 향상시킨다)

 

공통 레이아웃 생성 >>
여러 페이지에 걸쳐 공통적으로 사용되는 레이아웃(예: 헤더, 푸터, 사이드바)을 만든다.
별도의 HTML 파일로 공통 레이아웃을 작성한 후, 다른 페이지에서 재사용하면 된다.

 

<!-- base.html -->

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Thymeleaf 예시</title>
</head>
<body>
    <header>
        <h1>웹사이트 헤더</h1>
    </header>
    <div th:replace="fragments/content"></div>
</body>
</html>

----
<!-- content.html -->

<section>
    <h2>컨텐츠 섹션</h2>
    <p>이 섹션은 내용을 보여주는 섹션입니다.</p>
</section>

 

'th:replace' 는 현재 요소를 완전히 대체하는 데 사용된다.
(현재 요소가 사라지고 지정된 템플릿의 내용으로 대체된다)
위 예시에서 th:replace 를 사용해서 base.html 의 div 요소를 content.html 로 대체한다.
결과는 아래 코드와 같다.
<div> 요소는 완전히 대체되었고 원래의 내용은 사라졌다.

<!DOCTYPE html>
<html>
<head>
    <!-- 헤더 내용 생략 -->
</head>
<body>
    <header>
        <h1>웹사이트 헤더</h1>
    </header>
    <section>
        <h2>컨텐츠 섹션</h2>
        <p>이 섹션은 내용을 보여주는 섹션입니다.</p>
    </section>
</body>
</html>

 

th:insert
th:insert는 지정된 템플릿의 내용을 현재 요소 내부에 삽입하는 데 사용된다
(현재 요소는 유지되고, 템플릿의 내용이 추가된다)

<!-- base.html -->

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Thymeleaf 예시</title>
</head>
<body>
    <header>
        <h1>웹사이트 헤더</h1>
    </header>
    <div th:insert="fragments/sidebar"></div>
</body>
</html>

<!-- sidebar.html -->

<aside>
    <h2>사이드바</h2>
    <p>추가 정보</p>
</aside>

위 코드에서, th:insert 를 사용하여 base.html 의 <div> 요소에 sidebar.html 을 삽입한다.
<div> 요소 내에 sidebar.html 의 내용이 추가되었고, 원래의 내용은 그대로 유지된다.
결과는 아래 코드와 같다.

 

<!DOCTYPE html>
<html>
<head>
    <!-- 헤더 내용 생략 -->
</head>
<body>
    <header>
        <h1>웹사이트 헤더</h1>
    </header>
    <div>
        <aside>
            <h2>사이드바</h2>
            <p>추가 정보</p>
        </aside>
    </div>
</body>
</html>

 

디자인 속성(th:class, th:style) >>
조건에 따라 HTML 요소에 CSS 클래스나 스타일을 동적으로 적용한다.
th:class 는 조건에 따라 클래스를 적용한다.
th:style 은 조건에 따라 인라인 스타일을 적용한다.

 

<div th:class="${someCondition ? 'class-true' : 'class-false'}"></div>
<div th:style="${someCondition ? 'display:block;' : 'display:none;'}"></div>

 

위 코드에서, someContidion 이 참이면 div 에 특정 클래스를 적용하거나 dispaly:block; 스타일을 적용한다.
거짓이면 다른 클래스나 display:none; 스타일을 적용한다.

 

---

24년 1월 23일 작성된 글입니다