添加 svg 图像作为语义输入的图标 UI

Add svg image as icon for Input of Semantic UI

我正在使用语义输入 UI 来创建搜索输入:

import React from 'react';
import { Input } from 'semantic-ui-react';

export default ({ placeholder, onChange }) => {
  return (
    <Input
      icon="search"
      icon={<img src={searchIcon} />}
      iconPosition="left"
      placeholder={placeholder}
      onChange={onChange}
    />
  );
};

效果很好,看起来不错。

问题是我需要用 svg 图像更改它的图标。所以 svg 被导入到文件中并像这样使用:

import React from 'react';
import { Input } from 'semantic-ui-react';
import searchIcon from '../../assets/icons/searchIcon.svg';

export default ({ placeholder, onChange }) => {
  return (
    <Input
      icon={<img src={searchIcon} />}
      iconPosition="left"
      placeholder={placeholder}
      onChange={onChange}
    />
  );
};

问题是它将图标放在了输入框的右侧。 它应该在输入内部和左侧部分。

添加svg后样式没有变化,为什么和原来的图标位置不一样?

很可能semantic-ui 在我们通过属性“icon”添加一些图标时添加特殊样式。 Semantic-ui-react 不支持自定义图标。 :,(

在类型声明中我们可以读到: /** Optional Icon to display inside the Input. */icon?: any | SemanticShorthandItem<InputProps>

我的提议:在CSS中添加一些样式,像我在sandbox

中一样
.input {
  position: relative;
  width: fit-content;
  display: flex;
  justify-content: center;
  align-items: center;
}
img {
  position: absolute;
  right: 5px;
  width: 10px;
}

我通过传递自定义组件使其工作,其中 svg 图像由 i 标签包裹,该标签具有 icon class:

const CustomIcon = (
  <i className="icon">
    <img width={38} height={38} src={searchIcon} />
  </i>
);

const App = () => {
  return (
    <Input icon={CustomIcon} iconPosition="left" placeholder="placeholder" />
  );
};

这种方法的好处是您可以更改 iconPosition 而不会破坏这种方法的样式。


为了提供更多上下文,图标显示在正确位置是由于应用于此选择器的样式:.ui.icon.input>i.icon。因为它需要 i 标签,所以如果您不将图像包裹在 i 标签之间,则不会应用样式。