Back to CSS Dividers Romantic Dividers Pure CSS
Share
HTML
<div class="div-rom-surface">
  <p class="div-rom-text">They had met, improbably, at a florist's shop on a Tuesday morning in November — he returning peonies that had died too quickly.</p>
  <div class="div-rom-v1" role="separator">
    <svg viewBox="0 0 476 32" fill="none" aria-hidden="true">
      <path class="div-rom-vine div-rom-lv" d="M238 16 C221 9 200 7 179 12 C158 17 137 12 116 16 C95 20 74 15 53 19 C36 22 20 19 0 22" stroke="#c4826a" stroke-width="1.2"/>
      <path class="div-rom-vine div-rom-rv" d="M238 16 C255 9 276 7 297 12 C318 17 339 12 360 16 C381 20 402 15 423 19 C440 22 456 19 476 22" stroke="#c4826a" stroke-width="1.2"/>
      <ellipse cx="179" cy="12" rx="3.5" ry="5.5" transform="rotate(-35 179 12)" fill="#c4826a" class="div-rom-lf" style="--ld:.64s"/>
      <ellipse cx="116" cy="16" rx="3" ry="5" transform="rotate(-20 116 16)" fill="#c4826a" class="div-rom-lf" style="--ld:.74s"/>
      <ellipse cx="53" cy="19" rx="2.8" ry="4.5" transform="rotate(-12 53 19)" fill="#c4826a" class="div-rom-lf" style="--ld:.84s"/>
      <ellipse cx="297" cy="12" rx="3.5" ry="5.5" transform="rotate(35 297 12)" fill="#c4826a" class="div-rom-lf" style="--ld:.68s"/>
      <ellipse cx="360" cy="16" rx="3" ry="5" transform="rotate(20 360 16)" fill="#c4826a" class="div-rom-lf" style="--ld:.78s"/>
      <ellipse cx="423" cy="19" rx="2.8" ry="4.5" transform="rotate(12 423 19)" fill="#c4826a" class="div-rom-lf" style="--ld:.88s"/>
      <circle cx="238" cy="16" r="4.5" fill="#c4826a" class="div-rom-lf" style="--ld:.1s"/>
      <circle cx="238" cy="16" r="7" fill="none" stroke="#c4826a" stroke-width=".8" opacity=".4" class="div-rom-lf" style="--ld:.22s"/>
    </svg>
  </div>
  <p class="div-rom-text">The invitation had arrived on heavy cream stock, hand-addressed in ink the colour of dried roses.</p>
  <div class="div-rom-v2" role="separator">
    <span class="div-rom-petal div-rom-p1">❀</span>
    <span class="div-rom-petal div-rom-p2">❦</span>
    <span class="div-rom-petal div-rom-p3">❀</span>
  </div>
  <p class="div-rom-text">In the old country, weddings lasted three days and left everyone changed — not just the couple but the witnesses too.</p>
  <div class="div-rom-v3" role="separator">
    <span class="div-rom-gems"><i></i><i></i><i></i></span>
  </div>
  <p class="div-rom-text">The flowers were white roses mixed with ranunculus and a single stem of something she couldn't name.</p>
</div>
CSS
@keyframes div-rom-draw { to { stroke-dashoffset: 0; } }
@keyframes div-rom-leaf { to { opacity: 1; } }
@keyframes div-rom-grow { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes div-rom-pop  { from { transform: scale(0); } 55% { transform: scale(1.25); } to { transform: scale(1); } }
@keyframes div-rom-gem  { from { transform: rotate(45deg) scale(0); } 65% { transform: rotate(45deg) scale(1.3); } to { transform: rotate(45deg) scale(1); } }
.div-rom-surface {
  background: #fdf5ed;
  padding: 36px 40px;
  border-radius: 12px;
}
.div-rom-text {
  font-family: Georgia, "Times New Roman", serif;
  font-size: 15px;
  line-height: 1.92;
  color: #4a3728;
  margin: 0;
}
/* v1 — flowering vine draws itself */
.div-rom-v1 { margin: 32px 0; }
.div-rom-v1 svg { display: block; width: 100%; height: 32px; }
.div-rom-vine {
  stroke-dasharray: 320;
  stroke-dashoffset: 320;
  animation: div-rom-draw 1.25s cubic-bezier(.16,1,.3,1) both;
}
.div-rom-rv { animation-delay: 0.05s; }
.div-rom-lf {
  opacity: 0;
  animation: div-rom-leaf 0.35s ease both;
  animation-delay: var(--ld, 0.65s);
}
/* v2 — petal ornament */
.div-rom-v2 {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  margin: 32px 0;
  position: relative;
}
.div-rom-v2::before,
.div-rom-v2::after {
  content: '';
  position: absolute;
  top: 50%;
  width: calc(50% - 40px);
  height: 0.5px;
  animation: div-rom-grow 0.8s cubic-bezier(.16,1,.3,1) 0.42s both;
}
.div-rom-v2::before { left: 0;  background: linear-gradient(to right, transparent, #c4826a); transform-origin: right; }
.div-rom-v2::after  { right: 0; background: linear-gradient(to left, transparent, #c4826a);  transform-origin: left; animation-delay: 0.47s; }
.div-rom-petal {
  color: #c4826a;
  animation: div-rom-pop 0.52s cubic-bezier(.34,1.56,.64,1) both;
}
.div-rom-p1 { font-size: 9px;  animation-delay: 0.08s; }
.div-rom-p2 { font-size: 15px; animation-delay: 0.17s; }
.div-rom-p3 { font-size: 9px;  animation-delay: 0.25s; }
/* v3 — three diamonds between blush rules */
.div-rom-v3 {
  display: flex;
  align-items: center;
  margin: 32px 0;
}
.div-rom-v3::before,
.div-rom-v3::after {
  content: '';
  flex: 1;
  height: 0.5px;
  background: #d4a898;
  animation: div-rom-grow 0.8s cubic-bezier(.16,1,.3,1) 0.4s both;
}
.div-rom-v3::before { transform-origin: right; }
.div-rom-v3::after  { transform-origin: left; animation-delay: 0.45s; }
.div-rom-gems {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 0 16px;
}
.div-rom-gems i {
  display: block;
  width: 7px;
  height: 7px;
  background: #c4826a;
  animation: div-rom-gem 0.45s cubic-bezier(.34,1.56,.64,1) both;
}
.div-rom-gems i:nth-child(1) { animation-delay: 0.17s; }
.div-rom-gems i:nth-child(2) { width: 11px; height: 11px; animation-delay: 0.08s; }
.div-rom-gems i:nth-child(3) { animation-delay: 0.24s; }
@media (prefers-reduced-motion: reduce) {
  .div-rom-vine { animation: none; stroke-dashoffset: 0; }
  .div-rom-lf { animation: none; opacity: 1; }
  .div-rom-v2::before, .div-rom-v2::after, .div-rom-petal,
  .div-rom-v3::before, .div-rom-v3::after { animation: none; }
  .div-rom-gems i { animation: none; transform: rotate(45deg); }
}