Style

1. SCSS

Cách tạo và sử dụng file scss

📦src
 ┣ 📂modules
 ┃ ┣ 📂login
 ┃ ┃ ┣ 📜index.tsx
 ┃ ┃ ┣ 📃index.scss

Mỗi file scss đều được tạo chung với component.

File index.tsx

import "./index.scss" // Lưu ý phải bổ sung file index.scss vào
 
export default function Login() {
  return (
    <div className="login-wrapper">
      <div className="login-wrapper-header">
        <div className="login-wrapper-header-title">...</div>
        ...
      </div>
      <div className="login-wrapper-body">...</div>
    </div>
  )
}

File index.scss

.login-wrapper {
  background: yellow;
 
  &:hover {
    cursor: pointer;
  }
 
  .login-wrapper-header {
    &:after {
      position: absolute;
      content: '';
      top: 0;
      right: 0;
      bottom: 32px;
      left: 0;
      background: linear-gradient(180deg, rgba(11, 14, 18, 0.12) 0%, rgba(252, 80, 80, 0.6) 100%);
      border-radius: 2px;
    }
 
    .login-wrapper-header-title {
      ...
    }
  }
 
  .login-wrapper-body {
    ...
  }
}

Lưu trữ các biến để dùng chung nhiều chỗ cho SCSS

SCSS cho phép chúng ta viết biến để sử dụng tại nhiều chỗ nên khi cần đổi lại sẽ đỡ vất vả hơn. Để đạt được điều đó thì ta phải viết các biến màu, font size, line height .

Các biến global scss được viết trong file styles/_global.scss

$border-color: #dee2e6;
$text-color: #000000;
$white-color: #ffffff;
$red-color: #cb2131;
$blue-color: #0092ff;

Các sử dụng. Ví dụ tại file module/home/components/index.scss

.login-wrapper {
  color: $red-color;
  ...
}

Bên cạnh đó, chúng ta có thể sử dụng class có chứa css đó

//File _global.scss
$color-app: (
  "c-warning": #e05347,
  "c-primary-1": #0053cc,
  "c-primary-2": #9757d7,
  "c-primary-3": #ff6838,
  "c-primary-4": #58bd7d,
  "c-secondary-1": #63e59a,
  "c-secondary-2": #e4d7cf,
) !default;

Ngoài ra có thể sử dụng màu bằng class như sau. Ví dụ sử dụng biến màu c-primary-1

export default function Login() {
  return <div className="login-wrapper c-primary-1">...</div>
}

2. Tailwindcss

Tailwindcss là utility css cho phép chúng ta dùng class thay cho css. Ví dụ như thay vì viết style margin-top: 1rem thì ta có thể sử dụng class mt-4

export default function Login() {
  return <div className="mt-4">...</div>
}

Tham khảo thêm các class tại đây: https://tailwindcss.com/docs/

3. Các class tự viết global

Ngoài ra ta có thể tự viết các class tại thư mục styles/mixin rồi bổ sung vào file styles/_app.scss và tất cả các chỗ khác có thể dùng được

Ví dụ File styles/mixin/_event.scss

.no-select {
  -webkit-touch-callout: none; /* iOS Safari */
  -webkit-user-select: none; /* Safari */
  -khtml-user-select: none; /* Konqueror HTML */
  -moz-user-select: none; /* Old versions of Firefox */
  -ms-user-select: none; /* Internet Explorer/Edge */
  user-select: none;
}

File styles/_app.scss

@import "global";
 
@import "mixin/event"; // Import vào file vừa khai báo

Chỗ sử dụng không cần phải import file này vào nếu muốn dùng. Ví dụ

export default function Login() {
  return <div className="hover-pointer">...</div>
}

4. Lưu ý:

  • Luôn đặt tên class cha để bọc các class con nếu không sẽ ảnh hưởng đến các component khác.
  • Không đặt tên class theo kiểu BEM.
  • Không đặt tên class trùng nhau.
  • Tránh dùng style để style mà dùng class thay thế (Trong trường hợp class không đáp ứng được. thì vẫn sẽ được dùng style).
  • Tránh dùng quá nhiều class để style component nếu không trông code sẽ quá dài (Viết class riêng cho trường hợp đó nếu dài ).
  • Khi tự làm thêm class global thì phải kiểm tra xem tên có bị trùng với các class khác không.