A Pride flag effect for Marketo forms (though maybe too late for 2023) | Community
Skip to main content
SanfordWhiteman
New Participant
May 30, 2023

A Pride flag effect for Marketo forms (though maybe too late for 2023)

  • May 30, 2023
  • 5 replies
  • 2986 views

Yes, it’s almost June! But the other day the idea of “form rows as flag stripes” came to me. Myriad ways to interpret that idea, of course, but here’s what I came up with:

 

My goal was to stick to standard Marketo form HTML, not injecting any new (non-pseudo) elements nor rearranging existing ones. And my custom CSS doesn’t override the native Simple theme.

 

(A custom HTML form could of course do much more, but that defeats the point of “simply” dressing up an existing Marketo form for a special occasion.)

 

To get the effect, we need a tiny snippet of JS and a small amount of CSS.

 

The JS

MktoForms2.whenReady(function (mktoForm) { let formEl = mktoForm.getFormElem()[0], allRows = formEl.querySelectorAll(".mktoFormRow,.mktoButtonRow"), visibleRows = Array.from(allRows).filter( (row) => window.getComputedStyle(row).height !== "0px" ); visibleRows[0].classList.add("flag-top"); visibleRows.forEach((row, idx) => { row.classList.add("flag-stripe"); row.setAttribute("data-flag-stripe-color", idx % 6); }); setTimeout(function () { formEl.setAttribute("data-state", "show"); }, 400); });

 

You might wonder why we need to tag the rows — why not use CSS nth-of-type()?  Well, we only want to use the initially visible rows as stripes to keep to the color sequence, not the rows with Visibility Rule placeholders or hidden fields. So it can’t be pure CSS, though it’s CSS-heavy.

 

The CSS

body { padding: 40px; } .mktoFormRow.flag-top:after { border-radius: 6px 6px 0 0; } .mktoButtonRow:after { border-radius: 0 0 6px 6px; } .mktoForm { perspective: 2000px; border: 1px solid gray; padding: 20px; border-radius: 5px; background-color: whitesmoke; } .mktoButtonRow { width: 100%; } .mktoFormRow, .mktoButtonRow { position: relative; } .mktoFormRow:after, .mktoButtonRow:after { content: ""; width: 100%; height: 100%; right: 0; top: 0; position: absolute; pointer-events: none; } .flag-stripe[data-flag-stripe-color="0"]:after { background-color: #e40303; } .flag-stripe[data-flag-stripe-color="1"]:after { background-color: #ff8c00; } .flag-stripe[data-flag-stripe-color="2"]:after { background-color: #ffed00; } .flag-stripe[data-flag-stripe-color="3"]:after { background-color: #008026; } .flag-stripe[data-flag-stripe-color="4"]:after { background-color: #24408e; } .flag-stripe[data-flag-stripe-color="5"]:after { background-color: #732980; } .mktoFormRow, .mktoButtonRow { transition: transform 1.5s ease-in 0s; } .mktoFormRow:after, .mktoButtonRow:after { transition: transform 1.5s ease-in 0s, width 2s ease-out 1s; } .mktoFormRow, .mktoButtonRow { transform: rotateY(-180deg); } .mktoFormRow:after, .mktoButtonRow:after { transform: rotateY(180deg); } .mktoForm[data-state="show"] .mktoFormRow, .mktoForm[data-state="show"] .mktoButtonRow { transform: rotateY(0); } .mktoForm[data-state="show"] .mktoFormRow:after, .mktoForm[data-state="show"] .mktoButtonRow:after { width: 0; }
It’d be tough to explain the CSS in depth here, but feel free to open the CodePen demo and play around.
This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.

5 replies

Zoe_Forman
Community Manager
July 12, 2023

Neat idea.

SanfordWhiteman
New Participant
June 28, 2023

@kagill16 glad you like it.

kagill16
New Participant
June 27, 2023

Wow very cool, thank you for sharing! May need to implement this next year 😁

SanfordWhiteman
New Participant
June 5, 2023

I'm getting really into flip effects! Working on a Visibility Rules clone that flips fields into place.

Dave_Roberts
New Participant
June 5, 2023

This is really slick, thanks for posting this concept and the code to dig into.

I think the flip and reveal part turned out really sharp -- good stuff here, you got my gears spinning with this one!