2016-10-10 3 views
4

У меня есть: парить эффект применяется -Установка а [CSS]: парить и: проверено состояние

td img.off{ 
    display:none; 
} 

td:hover img.off{ 
    display:inline; 
} 

td:hover img.on{ 
    display:none; 
} 

- на некоторых изображениях.

<td> 
    <div class="col1"><img class="on" src="1.bmp"></div> 
    <div class="col1"><img class="off" src="2.bmp"></div> 
</td> 

Я пытаюсь добавить флажок, который отключает эффект парения, если он активен, так что я пытался сделать -

input:checked + td:hover img.off{ 
    display:inline; 
} 

input:checked + td:hover img.on{ 
    display:none; 
} 

- с этим флажком:

<input type="checkbox" name="box" class="cbox"> 

Но это не сработало. Я ищу для этого решение HTML/CSS. Кто-нибудь знает, почему он не работает?

EDIT: Что здесь не так? EDIT^2: селектор. Даже не может.

input { 
 
    display: none; 
 
} 
 
label[for="chkbox1"] { 
 
    display: inline-block; 
 
    border: 1px solid black; 
 
    width: 20px; 
 
    height: 20px; 
 
} 
 
input:checked + .header label:after { 
 
    content: 'X'; 
 
} 
 
table td img.off{ 
 
    display:none; 
 
} 
 
input:checked + table td:hover img.off{ 
 
    display:inline; 
 
} 
 
input:checked + table td:hover img.on{ 
 
    display:none; 
 
}
<input id="chkbox1" type="checkbox" name="box" class="cbox"> 
 

 
<div class="header"> 
 
    <label for="chkbox1"></label> 
 
</div> 
 

 
<table> 
 
    <tr> 
 
    <td> 
 
     <div class="col1"> 
 
     <img class="on" src="http://placehold.it/50"> 
 
     </div> 
 
     <div class="col1"> 
 
     <img class="off" src="http://placehold.it/100"> 
 
     </div> 
 
    </td> 
 
    </tr> 
 
</table>

+0

Вы можете создать скрипку? – Vucko

+0

'input: checked + td: hover' означает, что флажок должен быть непосредственно предшествующим брату td. Это не имеет смысла структурно, поэтому я предполагаю, что на самом деле у вас нет своего HTML в этом порядке. – andi

+0

флажок находится в заголовке.Есть ли способ сделать это понятным? – AlexG

ответ

6

Основываясь на вашем публикуемую кода я предполагаю ниже разметку.

Селектор родственный + цель родной брат и ниже случае это будет table, не td

input:checked + table td:hover img.on { 
 
    border: 2px solid red; 
 
}
<input type="checkbox" name="box" class="cbox"> 
 
<table> 
 
    <tr> 
 
    <td> 
 
     <div class="col1"> 
 
     <img class="on" src="http://placehold.it/50"> 
 
     </div> 
 
    </td> 
 
    </tr> 
 
</table>

Если вы хотите эту опцию, чтобы быть в заголовке, вы» Вам необходимо сделать трюк, используя этикетку, например,

input { 
 
    display: none; 
 
} 
 
label[for="chkbox1"] { 
 
    display: inline-block; 
 
    border: 1px solid black; 
 
    width: 20px; 
 
    height: 20px; 
 
} 
 
input:checked ~ table td:hover img.on { 
 
    border: 2px solid red; 
 
} 
 
input:checked + .header label:after { 
 
    content: 'X'; 
 
}
<input id="chkbox1" type="checkbox" name="box" class="cbox"> 
 

 
<div class="header"> 
 
    <label for="chkbox1"></label> 
 
</div> 
 

 
<table> 
 
    <tr> 
 
    <td> 
 
     <div class="col1"> 
 
     <img class="on" src="http://placehold.it/50"> 
 
     </div> 
 
    </td> 
 
    </tr> 
 
</table>

Чтобы выяснить, что не будет работать, ниже образец, так как фактическая checkbox является дочерним header и не может достичь img с помощью селектора родственного.

Для этой работы родительский селектор будет необходимо, и тех, кто не существует (пока)

input:checked ~ table td:hover img.on { 
 
    border: 2px solid red; 
 
}
<div class="header"> 
 
    <input id="chkbox1" type="checkbox" name="box" class="cbox"> 
 
</div> 
 

 
<table> 
 
    <tr> 
 
    <td> 
 
     <div class="col1"> 
 
     <img class="on" src="http://placehold.it/50"> 
 
     </div> 
 
    </td> 
 
    </tr> 
 
</table>

Update после вопроса редактирования

Вы должны использовать ~ родственный селектор, а не непосредственный селектор братьев и сестер +, так как table не является непосредственным родственником input

input { 
 
    display: none; 
 
} 
 
label[for="chkbox1"] { 
 
    display: inline-block; 
 
    border: 1px solid black; 
 
    width: 20px; 
 
    height: 20px; 
 
} 
 
input:checked + .header label:after { 
 
    content: 'X'; 
 
} 
 
table td img.off { 
 
    display:none; 
 
} 
 
input:checked ~ table td:hover img.off { 
 
    display:inline; 
 
} 
 
input:checked ~ table td:hover img.on { 
 
    display:none; 
 
}
<input id="chkbox1" type="checkbox" name="box" class="cbox"> 
 

 
<div class="header"> 
 
    <label for="chkbox1"></label> 
 
</div> 
 

 
<table> 
 
    <tr> 
 
    <td> 
 
     <div class="col1"> 
 
     <img class="on" src="http://placehold.it/50/0f0"> 
 
     </div> 
 
     <div class="col1"> 
 
     <img class="off" src="http://placehold.it/100/0ff"> 
 
     </div> 
 
    </td> 
 
    </tr> 
 
</table>

+0

Извините, когда я сказал заголовок, я имел в виду, что у меня был «заголовок». Как и в, определенный раздел (?) header {}. Это будет работать так, как я хочу, если бы он находился за пределами этого заголовка. Есть ли способ настроить его? – AlexG

+0

@AlexG Пока фактический 'checkbox' является родным братом для элемента, с которым вы хотите его взаимодействовать, он отлично работает без метки. – LGSon

+0

@AlexG Обновлен мой ответ с заголовком – LGSon

Смежные вопросы