如何阻止占位符转换回来? (CSS)

Posted

技术标签:

【中文标题】如何阻止占位符转换回来? (CSS)【英文标题】:How to stop placeholder from transitioning back ? (CSS) 【发布时间】:2021-06-14 10:59:02 【问题描述】:

我试图创建一个对占位符有过渡效果的输入字段,为此我使用<span> 标记来保存占位符并使用:focus CSS 选择器对其进行过渡 它工作得很好,但问题是在我们输入文本并单击输入区域/文本字段区域之外的任意位置后,占位符转换回来并与输入的文本重叠。 如果文本区域当前包含文本,我希望占位符不转换回来。 此外,还有一个问题是,如果单击占位符,则不会选择文本字段。 我怎样才能清除这些错误? 我提供了以下代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <title>Input</title>

  <style>
    body 
      margin: 0px;
    
    
    #top-heading 
      padding: 1rem;
      text-align: center;
      margin: auto;
      margin-bottom: 1rem;
    
    
    textarea 
      width: 85%;
      display: block;
      height: 10vh;
      margin: 1.5rem;
      margin-top: 0rem;
      padding: 0.5rem;
      font-size: large;
    
    
    span 
      position: absolute;
      top: 6rem;
      padding-left: 2.7rem;
      color: rgb(121, 120, 120);
      font-size: larger;
    
    
    textarea:focus~span 
      color: black;
      font-size: 1.091rem;
      transition: .6s ease;
      transform: translate3d(-1.15rem, -1.9rem, 2rem);
    
  </style>
</head>

<body>
  <h1 id="top-heading">Input</h1>

  <textarea id="txt-input"></textarea>
  <span>Enter the input</span>
</body>

</html>

【问题讨论】:

我怀疑这可以用纯 CSS 完成。还使用label 而不是span 使用for 属性将标签与表单元素相关联 是的,进行您建议的更改可以清除我提到的第二个问题,谢谢您的帮助, @JonP 现在,谈到过渡部分,如果不使用 CSS,那么添加 javascript 是否可以按照我提到的方式工作? 【参考方案1】:

你能检查下面的代码吗?希望它对你有用。您需要将transition: .6s ease; 属性赋予span 标签而不是textarea:focus~span

请参考此链接:https://jsfiddle.net/yudizsolutions/kjfc0z37/

<!DOCTYPE html>
<html lang="en">

  <head>
    <title>Input</title>

    <style>
      body 
        margin: 0px;
      

      #top-heading 
        padding: 1rem;
        text-align: center;
        margin: auto;
        margin-bottom: 1rem;
      

      textarea 
        width: 85%;
        display: block;
        height: 10vh;
        margin: 1.5rem;
        margin-top: 0rem;
        padding: 0.5rem;
        font-size: large;

      

      span 
        position: absolute;
        top: 6rem;
        padding-left: 2.7rem;
        color: rgb(121, 120, 120);
        font-size: larger;
        transition: .6s ease;
      

      textarea:focus~span 
        color: black;
        font-size: 1.091rem;

        transform: translate3d(-1.15rem, -1.9rem, 2rem);
      

    </style>
  </head>

  <body>
    <h1 id="top-heading">Input</h1>

    <textarea id="txt-input"></textarea>
    <span>Enter the input</span>
  </body>

</html>

【讨论】:

谢谢@Yudiz Solutions,虽然这并不能解决我提到的问题,但我很想知道在跨度标记和文本字段中添加过渡之间的区别:focus~span。跨度>

以上是关于如何阻止占位符转换回来? (CSS)的主要内容,如果未能解决你的问题,请参考以下文章

用占位符替换字符串并在函数之后将它们替换回来。

更改占位符的 css 属性

如何在顺风CSS中只制作占位符斜体?

如何创建永久占位符? CSS / HTML

css 占位符目标,占位符样式|标签的CSS

如何在角材料中使用 css 更改 md-input-container 占位符颜色?