CSS 部分 CustomElement 节点名的选择器

CSS Selector for a partial CustomElement nodename

更新:寻求不同的解决方案:

<img is=queen-of-hearts>

住在:https://card-ts.github.io/playingcardts


这个问题是关于解决 CSS 选择器限制

所以我的自定义元素现在实现了真正的语义 HTML:

正在显示:

没有外部 SVG 文件,
所有 500KB SVG(手动)精简,LZMA 打包到 70KB 到 ONE 自定义元素
然后使用

创建所有 52 张卡片(自定义元素)

下一个问题出现了...要使用什么选择器?

可以做到
    Queen-of-Hearts {
      transform: rotate(20deg)
    }

但是要突出显示跟随女王的每位国王(只有一位以上),CSS 变得冗长:

        Queen-of-Spades+King-of-Spades,
        Queen-of-Hearts+King-of-Hearts,
        Queen-of-Diamonds+King-of-Diamonds,
        Queen-of-Clubs+King-of-Clubs,

        Queen-of-Hearts+King-of-Spades,
        Queen-of-Hearts+King-of-Hearts,
        Queen-of-Hearts+King-of-Diamonds,
        Queen-of-Hearts+King-of-Clubs,

        Queen-of-Diamonds+King-of-Spades,
        Queen-of-Diamonds+King-of-Hearts,
        Queen-of-Diamonds+King-of-Diamonds,
        Queen-of-Diamonds+King-of-Clubs,

        Queen-of-Clubs+King-of-Spades,
        Queen-of-Clubs+King-of-Hearts,
        Queen-of-Clubs+King-of-Diamonds,
        Queen-of-Clubs+King-of-Clubs {
            transform: scale(1.2);
            border: 1px solid green;
        }

我想CSS写成:

    Queen* + King* {
            transform: scale(1.2);
            border: 1px solid green;
    }

注意:我有一个版本<Queen-of-Hearts rank="Queen" suit="Hearts" />
但它在语义上并不像 'pleasant'

对在 CSS、
中捕获纸牌或扑克规则的优雅解决方案的任何指示感兴趣 没有浏览器限制,
这是一个 'having fun exploring browser capabilities' 项目...
清洁后将在 GitHub

更新

使用我们忽略的符号:扩展内置元素:

<img is=queen-of-hearts>

可能比我开始使用的自治自定义元素的符号更好:

<card-t cid=Queen-of-Hearts></card-t>

两个(我必须说是 53 个元素)都包含在单个 16 KB 文件中:

https://card-ts.github.io/playingcardts

如果您最终决定按照 Connexo 的建议使用唯一的自定义元素名称,保留 named 属性来定义等级和花色可能会很有用。

<playing-card rank="Queen" suit="Hearts">

然后您可以定义将双向反映属性值的属性。

card.rank === card.getAttribute( 'rank' )

与使用属性作为值.

相比,这样可以更容易地找到卡片的值

考虑这个符号:

<playing-card queen hearts></playing-card>

问题:它的值是多少?

let card = game.querySelector( 'playing-card' )    
if ( card.getAttribute( 'spades ') )
     suit = spades
else if ( card.getAttributes( 'diamonds' ) )
     ...

或者,您可以使用单个 name 属性:

html

<playing-card name="10-of-spades">

javascript

//easy manipulation
let card = document.querySelector( 'playing-card' ) 
let [rank, suit] = card.name.split( '-of-' )

css

//easy selection (...for advanced CSS users)
[name|=king] + [name|=queen]  //Queens after a King
[name|=1]                     //Aces
[name$=spades]                //Spades