타임라인 UI: 매력적인 스타일 구현 방법 – 코딩 샘플 1개 포함

오늘은 타임라인 UI를 구현하는 방법과 간단한 코딩 샘플을 공유하려고 합니다.
이 글은 제가 나중에 참고하기 위해 기록한 내용이며, 다른 분들에게도 작은 도움이 되었으면 하는 마음으로 작성했습니다. 샘플 페이지가 필요하신 분들을 위해 샘플 페이지 바로가기 준비 했습니다.

타임라인 UI 장점?

그렇다면, 왜 타임라인 UI를 사용할까요? 어떤 장점이 있기에 이를 선택하게 될까요? 저는 세 가지 정도로 정리해 보았습니다.

  • 정보 전달이 쉽고 직관적입니다.
  • 시간의 연속성이나 단계적 흐름을 효과적으로 표현할 수 있습니다.
  • 가독성과 시각적 효과를 동시에 제공합니다.

타임라인 UI 코드 – CSS

<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Bootstrap Icons -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css" rel="stylesheet">
	<style>
	/* 타임라인 스타일 */
	.timeline-wrapper {
		position: relative;
		padding: 2rem 0;
	}

	.timeline-wrapper::before {
		content: '';
		position: absolute;
		top: 0;
		left: 1rem;
		height: 100%;
		width: 2px;
		background: #e9ecef;
	}

	.timeline-item {
		position: relative;
		padding-left: 3rem;
		margin-bottom: 2.5rem;
	}

	.timeline-item:last-child {
		margin-bottom: 0;
	}

	.timeline-badge {
		position: absolute;
		left: -0.5rem;
		width: 3rem;
		height: 3rem;
		border-radius: 50%;
		display: flex;
		align-items: center;
		justify-content: center;
		color: white;
		box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);
	}

	.timeline-badge i {
		font-size: 1.2rem;
	}

	.timeline-card {
		background: white;
		border-radius: 1rem;
		box-shadow: 0 0.125rem 0.25rem rgba(0,0,0,0.075);
		transition: transform 0.3s ease;
	}

	.timeline-card:hover {
		transform: translateX(10px);
	}

	.timeline-body {
		padding: 1.5rem;
	}

	.timeline-title {
		font-size: 1.25rem;
		margin-bottom: 1rem;
		display: flex;
		align-items: center;
	}

	.timeline-text {
		color: #6c757d;
		margin-bottom: 0;
	}

	@media (min-width: 768px) {
		.timeline-wrapper::before {
			left: 50%;
			margin-left: -1px;
		}

		.timeline-item {
			padding-left: 0;
			padding-right: 50%;
			margin-bottom: 4rem;
		}

		.timeline-item:nth-child(even) {
			padding-left: 50%;
			padding-right: 0;
		}

		.timeline-badge {
			left: 50%;
			margin-left: -1.5rem;
		}

		.timeline-item:nth-child(even) .timeline-card {
			margin-left: 3rem;
		}

		.timeline-item:nth-child(odd) .timeline-card {
			margin-right: 3rem;
		}
	}

	/* 호버 효과 */
	.timeline-card:hover {
		box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);
	}

	/* 링크 호버 효과 */
	a.text-decoration-none:hover {
		opacity: 0.8;
	}
	</style>

부트스트랩을 사용했습니다. 그래서 <head></head> 사이에 넣을 때 부트스트랩 관련 코드 2개도 함께 넣어 줘야 합니다.

타임라인 UI 코드 – html

