0Pricing
CSS Academy · Pelajaran

Emotion: css() dan styled()

Terapkan gaya dinamis dengan pembantu css() milik Emotion dan pabrik komponen styled().

Emotion: css() dan styled() adalah pelajaran CSS Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar CSS Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus CSS Academy mencakup 4 pelajaran total.

Apa itu Emotion?

Emotion adalah pustaka CSS-in-JS dengan API yang fleksibel. Pustaka ini menawarkan dua pendekatan utama: fungsi css() (tidak bergantung pada kerangka kerja) dan API styled() (serupa dengan styled-components). Keduanya secara otomatis menghasilkan nama kelas dengan cakupan terbatas.

Menginstal Emotion

Ada dua paket, tergantung kebutuhan Anda:

npm install @emotion/react    # css prop and Global
npm install @emotion/styled   # styled() API
npm install @emotion/css      # framework-agnostic

Fungsi css()

Fungsi css() menghasilkan nama kelas dari objek CSS atau literal templat:

import { css } from '@emotion/css';

const buttonStyle = css`
  background: royalblue;
  color: white;
  padding: 10px 20px;
  border-radius: 4px;
`;

function Button({ children }) {
  return <button className={buttonStyle}>{children}</button>;
}

Objek CSS dengan css()

Sintaks objek adalah alternatif untuk literal templat—berguna untuk pelengkapan otomatis TypeScript:

const cardStyle = css({
  background: 'white',
  borderRadius: '8px',
  padding: '24px',
  boxShadow: '0 4px 16px rgba(0,0,0,0.1)'
});

API styled()

styled milik Emotion bekerja sama persis dengan styled-components untuk memudahkan migrasi di antara keduanya:

import styled from '@emotion/styled';

const Card = styled.div`
  background: white;
  border-radius: 8px;
  padding: 24px;
`;

const FeaturedCard = styled(Card)`
  border: 2px solid gold;
`;

Properti css (Penataan Gaya Sebaris)

Properti css milik Emotion memungkinkan Anda menulis gaya langsung pada elemen JSX—tanpa memerlukan komponen tambahan. Properti ini memerlukan paket @emotion/react dan pengaya Babel/SWC:

/** @jsxImportSource @emotion/react */

function Component() {
  return (
    <div css={{ background: 'white', padding: '24px' }}>
      Content
    </div>
  );
}

Gaya Dinamis dengan Emotion

Kedua API menerima fungsi yang menerima properti untuk menghasilkan nilai dinamis:

const Badge = styled.span`
  background: ${({ variant }) => variant === 'error' ? 'crimson' : 'royalblue'};
  color: white;
  padding: 2px 8px;
  border-radius: 9999px;
`;

Gaya Global

Gunakan Global dari @emotion/react untuk CSS global:

import { Global, css } from '@emotion/react';

function App() {
  return (
    <>
      <Global styles={css`
        *, *::before, *::after { box-sizing: border-box; }
        body { margin: 0; }
      `} />
    </>
  );
}

Emotion vs styled-components

Emotion dan styled-components memiliki API yang hampir sama. Emotion memiliki kinerja yang sedikit lebih baik dalam pengujian tolok ukur, ukuran bundel yang lebih kecil, serta properti css sebagai API tambahan. Keduanya merupakan pilihan yang telah terbukti untuk aplikasi React di produksi.

Keyframes di Emotion

Tentukan animasi dengan pembantu keyframes:

import { keyframes, css } from '@emotion/react';

const bounce = keyframes`
  from { transform: translateY(0); }
  to   { transform: translateY(-20px); }
`;

const animated = css`
  animation: ${bounce} 1s ease-in-out infinite alternate;
`;

Penyajian Sisi Server

Emotion mendukung SSR melalui extractCriticalToChunks() untuk mengumpulkan dan menyisipkan CSS penting selama penyajian di server pada kerangka kerja React seperti Next.js.

Pemeriksaan Singkat

Apa perbedaan utama antara fungsi css() milik Emotion dan API styled()-nya?

Rangkuman

Emotion menawarkan dua API penataan gaya utama: css() menghasilkan nama kelas (diterapkan melalui className), sedangkan styled() membuat komponen React dengan gaya. Properti css memungkinkan penulisan yang menyerupai gaya sebaris dengan kemampuan CSS penuh. Emotion sangat kompatibel dengan styled-components dalam hal cakupan API dan sering kali lebih cepat. Kedua pendekatan secara otomatis membatasi cakupan gaya menggunakan nama kelas yang dihasilkan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Emotion: css() dan styled()” gratis?

Ya — teks lengkap “Emotion: css() dan styled()” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus CSS Academy, upgrade ke CoddyKit PRO. Kursus CSS Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Emotion: css() dan styled()”?

Terapkan gaya dinamis dengan pembantu css() milik Emotion dan pabrik komponen styled(). Kamu berlatih CSS Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai CSS Academy?

Tidak diperlukan pengalaman sebelumnya. CSS Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Emotion: css() dan styled()” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran CSS Academy ini?

Ya. Setiap pelajaran CSS Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Styled-components: Literal Templat Bertanda
  2. Emotion: css() dan styled()
  3. CSS Modules: Gaya Terlingkup
  4. Vanilla Extract: CSS-in-JS Tanpa Waktu Jalan
← Kembali ke CSS Academy