Membuat Marquee Animation HTML CSS

2 Juni 2023
Membuat Marquee Animation HTML CSS

Sharing Teknologi – Membuat Marquee Animation Effect HTML CSS Di WordPress. Apakah Sobat teknologi [dot] visitklaten [dot] com ingin Membuat Marquee Animation HTML CSS Di WordPress. 

Membuat Marquee Animation HTML CSS

CSS adalah singkatan dari Cascading Style Sheets yang terdapat 3 versi yaitu CSS1, CSS2, dan CSS3. CSS adalah suatu aturan untuk mengatur beberapa komponen di dalam sebuah web sehingga membuat lebih terstruktur dan seragam.

CSS3 merupakan versi CSS terbaru yang bisa melakukan banyak hal terkait desain website. CSS3 mampu membuat animasi warna sampai animasi 3D di halaman website.

CSS sangat membantu untuk mempercantik tampilan website seperti dengan memberi warna, box shadow, padding, margin, align, posisi, dan efek pengetikan atau typing effect .

HTML (Hypertext markup language) adalah sebuah bahasa markah (markup language) yang paling mendominasi saat ini dalam hal pembuatan sebuah website.

Dengan adanya HTML, maka sebuah website bisa dikreasikan sedemikian rupa menjadi lebih interaktif dan menarik. Karena HTML memadukan berbagai elemen seperti teks, multimedia, dan link, dan juga elemen pendukung lainnya menjadi sebuah kesatuan.

Sebelumnya kami mengucapkan banyak terima kasih kepada para pengunjung teknologi[dot]visitklaten[dot]com yang rela meluangkan waktu untuk mengunjungi ataupun sekedar melihat-lihat web kami yang masih banyak kekurangan ini. Kami menerima segala masukkan dan kritikan agar web dan diri kami menjadi lebih baik lagi..

Di kesempatan kali ini, kami akan berbagi tutorial Membuat Marquee Animation Menggunakan HTML CSS. 

NB: kami menggunakan tambahan CSS dari bootstrap.

Membuat Marquee Animation

Silakan Copas kode dibawah ini. Rekan-rekan bisa mengubahnya sesuai dengan kebutuhan. 

Untuk contoh hasilnya ada di paling bawah ya, silakan scroll ke bawah.

HTML
<div class="cssmarquee position-relative p-3 my-1 overflow-hidden">
	<div class="cssmarquee-frame">
	<section>
	  <div class="h5 textfrost-gradient h3style">Full-width (default)</div>
	  <input id="enable-animation-1" class="pointer" type="checkbox" />
	  <label for="enable-animation-1">Enable animation</label>

	  <div class="marquee">
		<ul class="marquee__content mt-3">
		  <li>1</li>
		  <li>2</li>
		  <li>3</li>
		  <li>4</li>
		  <li>5</li>
		  <li>6</li>
		</ul>

		<ul aria-hidden="true" class="marquee__content mt-3">
		  <li>1</li>
		  <li>2</li>
		  <li>3</li>
		  <li>4</li>
		  <li>5</li>
		  <li>6</li>
		</ul>
	  </div>
	</section>

	<section>
	  <div class="h5 textfrost-gradient h3style">Reverse</div>
	  <input id="enable-animation-2" class="pointer"  type="checkbox" />
	  <label for="enable-animation-2">Enable animation</label>

	  <div class="marquee marquee--reverse">
		<ul class="marquee__content mt-3">
		  <li>1</li>
		  <li>2</li>
		  <li>3</li>
		  <li>4</li>
		  <li>5</li>
		  <li>6</li>
		</ul>

		<ul aria-hidden="true" class="marquee__content mt-3">
		  <li>1</li>
		  <li>2</li>
		  <li>3</li>
		  <li>4</li>
		  <li>5</li>
		  <li>6</li>
		</ul>
	  </div>
	</section>

	<section>
	  <div class="h5 textfrost-gradient h3style">Pause on hover</div>
	  <input id="enable-animation-3"  class="pointer" type="checkbox" />
	  <label for="enable-animation-3">Enable animation</label>

	  <div class="marquee marquee--hover-pause">
		<ul class="marquee__content mt-3">
		  <li>1</li>
		  <li>2</li>
		  <li>3</li>
		  <li>4</li>
		  <li>5</li>
		  <li>6</li>
		</ul>

		<ul aria-hidden="true" class="marquee__content mt-3">
		  <li>1</li>
		  <li>2</li>
		  <li>3</li>
		  <li>4</li>
		  <li>5</li>
		  <li>6</li>
		</ul>
	  </div>
	</section>

	<section>
	  <div class="h5 textfrost-gradient h3style">Fit content</div>
	  <input id="enable-animation-4"  class="pointer" type="checkbox" />
	  <label for="enable-animation-4">Enable animation</label>

	  <div class="marquee marquee--fit-content">
		<ul class="marquee__content mt-3">
		  <li>1</li>
		  <li>2</li>
		  <li>3</li>
		</ul>

		<ul aria-hidden="true" class="marquee__content mt-3">
		  <li>1</li>
		  <li>2</li>
		  <li>3</li>
		</ul>
	  </div>
	</section>

	<section>
	  <div class="h5 textfrost-gradient h3style">Fit content + position absolute :last-child</div>
	  <input id="enable-animation-5" class="pointer" type="checkbox" />
	  <label for="enable-animation-5">Enable animation</label>

	  <div class="marquee marquee--fit-content marquee--pos-absolute">
		<ul class="marquee__content mt-3">
		  <li>1</li>
		  <li>2</li>
		  <li>3</li>
		</ul>

		<ul aria-hidden="true" class="marquee__content mt-3">
		  <li>1</li>
		  <li>2</li>
		  <li>3</li>
		</ul>
	  </div>
	</section>
	</div>
