如何为包含 <input> 元素的标签设置 "text-decoration: line-through" 样式?

How set "text-decoration: line-through" style for a label that has inside an <input> element?

我有-

<label for="1640801145364"><input type="checkbox" value="foo" id="1640801145364" name="foo">foo</label> 

我需要为包含在元素内部的标签设置“text-decoration: line-through”样式(在 file.css 中)。我试着在 file.css 中写下一个,但它对我没有帮助。

label>input[type=checkbox]:checked {
    text-decoration: line-through;
}

我看到你的 CSS,你认为 foo 文本会在输入中,但实际上不是 那是因为:<input> 不需要结束标签,所以它们不能在 foo text

所以首先是 foo 文本 span 所以使用 CSS 我们可以很容易地 select 它

然后我使用了 CSS COMBINATOR ~ https://developer.mozilla.org/en-US/docs/Web/CSS/General_sibling_combinator

you can write it with ALT126


所以 if 输入 checked ...

...~ 让我们不再为输入本身设置样式,而是 为我们想要的设置样式(在本例中为 span

编辑:确保您想要设置样式的所有内容都在输入之后,因为 ~ 不能 select 前面的元素。

这里是代码

input[type=checkbox]:checked~span {
  text-decoration: line-through;
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link rel="stylesheet" href="style.css">
</head>

<body>
  <label for="1640801145364">
        <input type="checkbox" value="foo" id="1640801145364" name="foo"> 
        <span>foo</span>
    </label>
</body>

</html>

CSS 不能 'go back upwards' 以您希望在此处执行的方式进行,因此输入的检查状态不会影响整体标签。

有几种方法可以解决这个问题。您可以将标签中的输入换成它之前的标签,但这当然会改变外观。相反,此代码段将标签的内容放在 span 元素中,然后输入的状态会影响其样式,因为新元素是后续的兄弟元素。

input:checked+* {
  text-decoration: line-through;
}
<label for="1640801145364">
<input type="checkbox" value="foo" id="1640801145364" name="foo">
  <span>foo</span>
</label>