<!-- 안내 섹션 -->
<div class="container py-5">
    <div class="row justify-content-center">
        <div class="col-lg-10">
            <!-- 안내사항 헤더 -->
            <div class="text-center mb-5">
                <i class="bi bi-lightbulb-fill text-warning display-4 mb-3"></i>
                <h2 class="fw-bold">안내사항</h2>
                <p class="text-muted">원활한 결제를 위해 아래 내용을 확인해 주세요</p>
            </div>

            <!-- 타임라인 스타일의 안내사항 -->
            <div class="timeline-wrapper">
                <!-- 결제 순서 -->
                <div class="timeline-item">
                    <div class="timeline-badge bg-primary">
                        <i class="bi bi-1-circle-fill"></i>
                    </div>
                    <div class="timeline-card">
                        <div class="timeline-body">
                            <h4 class="timeline-title">
                                <i class="bi bi-arrow-right-circle-fill text-primary me-2"></i>
                                결제 순서
                            </h4>
                            <p class="timeline-text">
                                아이디, 핸드폰 번호 입력 후 원하는 상품을 선택하시면 됩니다.
                            </p>
                        </div>
                    </div>
                </div>

                <!-- 정보 입력 주의사항 -->
                <div class="timeline-item">
                    <div class="timeline-badge bg-warning">
                        <i class="bi bi-2-circle-fill"></i>
                    </div>
                    <div class="timeline-card">
                        <div class="timeline-body">
                            <h4 class="timeline-title">
                                <i class="bi bi-shield-check text-warning me-2"></i>
                                정보 입력 주의사항
                            </h4>
                            <p class="timeline-text">
                                입력하신 아이디와 핸드폰 번호는 나중에 결제 내역 조회시 사용되기 때문에 정확하게 입력해 주세요.
                            </p>
                        </div>
                    </div>
                </div>

                <!-- 상품 안내 -->
                <div class="timeline-item">
                    <div class="timeline-badge bg-danger">
                        <i class="bi bi-3-circle-fill"></i>
                    </div>
                    <div class="timeline-card">
                        <div class="timeline-body">
                            <h4 class="timeline-title">
                                <i class="bi bi-cart-check text-danger me-2"></i>
                                상품 안내
                            </h4>
                            <p class="timeline-text">
                                각 상품에 대한 자세한 내용은 
                                <a href="/price.php" class="link-danger text-decoration-none fw-bold">
                                    가격안내 <i class="bi bi-box-arrow-up-right"></i>
                                </a>
                                를 참고하세요.
                            </p>
                        </div>
                    </div>
                </div>

				<!-- 상품 안내 -->
                <div class="timeline-item">
                    <div class="timeline-badge bg-success">
                        <i class="bi bi-4-circle-fill"></i>
                    </div>
                    <div class="timeline-card">
                        <div class="timeline-body">
                            <h4 class="timeline-title">
                                <i class="bi bi-cart-check text-success me-2"></i>
                                상품 안내
                            </h4>
                            <p class="timeline-text">
                                각 상품에 대한 자세한 내용은 
                                <a href="/price.php" class="link-success text-decoration-none fw-bold">
                                    가격안내 <i class="bi bi-box-arrow-up-right"></i>
                                </a>
                                를 참고하세요.
                            </p>
                        </div>
                    </div>
                </div>

                <!-- 문의사항 -->
                <div class="timeline-item">
                    <div class="timeline-badge bg-info">
                        <i class="bi bi-5-circle-fill"></i>
                    </div>
                    <div class="timeline-card">
                        <div class="timeline-body">
                            <h4 class="timeline-title">
                                <i class="bi bi-headset text-info me-2"></i>
                                문의사항
                            </h4>
                            <p class="timeline-text">
                                결제관련 문의 사항은 
                                <a href="mailto:replypark@naver.com" class="link-info text-decoration-none fw-bold">
                                    email@naver.com <i class="bi bi-envelope"></i>
                                </a>
                                으로 문의 주세요.
                            </p>
                        </div>
                    </div>
                </div>

				<!-- 계속 추가 하면 됨 -->
                <div class="timeline-item">
                    <div class="timeline-badge bg-info"><!-- bg-info 색깔 변경 아래 2곳과 통일-->
                        <i class="bi bi-6-circle-fill"></i><!-- bi-숫자를 변경 -->
                    </div>
                    <div class="timeline-card">
                        <div class="timeline-body">
                            <h4 class="timeline-title">
                                <i class="bi bi-headset text-info me-2"></i><!-- text-info 색깔 변경 -->
                                문의사항
                            </h4>
                            <p class="timeline-text">
                                결제관련 문의 사항은 
                                <a href="mailto:replypark@naver.com" class="link-info text-decoration-none fw-bold"><!-- link-info 색깔 변경 -->
                                    email@naver.com <i class="bi bi-envelope"></i>
                                </a>
                                으로 문의 주세요.
                            </p>
                        </div>
                    </div>
                </div>


            </div>
        </div>
    </div>
