ChatGPT解决这个技术问题 Extra ChatGPT

使用 CSS 插入文本

我对 CSS 比较陌生,并且使用它来更改文本的样式和格式。

我现在想用它来插入文本,如下所示:

<span class="OwnerJoe">reconcile all entries</span>

我希望我可以展示为:

Joe 的任务:核对所有条目

也就是说,仅仅由于属于“Owner Joe”类,我希望显示文本 Joe's Task:

我可以用如下代码做到这一点:

<span class="OwnerJoe">Joe's Task:</span> reconcile all entries.

但这对于指定类和文本来说似乎是非常多余的。

有可能做我正在寻找的吗?

编辑 一个想法是尝试将其设置为 ListItem <li>,其中“项目符号”是文本“Joe 的任务”。我看到了如何设置各种子弹样式甚至子弹图像的示例。是否可以为列表项目符号使用一小段文本?

  • 的想法不是好的做法。如果您真的想要这样做,请改用模板语言。
  • 听起来像使用 CSS3 :before 或 :after 伪元素,您实际上只是将冗余移至 CSS 领域(因为您需要为 OwnerJoe、OwnerJane 等添加 CSS 语句)
    @Matt Beckman:这对我来说很好。我可以轻松地为我的每个用户定义 CSS 块。在我的情况下,在 HTML 中一遍又一遍地重复它似乎太过分了。
    我觉得对于更广泛的受众来说,更实际的使用可能是 label.required:before {content: "* ";} 在必填字段前面添加一个星号。

    S
    Samuel Liew

    可以,但需要支持 CSS2 的浏览器(所有主流浏览器,IE8+)。

    .OwnerJoe:before {
      content: "Joe's Task: ";
    }
    

    但我宁愿推荐为此使用 Javascript。使用 jQuery:

    $('.OwnerJoe').each(function() {
      $(this).before($('<span>').text("Joe's Task: "));
    });
    

    冒号后面应该有一个空格。
    初步测试表明 content-property 运行良好。当其他人都说无法完成时,恭喜您找到了答案。 :)
    要覆盖较旧的 IE,您可以有条件地包含 code.google.com/p/ie7-js,这将允许您的 CSS 在所有浏览器中保持相同。它是更接近标准的 jQuery 的替代品。
    为什么你宁愿推荐使用 Javascript?
    有趣:似乎可以使用一两个冒号,例如 .OwnerJoe:before.OwnerJoe::before
    Y
    YakovL

    每个人似乎都喜欢的使用 jQuery 的答案有一个重大缺陷,那就是它不可扩展(至少在编写时)。我认为 Martin Hansen 的想法是正确的,那就是使用 HTML5 data-* 属性。您甚至可以正确使用撇号:

    html:

    <div class="task" data-task-owner="Joe">mop kitchen</div>
    <div class="task" data-task-owner="Charles" data-apos="1">vacuum hallway</div>
    

    CSS:

    div.task:before { content: attr(data-task-owner)"'s task - " ; }
    div.task[data-apos]:before { content: attr(data-task-owner)"' task - " ; }
    

    输出:

    Joe's task - mop kitchen
    Charles' task - vacuum hallway
    

    使用 css 内容而不是 jQuery 的一个有趣的副作用是 content 属性提供的文本是不可选择的,这可能是可取的,也可能不是可取的......
    如果文本是页面布局的一部分而不是内容的一部分,那么 CSS 可能是它的正确位置。例如,如果您希望所有页面上的页面标题是浅绿色背景上的紫色“Hello World”字样,这是有道理的。更改页面标题所需要做的就是编辑单个 CSS 文件。如果您有 HTML 格式的文本,则需要对您网站上的每个页面进行编辑,并且可能还会更改您的 Web 应用程序。
    M
    Martin Hansen

    另请查看 CSS 内容属性的 attr() 函数。它将元素的给定属性输出为文本节点。像这样使用它:

    <div class="Owner Joe" />
    
    div:before {
      content: attr(class);
    }
    

    甚至使用新的 HTML5 自定义数据属性:

    <div data-employeename="Owner Joe" />
    
    div:before {
      content: attr(data-employeename);
    }
    

    这是一个更好的主意——我讨厌创建一个 CSS 类来显示内容的想法。它最终可能会根据 sql 查询动态生成 css。我会将选择器替换为 div[data-employeename]:before
    k
    kohane15

    只需像这样编码:

        .OwnerJoe {
          //other things here
          &:before{
            content: "Joe's Task: ";
          }
        }
    

    这不是有效的 CSS,而是 Sass 语法。
    k
    kohane15

    我知道这是一个老问题,但我想更新 CSS3 的答案。问题是伪类或伪元素。

    CSS2 方式 (pseudo-class)

        .OwnerJoe:before {
          content: "Joe's Task:";
        } 
    

    CSS3 way (pseudo-element) 注意双冒号

        .OwnerJoe::before {
          content: "Joe's Task:";
        }