css - Tailwind CSS 更改占位符选项的文本颜色

标签 css html-select tailwind-css

我有一个元素,我需要在表单中使用选择。所有其他类型的输入都有一个浅灰色占位符。在输入中键入的文本是黑色的。
表单的选择输入需要具有相同的样式。默认/占位符值需要显示为深灰色,用户可以选择的实际值需要显示为黑色。但是当我尝试为第一个(默认/占位符)选项指定不同的颜色时,它不使用这种颜色。它实际上一直使用 select 元素中指定的颜色。
这是元素内的选择:

 <select
        type="text"
        name="carType"
        id="carType"
        v-model="carType"
        placeholder="Car Type"
        class="my-2 px-4 py-3 border rounded-lg text-black-primary focus:outline-none text-sm"
      >
        <option class="text-gray-400" value="" disabled selected>Select your option</option>
        <option value="volvo">Volvo</option>
        <option value="saab">Saab</option>
        <option value="mercedes">Mercedes</option>
        <option value="audi">Audi</option>
</select>

最佳答案

使用 vanilla CSS 也可能是一个棘手的问题,但有一个解决方法。如果是必填字段,您可以添加 required归因于您的 select元素并使用 :invalid pseudo class将其设置为占位符。这个想法是,如果第一个选项用作占位符,它是 selecteddisabled默认情况下,该表单字段无效,因此您可以将其设置为此类。
在下面的代码段中,我只添加了 required :invalid 的属性和样式直接类,这不是真正的 Tailwind-y,但它有效:

@import url("https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css");

:invalid {
  color: rgba(156, 163, 175, 1);
}
<select
  type="text"
  id="carType"
  class="my-2 px-4 py-3 border rounded-lg text-black-primary focus:outline-none text-sm"
  name="carType"
  required
  v-model="carType"
>
  <option value="" disabled selected>Select your option</option>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>

自定义 Tailwind 变体
尽管 Tailwind 具有像 hover: 这样的实用程序, focus: , disabled:等,不幸的是它没有 invalid:一。如果您想使用 invalid:text-gray-400变体,您需要创建一个插件。幸运的是,文档中有一个 nice example可以用作我们的基础:
// tailwind.config.js
const plugin = require('tailwindcss/plugin');

module.exports = {
  variants: {
    textColor: ({ after }) => after(['invalid']),
  },
  plugins: [
    plugin(function ({ addVariant, e }) {
      addVariant('invalid', ({ modifySelectors, separator }) => {
        modifySelectors(({ className }) => {
          return `.${e(`invalid${separator}${className}`)}:invalid`;
        });
      });
    }),
  ],
};
现在您可以使用该类作为 invalid:text-gray-400在您的 select元素,并摆脱自定义 CSS 样式:
<select
  type="text"
  id="carType"
  class="my-2 px-4 py-3 border rounded-lg text-black-primary invalid:text-gray-400 focus:outline-none text-sm"
  name="carType"
  required
  v-model="carType"
>
  <option value="" disabled selected>Select your option</option>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>
Vue 条件类
当您使用 Vue 时,第三种选择是使用条件类。只需在两个类之间切换,text-gray-400text-black-primary基于 carType 的值.

关于css - Tailwind CSS 更改占位符选项的文本颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65355548/

相关文章:

html - 图像设置为适合 'grandparent' 但隐藏在 'parent' 内

css - 将浏览器调整为更小尺寸时如何不裁剪背景?

html - 如何使用 Bootstrap 将表单居中?

html - 内部 div 100% 高度在具有最小高度的 div 内不起作用

php - 用数据行填充 html 表。使用选择框选择

node.js - PurgeCSS 和 Tailwind CSS,如何使用命令行界面保留响应类?

php - 如何以编程方式在 select div 标签内添加选项?

javascript - 我想使用 javascript 或 jquery 更改内容

next.js - 在 nrwl/nx Next js 项目中使用 Tailwind css

css - 不使用 Tailwind CSS 的表格