</div>

제일 마지막 부분에는 주석으로 설명을 추가해 두었습니다. 더 내용을 추가하려면 번호를 순차적으로 증가시키면 되고, 각 타임라인의 색상을 통일하는 것이 좋습니다. 이를 참고하여 적용해 주세요. 또한, 부트스트랩 아이콘의 색상은 아래 이미지를 참고하시면 됩니다.

부트스트랩 색상표로 타임라인 UI 에 필요함

타임라인 UI 샘플 코드 전체

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>서비스 요금제</title>
    
    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <!-- Bootstrap Icons -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css" rel="stylesheet">
	<style>
	/* 타임라인 스타일 */
	.timeline-wrapper {
		position: relative;
		padding: 2rem 0;
	}

	.timeline-wrapper::before {
		content: '';
		position: absolute;
		top: 0;
		left: 1rem;
		height: 100%;
		width: 2px;
		background: #e9ecef;
	}

	.timeline-item {
		position: relative;
		padding-left: 3rem;
		margin-bottom: 2.5rem;
	}

	.timeline-item:last-child {
		margin-bottom: 0;
	}

	.timeline-badge {
		position: absolute;
		left: -0.5rem;
		width: 3rem;
		height: 3rem;
		border-radius: 50%;
		display: flex;
		align-items: center;
		justify-content: center;
		color: white;
		box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);
	}

	.timeline-badge i {
		font-size: 1.2rem;
	}

	.timeline-card {
		background: white;
		border-radius: 1rem;
		box-shadow: 0 0.125rem 0.25rem rgba(0,0,0,0.075);
		transition: transform 0.3s ease;
	}

	.timeline-card:hover {
		transform: translateX(10px);
	}

	.timeline-body {
		padding: 1.5rem;
	}

	.timeline-title {
		font-size: 1.25rem;
		margin-bottom: 1rem;
		display: flex;
		align-items: center;
	}

	.timeline-text {
		color: #6c757d;
		margin-bottom: 0;
	}

	@media (min-width: 768px) {
		.timeline-wrapper::before {
			left: 50%;
			margin-left: -1px;
		}

		.timeline-item {
			padding-left: 0;
			padding-right: 50%;
			margin-bottom: 4rem;
		}

		.timeline-item:nth-child(even) {
			padding-left: 50%;
			padding-right: 0;
		}

		.timeline-badge {
			left: 50%;
			margin-left: -1.5rem;
		}

		.timeline-item:nth-child(even) .timeline-card {
			margin-left: 3rem;
		}

		.timeline-item:nth-child(odd) .timeline-card {
			margin-right: 3rem;
		}
	}

	/* 호버 효과 */
	.timeline-card:hover {
		box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);
	}

	/* 링크 호버 효과 */
	a.text-decoration-none:hover {
		opacity: 0.8;
	}
	</style>
