Learn how to create a flyer template using HTML and CSS with simple steps. Perfect for events, promos, or personal use.
Table of Contents
Want to design a flyer for an event, product, or announcement without using Photoshop? With just HTML and CSS, you can easily build a professional-looking flyer template right in your browser!
In this blog, we’ll walk you through a step-by-step guide to create a responsive flyer template using simple HTML and CSS. This method is great for beginners or anyone wanting to make quick, beautiful flyers without complex tools.
Prerequisites
Before starting, make sure you have:
- Basic understanding of HTML and CSS
- A code editor like VS Code, Sublime Text, or Notepad++
- A modern web browser (like Chrome or Firefox)
Source Code
Step 1 (HTML Code):
To get started, we first need to create a basic HTML file. In this file, we will include the main structure for our flyer. Lets break down the HTML code step by step:
1. Document Type and HTML Structure
<!DOCTYPE html>
<html lang="en">
- Declares the document as an HTML5 document.
- Sets the language of the page to English (lang="en").
2. <head> Section
Contains metadata, styles, fonts, and title.
<head>
<meta charset="UTF-8">
- Sets character encoding to UTF-8 (supports all common characters).
<meta name="viewport" content="width=device-width, initial-scale=1.0">
- Ensures responsive design on mobile devices.
<title>Event Flyer Template</title>
- Sets the title shown in the browser tab.
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
- Preconnects to Google Fonts to load faster.
<link href="https://fonts.googleapis.com/css2?family=...&display=swap" rel="stylesheet">
- Loads custom fonts: Cormorant Garamond and Montserrat.
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
- Loads Font Awesome for icons.
<link rel="stylesheet" href="styles.css">
- Links to a custom CSS file for styling (styles.css).
3. <body> Content
Main flyer layout inside a wrapper div.luxe-flyer.
3.1. Border Decorations
<div class="gold-border border-top"></div>
<div class="gold-border border-left"></div>
<div class="gold-border border-right"></div>
<div class="gold-border border-bottom"></div>
- Decorative golden borders on all sides of the flyer using CSS classes.
3.2. Header Section
<div class="header-section">
<div class="date-ribbon">15 • NOV • 2025</div>
<h1 class="event-title">LUXE</h1>
<p class="event-subtitle">The Premium Experience</p>
</div>
- Displays the event date, title, and subtitle.
3.3. Content Section (Split Columns)
<div class="content-section">
Left Column: Event Details
<div class="details-column">
<div class="detail-item">...</div>
</div>
- Lists:
- Time: Event and VIP reception time.
- Location: Address of the venue.
- Dress Code: Recommended attire.
- Special Guests: Who will attend/perform.
<i class="fas fa-asterisk ornament ornament-1"></i>
- Decorative icon using Font Awesome.
Right Column: Description and Highlights
<div class="description-column">
<h2 class="section-title">Event Details</h2>
<p class="event-description">...</p>
- Describes the theme of the event.
- Highlights featured experiences like:
- Art installations
- Culinary journey by Michelin-starred chefs
- Limited guest list
- RSVP note
<i class="fas fa-plus ornament ornament-2"></i>
- Additional decorative icon.
3.4. Footer Section
<div class="footer-section">
<button class="cta-button">Request Invitation</button>
- A Call-To-Action button for users to request invites.
<div class="social-media">
<a href="#"><i class="fab fa-instagram"></i></a>
<a href="#"><i class="fab fa-pinterest-p"></i></a>
<a href="#"><i class="far fa-envelope"></i></a>
<a href="#"><i class="fab fa-xing"></i></a>
</div>
- Social media links with Font Awesome icons.
Step 2 (CSS Code):
Once the basic HTML structure of the flyer is in place, the next step is to add styling to the flyer using CSS. Lets break down the CSS code step by step:
1. CSS Variables
:root {
--gold: #d4af37;
--deep-navy: #0a1a2f;
--cream: #f5f0e6;
--light-gold: #e8d9b5;
--dark-charcoal: #1e1e1e;
--transparent-gold: rgba(212, 175, 55, 0.2);
}
Defines custom variables (CSS custom properties) to ensure consistent theming across the flyer. Example:
- --gold: elegant golden color
- --deep-navy: dark blue for background
- --transparent-gold: a semi-transparent gold used for borders, backgrounds, etc.
2. Global Reset and Base Styles
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
- Resets default browser styling for consistent layout.
body {
font-family: 'Montserrat', sans-serif;
background-color: var(--deep-navy);
color: var(--cream);
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
padding: 2rem;
overflow-x: hidden;
}
- Applies the background color and text color
- Uses Flexbox to center .luxe-flyer both vertically and horizontally
- Ensures the full height is occupied
3. Main Flyer Layout
.luxe-flyer { ... }
- A container for all content
- Uses gradient background, shadow, blurred glass effect, and a background image overlay using ::before.
.luxe-flyer::before { ... }
- Adds a subtle background image with low opacity for elegance.
4. Golden Borders
.gold-border, .border-top, .border-left, .border-right, .border-bottom { ... }
Creates thin gold borders around the flyer using absolutely positioned <div>s.
5. Header Section Styling
.header-section { ... }
.event-title { ... }
.event-title::after { ... }
.event-subtitle { ... }
.date-ribbon { ... }
- .header-section: top area with padding and border
- .event-title: large serif title in gold, all uppercase, with a decorative line under it
- .event-subtitle: elegant subtitle with lighter font and spacing
- .date-ribbon: rotated golden box on top-right showing event date
6. Content Section (Two Columns)
.content-section {
display: grid;
grid-template-columns: 1fr 1.5fr;
}
- Grid layout with two columns: left (.details-column) and right (.description-column).
Left Column: Event Details
.details-column { ... }
.detail-item { ... }
.detail-item::before { ... }
.detail-label { ... }
.detail-content { ... }
- Contains event time, location, dress code, etc.
- ::before adds a golden bullet point before each detail item
- .detail-label: styled header
- .detail-content: description text
Right Column: Description
.description-column { ... }
.section-title { ... }
.section-title::after { ... }
.event-description { ... }
.highlight-box { ... }
.highlight-title { ... }
- .section-title: styled header with golden underline
- .highlight-box: highlighted experience section with a gold border
- .event-description: detailed text of the event
7. Footer Section
.footer-section { ... }
.cta-button { ... }
.cta-button::before { ... }
.cta-button:hover { ... }
.social-media, .social-icon, .social-icon:hover { ... }
- .cta-button: request invitation button with hover effect that changes background color
- .social-media: row of social icons
- .social-icon:hover: lifts icon and changes color to gold on hover
8. Decorative Icons
.ornament, .ornament-1, .ornament-2 { ... }
- Adds large transparent icons (like asterisk and plus) in background as elegant ornaments
9. Responsive Design
For Tablets (max-width: 768px)
@media (max-width: 768px) {
...
}
- Switches grid to a single column
- Adjusts font sizes and padding
- Makes .date-ribbon non-rotated and repositioned for mobile layout
For Phones (max-width: 480px)
@media (max-width: 480px) {
...
}
- Reduces font sizes even further
- Adjusts padding for small screens
For Printing
@media print {
...
}
- Removes background and shadow
- Keeps borders and ensures button styling is preserved on print
:root {
--gold: #d4af37;
--deep-navy: #0a1a2f;
--cream: #f5f0e6;
--light-gold: #e8d9b5;
--dark-charcoal: #1e1e1e;
--transparent-gold: rgba(212, 175, 55, 0.2);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Montserrat', sans-serif;
background-color: var(--deep-navy);
color: var(--cream);
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
padding: 2rem;
overflow-x: hidden;
}
.luxe-flyer {
width: 100%;
max-width: 900px;
background: linear-gradient(
145deg,
rgba(10, 26, 47, 0.9),
rgba(5, 15, 30, 0.95)
);
border: 1px solid var(--transparent-gold);
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
position: relative;
overflow: hidden;
backdrop-filter: blur(5px);
}
.luxe-flyer::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: url('https://images.unsplash.com/photo-1492684223066-81342ee5ff30?ixlib=rb-1.2.1&auto=format&fit=crop&w=1350&q=80')
center/cover no-repeat;
opacity: 0.15;
z-index: -1;
}
.gold-border {
position: absolute;
background: var(--gold);
}
.border-top {
top: 0;
left: 0;
width: 100%;
height: 4px;
}
.border-left {
top: 0;
left: 0;
width: 4px;
height: 100%;
}
.border-right {
top: 0;
right: 0;
width: 4px;
height: 100%;
}
.border-bottom {
bottom: 0;
left: 0;
width: 100%;
height: 4px;
}
.header-section {
padding: 3rem 4rem 2rem;
position: relative;
border-bottom: 1px solid var(--transparent-gold);
}
.event-title {
font-family: 'Cormorant Garamond', serif;
font-size: 4.5rem;
font-weight: 600;
color: var(--gold);
letter-spacing: 2px;
margin-bottom: 0.5rem;
line-height: 1;
text-transform: uppercase;
position: relative;
display: inline-block;
}
.event-title::after {
content: '';
position: absolute;
bottom: -10px;
left: 0;
width: 100%;
height: 1px;
background: linear-gradient(90deg, var(--gold), transparent);
}
.event-subtitle {
font-family: 'Cormorant Garamond', serif;
font-size: 1.5rem;
font-weight: 300;
letter-spacing: 5px;
color: var(--light-gold);
margin-bottom: 1.5rem;
text-transform: uppercase;
}
.date-ribbon {
background: var(--gold);
color: var(--deep-navy);
padding: 0.8rem 2rem;
display: inline-block;
font-weight: 500;
letter-spacing: 2px;
position: absolute;
top: 3rem;
right: -1rem;
transform: rotate(5deg);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
}
.content-section {
display: grid;
grid-template-columns: 1fr 1.5fr;
min-height: 400px;
}
.details-column {
padding: 2rem 3rem;
border-right: 1px solid var(--transparent-gold);
position: relative;
}
.detail-item {
margin-bottom: 2rem;
position: relative;
padding-left: 1.5rem;
}
.detail-item::before {
content: '•';
position: absolute;
left: 0;
color: var(--gold);
font-size: 1.5rem;
}
.detail-label {
font-family: 'Cormorant Garamond', serif;
font-size: 1.1rem;
color: var(--gold);
margin-bottom: 0.3rem;
letter-spacing: 1px;
}
.detail-content {
font-size: 0.95rem;
line-height: 1.6;
font-weight: 300;
}
.description-column {
padding: 2rem 3rem;
position: relative;
}
.section-title {
font-family: 'Cormorant Garamond', serif;
font-size: 1.8rem;
color: var(--gold);
margin-bottom: 1.5rem;
position: relative;
display: inline-block;
}
.section-title::after {
content: '';
position: absolute;
bottom: -5px;
left: 0;
width: 50%;
height: 1px;
background: var(--gold);
}
.event-description {
font-size: 0.95rem;
line-height: 1.8;
margin-bottom: 2rem;
font-weight: 300;
}
.highlight-box {
background: var(--transparent-gold);
border-left: 3px solid var(--gold);
padding: 1.5rem;
margin-bottom: 2rem;
}
.highlight-title {
font-family: 'Cormorant Garamond', serif;
color: var(--gold);
margin-bottom: 0.5rem;
font-size: 1.2rem;
}
.footer-section {
padding: 2rem 4rem;
display: flex;
justify-content: space-between;
align-items: center;
border-top: 1px solid var(--transparent-gold);
}
.cta-button {
background: transparent;
color: var(--gold);
border: 1px solid var(--gold);
padding: 0.8rem 2.5rem;
font-size: 0.9rem;
letter-spacing: 2px;
text-transform: uppercase;
cursor: pointer;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
font-weight: 300;
}
.cta-button::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: var(--gold);
transition: all 0.4s ease;
z-index: -1;
}
.cta-button:hover {
color: var(--deep-navy);
}
.cta-button:hover::before {
left: 0;
}
.social-media {
display: flex;
gap: 1.5rem;
}
.social-icon {
color: var(--cream);
font-size: 1.2rem;
transition: all 0.3s ease;
}
.social-icon:hover {
color: var(--gold);
transform: translateY(-3px);
}
.ornament {
position: absolute;
opacity: 0.1;
z-index: 0;
}
.ornament-1 {
top: 50%;
left: -50px;
font-size: 10rem;
transform: rotate(-15deg);
color: var(--gold);
}
.ornament-2 {
bottom: -30px;
right: -30px;
font-size: 8rem;
transform: rotate(15deg);
color: var(--gold);
}
@media (max-width: 768px) {
.content-section {
grid-template-columns: 1fr;
}
.details-column {
border-right: none;
border-bottom: 1px solid var(--transparent-gold);
}
.event-title {
font-size: 3rem;
}
.header-section,
.footer-section {
padding: 2rem;
}
.date-ribbon {
position: relative;
top: auto;
right: auto;
transform: none;
margin-top: 1rem;
display: block;
width: fit-content;
}
}
@media (max-width: 480px) {
.event-title {
font-size: 2.2rem;
}
.event-subtitle {
font-size: 1.1rem;
letter-spacing: 3px;
}
.details-column,
.description-column {
padding: 1.5rem;
}
}
@media print {
body {
background: none;
padding: 0;
}
.luxe-flyer {
box-shadow: none;
border: 1px solid var(--gold);
}
.cta-button {
border: 1px solid var(--gold) !important;
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
}
} Final Output:
Conclusion:
Creating a flyer doesn’t need to be complicated or expensive. With basic knowledge of HTML and CSS, you can design beautiful, professional-looking flyers for any purpose – whether it's a party, seminar, concert, or business event.
This template is lightweight, easy to edit, and loads fast, making it great for web use or even printing as a PDF.
That’s a wrap!
I hope you enjoyed this post. Now, with these examples, you can create your own amazing page.
Did you like it? Let me know in the comments below 🔥 and you can support me by buying me a coffee
And don’t forget to sign up to our email newsletter so you can get useful content like this sent right to your inbox!
Thanks!
Faraz 😊


