/* CSS 파일 최상단에 배치 */
body {
margin: 0;
}
div {
box-sizing: border-box;
}
h1 {
font-size: 30px;
}
h4 {
font-size: 22px;
}
<div class="service">
<div class="main-container">
<h4 style="margin-top: 0;">What We Offer</h4>
<div class="service-items">
<div>
<i class="fa fa-mobile fa-4x service-icon"></i>
<h5>Responsive</h5>
</div>
<div>
<i class="fa fa-flask fa-3x service-icon"></i>
<h5>Experiments</h5>
</div>
<div>
<i class="fa fa-flash fa-3x service-icon"></i>
<h5>Quickness</h5>
</div>
<div>
<i class="fa fa-globe fa-3x service-icon"></i>
<h5>Global Shipping</h5>
</div>
</div>
</div>
</div>
/* 메인 레이아웃 */
.service {
background-color: #4e61c0;
width: 100%;
color: white;
text-align: center;
padding: 60px 30px 50px 30px;
}
.service-items {
display: flex;
}
.service-items div {
width: 25%;
}
/* 아이콘 디자인 */
.service-icon {
background: white;
color: #4e61c0;
width: 100px;
height: 100px;
border-radius: 50%;
box-sizing: border-box;
padding: 15px;
}
.service h5 {
margin-bottom: 0px;
}
@media screen and (max-width: 992px) {
.service-items {
display: flex;
flex-direction: column;
}
.service-items div {
width: 100%;
margin-bottom: 30px;
}
}
<div class="portfolio">
<h4>What we can DO</h4>
<div class="portfolio-container">
<div class="portfolio-item1">
<div class="portfolio-text">
<h4>Stationary</h4>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
</div>
</div>
<div class="portfolio-item2">
<!-- 두 번째 아이템 -->
</div>
<div class="portfolio-item3">
<!-- 세 번째 아이템 -->
</div>
<div class="portfolio-item4">
<!-- 네 번째 아이템 -->
</div>
</div>
<!-- Float 해제 -->
<div style="clear: both;"></div>
</div>
.portfolio {
padding-top: 60px;
padding-bottom: 60px;
text-align: center;
}
.portfolio-container {
text-align: left;
max-width: 1200px;
margin: auto;
}
.portfolio-item1 {
float: left;
width: 50%;
height: 350px;
background-image: url(portfolio-1.jpg);
background-size: cover;
position: relative; /* 애니메이션을 위해 필요 */
}
.portfolio-text {
color: white;
padding: 50px;
width: 100%;
}
.portfolio-item1 {
/* 이미지 위에 반투명 검은색 오버레이 */
background-image:
linear-gradient(rgba(0,0,0,0.4), rgba(0,0,0,0.4)),
url(portfolio-1.jpg);
background-size: cover;
}
/* 또는 brightness 필터 사용 */
.portfolio-item1 {
background-image: url(portfolio-1.jpg);
filter: brightness(80%);
}
@media screen and (max-width: 992px) {
.portfolio-item1,
.portfolio-item2,
.portfolio-item3,
.portfolio-item4 {
float: none;
width: 100%;
margin-bottom: 20px;
}
}
<div class="portfolio-item1">
<div class="white-box"></div> <!-- 애니메이션용 박스 추가 -->
<div class="portfolio-text">
<h4>Stationary</h4>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
</div>
</div>
.portfolio-item1 {
position: relative; /* absolute 자식을 위해 필요 */
}
.white-box {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 2;
border: 0px solid white;
transition: border 0.3s ease;
}
.portfolio-item1:hover .white-box {
border: 30px solid white;
}
.portfolio-item1 {
transition: transform 0.3s ease;
}
.portfolio-item1:hover {
transform: scale(1.05);
}
.portfolio-item1::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0,0,0,0.5);
opacity: 0;
transition: opacity 0.3s ease;
}
.portfolio-item1:hover::before {
opacity: 1;
}
.portfolio-container {
display: flex;
flex-wrap: wrap;
gap: 20px;
}
.portfolio-item1 {
flex: 1 1 calc(50% - 10px);
height: 350px;
}
@media screen and (max-width: 768px) {
.portfolio-item1 {
flex: 1 1 100%;
}
}
.portfolio-container {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 20px;
}
@media screen and (max-width: 768px) {
.portfolio-container {
grid-template-columns: 1fr;
}
}
.btn {
background-color: #333;
color: white;
padding: 15px 30px;
border: none;
border-radius: 4px;
font-size: 16px;
cursor: pointer;
transition: all 0.3s ease;
}
.btn:hover {
background-color: #555;
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0,0,0,0.3);
}
.footer {
background-color: #333;
color: white;
text-align: center;
padding: 40px 20px;
margin-top: 60px;
}
.footer p {
margin: 0;
}
<!-- head 태그 내에 필수 메타 태그 추가 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
.clearfix::after {
content: "";
display: table;
clear: both;
}
.overlay-element {
position: relative;
z-index: 10;
}
이 가이드로 실무에서 바로 활용할 수 있는 웹 레이아웃을 구현할 수 있습니다! 🎯