【问题标题】:Is there a way to use wildcards in css id tag有没有办法在 css id 标签中使用通配符
【发布时间】:2020-07-17 10:18:17
【问题描述】:

假设我有一些具有相似 ID 的项目:

<input class="a" id="id_1"/>
<input class="a" id="id_2"/>

我想在我的 css 文件中设置如下内容:

#id_*{width = 100%;}

有什么办法可以做到吗? 我试过类似的东西:

input[id^='id_']{width:200px;}

但这并没有成功......

而且它需要在 IE 上工作:(

编辑:需要在 IE8 上工作....

编辑:

<input tabIndex="1690" class="form" id="cust_1_NUM_OBJ_5-00461" dataFld="cust_1_NUM_OBJ_5-00461" dataSrc="#FIELDVALUES" style="text-align: right; height: 20px;" onkeypress="validateNumberChar(this)" onfocus="resetGFocusField('cust_1_NUM_OBJ_5-00461');" onblur="validateChangedNumber(this);" onbeforedeactivate="onbeforedeactivateLookup(this);" type="text" size="20" maxLength="55" datatype="number" numbertype="24,6" valueFieldID="null" tabStop="true" value="1"/>

和 CSS:

input[id^='cust_1_NUM_OBJ_5-0046']{width:200px;}

【问题讨论】:

  • 100% 或 200px 没关系 :)

标签: css css-selectors


【解决方案1】:

input[id^='id_']{width:200px;} 应该可以工作。它确实在这个小提琴中:

http://jsfiddle.net/jYZnX/

编辑:另外,为了表明它不会选择没有以'id_'开头的 id 的输入:

http://jsfiddle.net/jYZnX/1/

编辑 2:由于您的文档模式似乎设置为 Quirks,这将导致 css 选择器出现问题。正确设置您的文档类型,例如使用&lt;!DOCTYPE HTML&gt;。不过,这将需要访问网页的原始代码,因此如果没有这些代码,您将遇到麻烦。

【讨论】:

  • 我知道它通常可以工作,但不能在 Internet Explorer 上工作。我正在寻找 ^= 的 IE 版本
  • 它也适用于 IE。在 IE 中打开该页面,您会看到它确实有效。
  • 使用什么浏览器完全重要。我可以制作一些在 IE 中无法正确显示的内容,例如使用 css3。查看jsfiddle.net/czeQH,您将在 FF 和 Chrome 以及 IE9 中看到阴影显示,但在 IE8 或更早版本中没有。它不会模拟它是您打开它的浏览器中的正确表示。
  • @anothershrubery 对不起,你说得对。但是 'input[id^="'id_']{width:200px;}' 似乎不适用于 IE8.... 是否有 IE8 的 ^= 版本?
  • clientWidth 只是报告对象的宽度。如果没有width 的常用方法,您将无法更改它,这就是问题所在。它只能通过 javascript 使用。
【解决方案2】:

您使用的选择器 (^) 在 IE 中正常工作:

input[id^='id'] {
    background: red;
}

结果如下:

IE7


IE8


IE9


IE10


正如我在您的图片中看到的,您的 IE 正在使用 Quirks Mode 呈现您的页面。 也许您的页面上没有 doctype 或错误的 doctype。使您的文档类型有效,如下所示:

<!doctype html>

【讨论】:

  • 怪癖模式的好地方。那肯定会出问题。
  • 只是说^=是3级选择器,will not work在低于9的IE版本上。
【解决方案3】:

我的回答很笼统,从未与问题直接相关,因为这已经很老了,到目前为止,此页面上的其他答案已经解决了。


这个答案的第一部分是枯燥的理论,有助于理解选项。
第二部分是该理论的应用实例。


1) 属性选择器

Substring matching attribute selectors:

[att^=val]
表示具有 att 属性的元素,其值以前缀“val”开头。如果 "val" 是空字符串,则选择器不代表任何内容。

[att$=val]
表示具有 att 属性的元素,其值以后缀“val”结尾。如果 "val" 是空字符串,则选择器不代表任何内容。

[att*=val]
表示具有 att 属性的元素,其值包含至少一个子字符串“val”的实例。如果 "val" 是空字符串,则选择器不代表任何内容。

另外还有更多的选择器,在规范中它们在Attribute presence and value selectors一章中排序:

[att]
表示具有 att 属性的元素,无论该属性的值如何。

[att=val]
表示具有 att 属性的元素,其值正好是“val”。

[att~=val]
表示具有 att 属性的元素,其值为以空格分隔的单词列表,其中一个恰好是“val”。如果“val”包含空格,它永远不会代表任何东西(因为单词是用空格分隔的)。此外,如果“val”是空字符串,它永远不会代表任何东西。

[att|=val]
表示具有 att 属性的元素,其值要么正好是“val”,要么以“val”开头,紧跟“-”(U+002D)。


2) 如何根据事件在页面上选择多个内容的示例

当一个事件被触发时,通配符特别有用,比如一个带有特殊标签的页面被访问。相反,对于一个完全静态的页面,它们也很有用,但仍然可以注意到不同,即使它会是更多的 CSS 代码。

假设访问了带有标签action 的页面,那么 URL 将如下所示:

https://example.com/index.html#action

虽然只有一个 id 像这样被触发,但我们可以使用它来记录 CSS 中的一整套相关操作,但我们只需要将整个区域包含在 ID 为 action 的元素中即可:

