Skip to content

样式 CSS

CSS 基础能力

可以直接使用字符串来为 html 写样式,他不会污染全局样式:

tsx
import { Component, h } from 'omi'

@tag('my-element')
class MyElement extends Component {
  // 局部作用域的 css
  static css = 'h1 { color: red }' 

  render() {
    return (
      <h1>Hello, world!</h1>
    )
  }
}
import { Component, h } from 'omi'

@tag('my-element')
class MyElement extends Component {
  // 局部作用域的 css
  static css = 'h1 { color: red }' 

  render() {
    return (
      <h1>Hello, world!</h1>
    )
  }
}

当然你可以通过 vite,导入资源的字符串,这样你的 css 就可以在 css 文件里面写。

tsx
import cssString from './xxx.css?raw'

@tag('my-element')
class MyElement extends Component {
  // 局部作用域的 css
  static css = cssString
  ...
  ...
import cssString from './xxx.css?raw'

@tag('my-element')
class MyElement extends Component {
  // 局部作用域的 css
  static css = cssString
  ...
  ...

共享样式

tsx
import { render, tag, Component, h, css } from 'omi'

// 定义共享样式
const style = css`p { color: green; }`

@tag('el-a')
class ElA extends Component {
  static css = [style]

  render() {
    return (
      <>
        <h3>ElA</h3>
        <p>I am green.</p>
      </>
    )
  }
}

@tag('el-b')
class ElB extends Component {
  // 可以覆盖和叠加共享样式
  static css = [style, 'h3 { color: red; }']

  render() {
    return (
      <>
        <h3>ElB</h3>
        <p>I am green.</p>
      </>
    )
  }
}
import { render, tag, Component, h, css } from 'omi'

// 定义共享样式
const style = css`p { color: green; }`

@tag('el-a')
class ElA extends Component {
  static css = [style]

  render() {
    return (
      <>
        <h3>ElA</h3>
        <p>I am green.</p>
      </>
    )
  }
}

@tag('el-b')
class ElB extends Component {
  // 可以覆盖和叠加共享样式
  static css = [style, 'h3 { color: red; }']

  render() {
    return (
      <>
        <h3>ElB</h3>
        <p>I am green.</p>
      </>
    )
  }
}

在这个例子中,我们定义了一个共享样式,使所有的 <p> 元素变为绿色。然后我们将这个样式应用到两个组件,ElA 和 ElB。在 ElB 中,我们还添加了另一个样式,使所有的 <h3> 元素变为红色,展示了如何覆盖和叠加共享样式。