</head>
<body>
<!-- 안내 섹션 -->
<div class="container py-5">
    <div class="row justify-content-center">
        <div class="col-lg-10">
            <!-- 안내사항 헤더 -->
            <div class="text-center mb-5">
                <i class="bi bi-lightbulb-fill text-warning display-4 mb-3"></i>
                <h2 class="fw-bold">안내사항</h2>
                <p class="text-muted">원활한 결제를 위해 아래 내용을 확인해 주세요</p>
            </div>

            <!-- 타임라인 스타일의 안내사항 -->
            <div class="timeline-wrapper">
                <!-- 결제 순서 -->
                <div class="timeline-item">
                    <div class="timeline-badge bg-primary">
                        <i class="bi bi-1-circle-fill"></i>
                    </div>
                    <div class="timeline-card">
                        <div class="timeline-body">
                            <h4 class="timeline-title">
                                <i class="bi bi-arrow-right-circle-fill text-primary me-2"></i>
                                결제 순서
                            </h4>
                            <p class="timeline-text">
                                아이디, 핸드폰 번호 입력 후 원하는 상품을 선택하시면 됩니다.
                            </p>
                        </div>
                    </div>
                </div>

                <!-- 정보 입력 주의사항 -->
                <div class="timeline-item">
                    <div class="timeline-badge bg-warning">
                        <i class="bi bi-2-circle-fill"></i>
                    </div>
                    <div class="timeline-card">
                        <div class="timeline-body">
                            <h4 class="timeline-title">
                                <i class="bi bi-shield-check text-warning me-2"></i>
                                정보 입력 주의사항
                            </h4>
                            <p class="timeline-text">
                                입력하신 아이디와 핸드폰 번호는 나중에 결제 내역 조회시 사용되기 때문에 정확하게 입력해 주세요.
                            </p>
                        </div>
                    </div>
                </div>

                <!-- 상품 안내 -->
                <div class="timeline-item">
                    <div class="timeline-badge bg-danger">
                        <i class="bi bi-3-circle-fill"></i>
                    </div>
                    <div class="timeline-card">
                        <div class="timeline-body">
                            <h4 class="timeline-title">
                                <i class="bi bi-cart-check text-danger me-2"></i>
                                상품 안내
                            </h4>
                            <p class="timeline-text">
                                각 상품에 대한 자세한 내용은 
                                <a href="/price.php" class="link-danger text-decoration-none fw-bold">
                                    가격안내 <i class="bi bi-box-arrow-up-right"></i>
                                </a>
                                를 참고하세요.
                            </p>
                        </div>
                    </div>
                </div>

				<!-- 상품 안내 -->
                <div class="timeline-item">
                    <div class="timeline-badge bg-success">
                        <i class="bi bi-4-circle-fill"></i>
                    </div>
                    <div class="timeline-card">
                        <div class="timeline-body">
                            <h4 class="timeline-title">
                                <i class="bi bi-cart-check text-success me-2"></i>
                                상품 안내
                            </h4>
                            <p class="timeline-text">
                                각 상품에 대한 자세한 내용은 
                                <a href="/price.php" class="link-success text-decoration-none fw-bold">
                                    가격안내 <i class="bi bi-box-arrow-up-right"></i>
                                </a>
                                를 참고하세요.
                            </p>
                        </div>
                    </div>
                </div>

                <!-- 문의사항 -->
                <div class="timeline-item">
                    <div class="timeline-badge bg-info">
                        <i class="bi bi-5-circle-fill"></i>
                    </div>
                    <div class="timeline-card">
                        <div class="timeline-body">
                            <h4 class="timeline-title">
                                <i class="bi bi-headset text-info me-2"></i>
                                문의사항
                            </h4>
                            <p class="timeline-text">
                                결제관련 문의 사항은 
                                <a href="mailto:replypark@naver.com" class="link-info text-decoration-none fw-bold">
                                    email@naver.com <i class="bi bi-envelope"></i>
                                </a>
                                으로 문의 주세요.
                            </p>
                        </div>
                    </div>
                </div>

				<!-- 계속 추가 하면 됨 -->
                <div class="timeline-item">
                    <div class="timeline-badge bg-info"><!-- bg-info 색깔 변경 아래 2곳과 통일-->
                        <i class="bi bi-6-circle-fill"></i><!-- bi-숫자를 변경 -->
                    </div>
                    <div class="timeline-card">
                        <div class="timeline-body">
                            <h4 class="timeline-title">
                                <i class="bi bi-headset text-info me-2"></i><!-- text-info 색깔 변경 -->
                                문의사항
                            </h4>
                            <p class="timeline-text">
                                결제관련 문의 사항은 
                                <a href="mailto:replypark@naver.com" class="link-info text-decoration-none fw-bold"><!-- link-info 색깔 변경 -->
                                    email@naver.com <i class="bi bi-envelope"></i>
                                </a>
                                으로 문의 주세요.
                            </p>
                        </div>
                    </div>
                </div>


            </div>
        </div>
    </div>
</div>

</body>
</html>

위 글은 블로그의 ‘Web‘ 카테고리로 분류되었으며, 관련된 글을 더 많이 참고할 수 있습니다.