Tailwind.css'de basit animasyonlu analog saat

Yalnızca Tailwind.css'de animasyonlu çok basit bir analog saat nasıl oluşturulur?

Otomatik Arka Rüzgâr

Üzerinde çalıştığım projeler için detay sayfasını tasarlarken (portföy sayfamdan edinilebilir), projenin süresinin yanında oluşturulan basit bir animasyonlu analog saat de uyguladım.

Herhangi bir yeni harici kitaplık veya video kullanmak istemediğim için saati Tailwind.css ve harika animasyon yardımcı programları aracılığıyla uygulamaya karar verdim.

Kod örnekleri

Söyleyecek fazla bir şey yok, çünkü yeniden kullanılabilirlik için bazı kod örnekleri vermemin sizin için daha yararlı olacağını düşündüm.

Her örnekteki düzen hemen hemen aynı, çok benzer. Sadece üst üste mutlak konumlandırma yoluyla bazı div kutuları oluşturuyorum. Her kutu yalnızca mevcut en küçük genişliğe sahip olduğundan, saatte görünen imleçler gibi görünürler.

Son örnek, saat 12'de nasıl başlayacağını gösterir. İlk iki örneğin her biri, sıraya yerleştirildikleri gibi saat 3'te başlar.

Örnek 1: En basit saat

Image dbead4b8e463

export function Clock() {
  return (
    <div className="flex justify-center py-10 group">
      <div className="relative flex items-center justify-end w-20 h-20 overflow-hidden bg-gray-900 rounded-full ">
        <div className="absolute w-1/2 h-1 bg-white rounded-full origin-left -rotate-12 group-hover:rotate-[215deg] duration-1000 ease-in-out" />

        <div className="absolute w-1/2 h-1  origin-left rotate-[70] group-hover:rotate-[340deg] duration-1000 ease-in-out">
          <div className="w-2/3 h-full bg-white rounded-full" />
        </div>

        <div className="absolute flex justify-center flex-1 w-full">
          <div className="w-1 h-1 bg-white rounded-full" />
        </div>
      </div>
    </div>
  );
}

Örnek 2: kenarlıklı ve göstergeli saat

Image 06597167696f

import React from "react";
// Note that I'm using 'clsx' for
// composing classnames.
import clsx from "clsx";

export function Clock() {
  return (
    <div className="relative flex items-center justify-end w-20 h-20 overflow-hidden rounded-full ring-gray-600 ring-1">
      {Array.from({ length: 8 }, (_, i) => (
        <div
          key={i}
          style={{ height: 1 }}
          className={clsx("absolute w-1/2 origin-left flex justify-end", {
            "rotate-0": i === 0,
            "rotate-45": i === 1,
            "rotate-90": i === 2,
            "rotate-[135deg]": i === 3,
            "rotate-180": i === 4,
            "rotate-[225deg]": i === 5,
            "rotate-[270deg]": i === 6,
            "rotate-[315deg]": i === 7,
          })}>
          <div className="w-1/3 h-full bg-gray-600 rounded-full" />
        </div>
      ))}

      <div className="absolute w-1/2 h-1 bg-gray-300 rounded-full origin-left -rotate-12 group-hover:rotate-[215deg] duration-1000 ease-in-out" />

      <div className="absolute w-1/2 h-1  origin-left rotate-[85deg] group-hover:rotate-[340deg] duration-1000 ease-in-out">
        <div className="w-2/3 h-full bg-gray-300 rounded-full" />
      </div>

      <div className="absolute flex justify-center flex-1 w-full">
        <div className="w-1 h-1 bg-gray-300 rounded-full" />
      </div>
    </div>
  );
}

Örnek 3: gece yarısında başlayan saat

Image c2d6bdde9e1e

export function Clock() {
  return (
    <div className="flex justify-center py-10 group">
      <div className="relative flex flex-col items-center justify-start w-20 h-20 overflow-hidden bg-gray-900 rounded-full ">
        <div className="absolute w-1 duration-1000 ease-in-out origin-bottom bg-gradient-to-t from-white to-red-400 rounded-full h-1/2 group-hover:rotate-[200deg]" />

        <div className="absolute h-1/2 w-1 origin-bottom rotate-[55deg] group-hover:rotate-[340deg] duration-1000 ease-in-out flex flex-col justify-end">
          <div className="w-full rounded-full bg-gradient-to-t from-white to-blue-400 h-2/3" />
        </div>

        <div className="absolute flex items-center justify-center flex-1 w-full h-full">
          <div className="w-1 h-1 bg-white rounded-full" />
        </div>
      </div>
    </div>
  );
}