在 React 中使用样式化组件重叠左侧部分输入

Posted

技术标签:

【中文标题】在 React 中使用样式化组件重叠左侧部分输入【英文标题】:Overlap Left Part Input using Styled Components in React 【发布时间】:2021-10-26 09:28:12 【问题描述】:

我需要在 React 中使用 styled-components 重叠 Input 的左侧部分。只有在重叠之后,他才能在右侧写字。

代码沙盒在这里CLICK HERE

如下图:

const TextInput = styled.input`
  font-size: 16px;
  padding: 10px 10px 10px 10px;
  display: block;
  border: 2px solid #e3e5e5;
  border-radius: 8px;
  height: 28px;
  width: 100%;
  &:focus 
    outline: none;
  
`;

【问题讨论】:

请详细说明要做什么以及您面临的问题。重叠不理解 @Hitech Hitesh。你是怎么做到的,像上图,左边,testing name 【参考方案1】:

我会将边框样式和布局推送到Wrapper 组件。添加样式标签组件。

代码

const Wrapper = styled.div`
  width: 100%;
  position: relative;
  margin-bottom: 1rem;
  display: flex;
  flex-direction: row;
  border: 2px solid #e3e5e5;
  border-radius: 8px;
  overflow: hidden;
`;

const InputLabel = styled.label`
  background-color: #e3e5e5;
  color: gray;
  display: flex;
  flex-direction: column;
  font-size: 16px;
  height: 28px;
  justify-content: center;
  padding: 10px;
  width: auto; // <-- can set to specific width for consistency
`;

const TextInput = styled.input`
  border-width: 0;
  flex: 1;
  font-size: 16px;
  height: 28px;
  padding: 10px;
  outline: none;
`;

const TextError = styled.span`
  display: block;
  font-size: 12px;
  color: #ff0000;
  line-height: 14px;
  font-weight: bold;
  margin-top: 11px;
`;

const Input = (
  label,
  name,
  type = "text",
  value = "",
  handleChange = () => ,
  error = null,
  touched = false
) => 
  return (
    <div>
      <Wrapper>
        <InputLabel htmlFor=name>label</InputLabel>
        <TextInput
          id=name
          name=name
          type=type
          value=value
          onChange=handleChange
        />
      </Wrapper>
      error && touched && <TextError>error</TextError>
    </div>
  );
;

【讨论】:

嗨,德鲁。你能把输入的宽度设为 100% 吗?灰色区域周围还有一点空白。也可以填吗?谢谢 @Joseph 输入应该已经响应并从Wrapper 组件中获取 100% 的宽度,据我所知,输入周围的空格来自 body 中的元素代码沙盒,输入组件中没有任何内容。我为 body 标签添加了 CSS 规则。【参考方案2】:

我尝试以与上图相同的方式重新创建。对于解决方案,我在 Wrapper 中添加了额外的类。这种方法能解决你的问题吗? example

const Overlap = styled.span`
  width: min-content;
  display: flex;
  align-items: center;
  padding: 0px 60px 0 20px;
  border-radius: 8px 0 0 8px;
  background-color: hsl(0, 0%, 90%);
  color: hsl(195, 2%, 68%);
  font-size: 1.2em;
  white-space: nowrap;
`;

【讨论】:

谢谢,您能否添加边框半径并在文本输入上添加一些填充。确保他只能在白色部分打字。现在,文本输入隐藏在左侧的某个部分

以上是关于在 React 中使用样式化组件重叠左侧部分输入的主要内容,如果未能解决你的问题,请参考以下文章

使用样式化组件和 twin.macro 设置全局样式的 React 应用程序

样式化组件中子组件输入焦点的样式父组件

仅在窗口调整大小时防止 div 重叠(带样式组件)

使用样式化组件样式化 React 组件 (SVG)

如何在样式化组件中访问 Material-ui 的主题

如何在使用 TypeScript 的 create-react-app 中使用带有 babel 插件的样式化组件?