我怎样才能使标签的特定部分可点击?
How can I make only a certain part of a label clickable?
我正在做一个项目,我有一个带有输入复选框和标签的手风琴列表。问题是,当我点击标签时,标签会变大,显示里面的内容,但是当我点击内容时,标签会检查输入,隐藏标签内的内容,所以,我的想法是,只有一部分标签 (4em),可以点击以激活输入复选框,其余只能点击其中的对象,而不会激活输入复选框。
为了更好的想法,这是我的代码:
<input id="season1" type="checkbox">
<label class="ls1" for="season1">
<h3 class="first">Season 1</h3>
<i class="fas fa-angle-right"></i>
<div class="episodes1-grid">
</div>
</label>
input[type="checkbox"] {
display: none;
}
label {
display: flex;
flex-direction: column;
position: relative;
overflow: hidden;
cursor: pointer;
height: 4em;
transition: height 0.8s ease-in-out;
}
也许这甚至不需要使用 javascript,这首先是我使用标签的问题。
您可以在您的标签上使用 pointer-events: none
,并在您希望可点击的元素上重新设置它:
input[type="checkbox"] {
display: none;
}
label {
display: flex;
flex-direction: column;
pointer-events: none;
position: relative;
cursor: pointer;
height: 4em;
transition: height 0.8s ease-in-out;
}
label h3 {
pointer-events: auto;
}
input[type="checkbox"]:checked~label {
color: red;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css" integrity="sha512-KfkfwYDsLkIlwQp6LFnl8zNdLGxu9YAA1QvwINks4PhcElQSvqcyVLLD9aMhXd13uQjoXtEKNosOWaZqXgel0g==" crossorigin="anonymous" referrerpolicy="no-referrer"
/>
<input id="season1" type="checkbox" />
<label class="ls1" for="season1">
<h3 class="first">Season 1</h3>
<i class="fas fa-angle-right"></i>
<div class="episodes1-grid">
</div>
</label>
根据您的情况,使用原生 HTML <details>
元素可能更好:
h3 {
margin-block: .3em;
}
summary {
cursor: pointer;
}
<details>
<summary>
<h3 class="first">Season 1</h3>
</summary>
<article class="episodes1-grid">
Episodes1-grid content
</article>
</details>
我正在做一个项目,我有一个带有输入复选框和标签的手风琴列表。问题是,当我点击标签时,标签会变大,显示里面的内容,但是当我点击内容时,标签会检查输入,隐藏标签内的内容,所以,我的想法是,只有一部分标签 (4em),可以点击以激活输入复选框,其余只能点击其中的对象,而不会激活输入复选框。
为了更好的想法,这是我的代码:
<input id="season1" type="checkbox">
<label class="ls1" for="season1">
<h3 class="first">Season 1</h3>
<i class="fas fa-angle-right"></i>
<div class="episodes1-grid">
</div>
</label>
input[type="checkbox"] {
display: none;
}
label {
display: flex;
flex-direction: column;
position: relative;
overflow: hidden;
cursor: pointer;
height: 4em;
transition: height 0.8s ease-in-out;
}
也许这甚至不需要使用 javascript,这首先是我使用标签的问题。
您可以在您的标签上使用 pointer-events: none
,并在您希望可点击的元素上重新设置它:
input[type="checkbox"] {
display: none;
}
label {
display: flex;
flex-direction: column;
pointer-events: none;
position: relative;
cursor: pointer;
height: 4em;
transition: height 0.8s ease-in-out;
}
label h3 {
pointer-events: auto;
}
input[type="checkbox"]:checked~label {
color: red;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css" integrity="sha512-KfkfwYDsLkIlwQp6LFnl8zNdLGxu9YAA1QvwINks4PhcElQSvqcyVLLD9aMhXd13uQjoXtEKNosOWaZqXgel0g==" crossorigin="anonymous" referrerpolicy="no-referrer"
/>
<input id="season1" type="checkbox" />
<label class="ls1" for="season1">
<h3 class="first">Season 1</h3>
<i class="fas fa-angle-right"></i>
<div class="episodes1-grid">
</div>
</label>
根据您的情况,使用原生 HTML <details>
元素可能更好:
h3 {
margin-block: .3em;
}
summary {
cursor: pointer;
}
<details>
<summary>
<h3 class="first">Season 1</h3>
</summary>
<article class="episodes1-grid">
Episodes1-grid content
</article>
</details>