/* all div-elements which are direct child of element with class `wrapper` are hidden: */

.wrapper>div {
  display: none;
}


/* following line addresses all elements inside element with the id "action"
   where the id is starting with "action_". This is only triggered when the
   URL with hashtag "action" is called, because of usage of ":target":
*/

#action:target [id^="action_"] {
  display: block;
}


/* following line addresses all elements inside element with the id "amother-action"
   where the class is "another-action". This is only triggered when the
   URL with hashtag "another-action" is called, because of usage of ":target".
   This example shows that we never need ids but can use classes too:
*/

#another-action:target .another-action {
  display: block;
}
<div id="action">
  <div id="another-action">
    <div class="wrapper">
      <!-- this small menu is always shown as it's an unordered list and no div: -->
      <ul>
        <li><a href="#">No Action / Reset</a></li>
        <li><a href="#action">Action</a></li>
        <li><a href="#another-action">Another Action</a></li>
      </ul>
      <!-- The following div-elements are by default hidden and
           only shown when some event is triggered: -->
      <div id="action_1" class="another-action">
        <!-- this is on both actions shown as the div has an id starting
               with "action" and also a class "another-action" -->
        Hello
      </div>
      <div id="action_2">
        <!-- this is above only triggered by the CSS-rule 
               #action:target [id^="action_"] -->
        World!
      </div>
      <div class="another-action">
        <!-- This is above only triggered by the CSS-rule
               #another-action:target .another-action -->
        Everybody!
      </div>
    </div>
  </div>
</div>

不同的结果如下:

  1. 当页面被调用时没有任何哈希,只显示菜单:
  • 动作
  • 另一个动作
  1. 使用哈希action调用页面时,可以看到下面的菜单:

你好
世界!

  1. 当使用哈希 another-action 调用页面时,可以在菜单下方看到以下内容:

你好
大家!

这样,我们可以混合很多内容,其中每个部分仅在特殊情况下显示。 仅当具有 id 的元素用内容和可选择的属性包围元素时,混合多个 id 和类才有效。在我上面的示例中,您可以看到 HTML 中的所有内容都写在 &lt;div id="action"&gt;&lt;div id="another-action"&gt;&lt;/div&gt;&lt;/div&gt; 之间,就像这样,每个使用的事件都可以选择性地触发内容中的所有内容。

当然,CSS 也可以将此方法用于其他效果。隐藏或显示元素只是一个简单的示例,但您可以更改颜色、启动 CSS 动画以及通过 CSS 执行许多其他操作。


请注意不要在任何这些元素中发布任何机密内容,因为这种 CSS 解决方案没有安全性,仅用于区分视觉显示的情况。 您像这样隐藏或显示的任何内容在 HTML 源代码中始终可见。

【讨论】:

    【解决方案4】:

    给定一个包含 200 行的三列表,每行都有一个单独的 id,如下所示:

    <tr id="row_177">
     <td><a class="btn" href="..">Link1</a></td>
     <td><a href="pdfName.pdf" target="_blank">Name of PDF File</a></td>
     <td><select class="pdf_sel">
        <option value=""> ---- </option>
        <option>Crowell, Thomas</option> 
        </select>
     </td>
    </tr>
    

    并且假设您希望将每个 td 中的内容垂直居中,那么以下 css 通配符将导致每个 td 的内容垂直居中**(我相信您也可以使用它来调整宽度):

    tr[id^='row_'] > td {
      vertical-align:middle
    }
    

    ** 一个警告 - 表中的第三列在每个 td 中包含一个 Select。虽然第一列中的锚按钮和第二列中的文本锚通过使用上述 css 在每个 td 中垂直居中,但由于某种原因,第三列中的 Select 不响应此 css - 但有一个修复。以下 css 将导致 Select 元素正确垂直居中:

    tr[id^='pdfrow_'] > td > select {
    margin-top:5px;
    margin-bottom:5px
    } 
    

    【讨论】:

    • vertical-align 指的是行,line-height。 line-height 也存在与 select 相关,但它在元素内部,从不包含整个元素本身。
    【解决方案5】:

    这正是课程的用途。你想要的是:

    .a { width: 100% }
    

    【讨论】:

    • 这些不是一般 a 类的所有实例,我不想影响所有。
    • 为什么不将课程应用于您想要影响的人?
    • 我不想操纵网页设计进行样式设置,而且我没有构建网站的代码。
    • 然后创建一个新类。根据定义,如果您的所有id_*s 行为相同,则它们属于同一类(用英语术语来说,而不是 CSS),因此您可以为该行为创建一个 CSS 类。如果a不好,就新建一个&lt;input class="a newClass" id="id_2"/&gt;
    • 但是,有时您无法控制事后添加的类或 ID。例如,HTML 电子邮件。 Zimbra 会将他们自己的 OBJECT 类和 OBJ_PREFIX_DWTnnn id 添加到它认为是日期的项目中,然后将您的样式与他们的设计相结合。烦死人了!已使用 span[id^='OBJ_PREFIX']{} 为 CLASS 的文本装饰、颜色和光标添加了样式覆盖(使用 !important)和 ID。这两种解决方案都适用于 Chrome,在 IE 中都没有任何影响(Windows 7,截至目前的最新版本)。
    猜你喜欢
    • 2015-01-26
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多