</div>

 

Style CSS
/* Marquee styles */
.cssmarquee-frame .marquee {
  --gap: 1rem;
  position: relative;
  display: flex;
  overflow: hidden;
  user-select: none;
  gap: var(--gap);
}

.cssmarquee-frame .marquee__content {
  flex-shrink: 0;
  display: flex;
  justify-content: space-around;
  gap: var(--gap);
  min-width: 100%;
}

@keyframes scroll {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(calc(-100% - var(--gap)));
  }
}

/* Pause animation when reduced-motion is set */
@media (prefers-reduced-motion: reduce) {
 .cssmarquee-frame  .marquee__content {
    animation-play-state: paused !important;
  }
}

/* Enable animation */
.cssmarquee-frame .enable-animation .marquee__content {
  animation: scroll 10s linear infinite;
}

/* Reverse animation */
.cssmarquee-frame .marquee--reverse .marquee__content {
  animation-direction: reverse;
}

/* Pause on hover */
.cssmarquee-frame .marquee--hover-pause:hover .marquee__content {
  animation-play-state: paused;
}

/* Attempt to size parent based on content. Keep in mind that the parent width is equal to both content containers that stretch to fill the parent. */
.cssmarquee-frame .marquee--fit-content {
  max-width: fit-content;
}

/* A fit-content sizing fix: Absolute position the duplicate container. This will set the size of the parent wrapper to a single child container. Shout out to Olavi's article that had this solution*/
.cssmarquee-frame .marquee--pos-absolute .marquee__content:last-child {
  position: absolute;
  top: 0;
  left: 0;
}

/* Enable position absolute animation on the duplicate content (last-child) */
.cssmarquee-frame .enable-animation .marquee--pos-absolute .marquee__content:last-child {
  animation-name: scroll-abs;
}

@keyframes scroll-abs {
  from {
    transform: translateX(calc(100% + var(--gap)));
  }
  to {
    transform: translateX(0);
  }
}

/* Other page demo styles */
.cssmarquee-frame .marquee__content > * {
  flex: 0 0 auto;
  color: white;
  background: dodgerblue;
  margin: 2px;
  padding: 1rem 2rem;
  border-radius: 0.25rem;
  text-align: center;
}

.cssmarquee-frame .marquee {
  border: 2px dashed lightgray;
}


.cssmarquee-frame .cssmarquee-frame {
  padding: 2rem;
  width: 100%;
  min-height: 100vh;
  font-family: system-ui, sans-serif;
  font-size: 1rem;
  line-height: 1.5;
}


.cssmarquee-frame section {
  margin-block: 3rem;
}

.cssmarquee-frame section > * + * {
  margin-block-start: 0.5rem;
}

 

JavaScript
jQuery(document).ready(function ($) {
const sections = document.querySelectorAll("section");

[...sections].forEach((section) => {
  const checkbox = section.querySelector("input");

  checkbox.addEventListener("change", () => {
    section.classList.toggle("enable-animation");
  });
}); 
});

 

Hasil

Tampilannya kurang lebih bisa dilihat dibawah ini.

Full-width (default)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
Reverse
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
Pause on hover
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
Fit content
  • 1
  • 2
  • 3
Fit content + position absolute :last-child
  • 1
  • 2
  • 3

 

Terima kasih telah mengunjungi website kami.

Share jika bermanfaat, jika ada kritik, tambahan, pertanyaan atau saran silakan hubungi kami atau silakan isi di kolom komentar.

Referensi :
codepen.io/hexagoncircle/pen/eYMrGwW
bootstrap css
Image by vectorpouch on Freepik

Postingan Terkait

Komentar

Leave a Comment

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.

Scroll to Top