vue.js 如何更改由CodeMirror控制的文本区域占位符的样式?

tzdcorbm  于 2022-11-30  发布在  Vue.js
关注(0)|答案(4)|浏览(267)

我在一个基于Vuejs的Web应用程序中使用CodeMirror插件5.65.7版,一切都运行正常,没有任何问题。我想将占位符添加到我的文本区域,所以我已经将相应的占位符文件添加到我的应用程序中,并且可以在我的文本区域中看到占位符。
我想更改占位符的字体颜色并将其居中对齐,因此我尝试对代码镜像样式进行一些修改,但由于某种原因,它根本不起作用。您能告诉我如何更改字体颜色并将代码镜像控制的文本区域的占位符居中对齐吗?
我看了一个类似的问题here:占位符字体颜色”,并试图做同样的事情,但由于某种原因,它不工作。
我已经根据我的实际应用程序创建了一个示例项目,以演示CodeSandBox中的问题。
我试着查看devtools,但它没有按预期工作。有人能告诉我我做错了什么,并提供一些解决办法吗?
以下是CodeSandBox中提供的代码示例:

<template>
  <div class="container">
    <div class="row">
      <div class="col-md-5 offset-md-1 mt-5 mr-2 mb-2 pt-2">
        <textarea
          id="jsonEvents"
          ref="jsonEvents"
          v-model="jsonEvents"
          class="form-control"
          placeholder="Document in JSON format"
          spellcheck="false"
          data-gramm="false"
        />
      </div>

      <div class="col-md-5 offset-md-1 mt-5 mr-2 mb-2 pt-2">
        <textarea
          id="xmlEvents"
          ref="xmlEvents"
          v-model="xmlEvents"
          class="form-control"
          placeholder="Document in XML format"
          spellcheck="false"
          data-gramm="false"
        />
      </div>
    </div>
  </div>
</template>

<script>
let CodeMirror = null;

if (typeof window !== "undefined" && typeof window.navigator !== "undefined") {
  CodeMirror = require("codemirror");
  require("codemirror/mode/xml/xml.js");
  require("codemirror/mode/javascript/javascript.js");
  require("codemirror/lib/codemirror.css");
  require("codemirror/addon/lint/lint.js");
  require("codemirror/addon/lint/lint.css");
  require("codemirror/addon/lint/javascript-lint.js");
  require("codemirror/addon/hint/javascript-hint.js");
  require("codemirror/addon/display/placeholder.js");
}

export default {
  name: "Converter",
  components: {},
  data() {
    return {
      xmlEvents: "",
      jsonEvents: "",
      xmlEditor: null,
      jsonEditor: null,
    };
  },
  mounted() {
    // Make the XML textarea CodeMirror
    this.xmlEditor = CodeMirror.fromTextArea(this.$refs.xmlEvents, {
      mode: "application/xml",
      beautify: { initialBeautify: true, autoBeautify: true },
      lineNumbers: true,
      indentWithTabs: true,
      autofocus: true,
      tabSize: 2,
      gutters: ["CodeMirror-lint-markers"],
      lint: true,
      autoCloseBrackets: true,
      autoCloseTags: true,
      styleActiveLine: true,
      styleActiveSelected: true,
    });

    // Set the height for the XML CodeMirror
    this.xmlEditor.setSize(null, "75vh");

    // Make the JSON textarea CodeMirror
    this.jsonEditor = CodeMirror.fromTextArea(this.$refs.jsonEvents, {
      mode: "applicaton/ld+json",
      beautify: { initialBeautify: true, autoBeautify: true },
      lineNumbers: true,
      indentWithTabs: true,
      autofocus: true,
      tabSize: 2,
      gutters: ["CodeMirror-lint-markers"],
      autoCloseBrackets: true,
      autoCloseTags: true,
      styleActiveLine: true,
      styleActiveSelected: true,
    });

    // Set the height for the JSON CodeMirror
    this.jsonEditor.setSize(null, "75vh");

    // Add the border for all the CodeMirror textarea
    for (const s of document.getElementsByClassName("CodeMirror")) {
      s.style.border = "1px solid black";
    }
  },
};
</script>

<style>
textarea {
  height: 75vh;
  white-space: nowrap;
  resize: both;
  border: 1px solid black;
}

.cm-editor .cm-placeholder {
  color: red !important;
  text-align: center;
  line-height: 200px;
}

.CodeMirror-editor pre.CodeMirror-placeholder {
  color: red !important;
  text-align: center;
  line-height: 200px;
}

.CodeMirror-editor .CodeMirror-placeholder {
  color: red !important;
  text-align: center;
  line-height: 200px;
}
</style>
6gpjuf90

6gpjuf901#

如果可能的话,可以使用Javascript-

let placeholder_el = document.querySelectorAll('pre.CodeMirror-placeholder')[0];
placeholder_el.style['color'] = 'red';
placeholder_el.style['text-align'] =  'center';
placeholder_el.style['line-height'] =  '200px';
vfwfrxfs

vfwfrxfs2#

不知怎么的,我不能在没有登录的情况下使用你的代码和框,但是你可以尝试使用伪类,如下所示:

textarea::placeholder {
  color: red; 
}

请参阅documentation

20jt8wwn

20jt8wwn3#

查看CodeMirror时,我发现这一行使用了伪选择器:

"&.cm-focused .cm-selectionBackground, ::selection": {
    backgroundColor: "#074"   },

在这个link上。所以,我相信你可以用那种方式使用。

.CodeMirror .cm-s-default .cm-placeholder, ::placeholder{
  color:blue;
  text-align: center;
  line-height: 120px;
}

在css中,你只需要使用一个伪选择器元素::
第一次
您可以在这里看到更多css selectors
NSL数量

kjthegm6

kjthegm64#

我尝试了以下方法,它在Vuejs对我很有效:

.CodeMirror pre.CodeMirror-placeholder{
  color: #F1948A;
  text-align: center;
  line-height: 200px;
  font-family:arial;
  font-size: 1rem;
  font-weight:400
}

如果有人仍然面临着Vuejs风格的问题,检查scoped关键字。这有时会造成问题,所以检查它,如果你想要的话添加它或删除它。

相关问题