Есть ли способ навести курсор на один элемент и повлиять на другой элемент?
Я хочу, чтобы все было так просто, но я знаю, что это не так:
img {
opacity: 0.4;
filter: alpha(opacity=40);
}
img:hover {
#thisElement {
opacity: 0.3;
filter: alpha(opacity=30);
}
opacity:1;
filter:alpha(opacity=100);
}
Поэтому, когда вы наводите курсор мыши на img, непрозрачность #thisElement изменяется до 30%, а непрозрачность изображения до 100%. Есть ли способ сделать это, используя только CSS?
Так что это HTML
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="C:\Users\Shikamaru\Documents\Contwined Coding\LearningToCode\Learning jQuery\js\jquery-1.6.2.min.js"></script>
<script type="text/javascript" src="briefcase.js"></script>
<link rel="stylesheet" type="text/css" href="taskbar.css"/>
<link rel="stylesheet" type="text/css" href="briefcase.css" />
<title>Briefcase</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<div class="mask"></div>
<div class="float">
<div id="album1">Album Title</div>
<img class="left" src="bradBeachHeart.JPG" alt="Brad at the Lake" />
<img class="left" src="mariaNavi.jpg" alt="Making Maria Na'vi" />
<img class="left" src="mattWaterRun.jpg" alt="Photoshopped Matt" />
</div>
<div class="gradientTop"></div>
<div class="gradientBottom"></div>
</body>
</html>
И это CSS:
body {
font: normal small/3em helvetica, sans-serif;
text-align: left;
letter-spacing: 2px;
font-size: 16px;
margin: 0;
padding: 0;
}
div.gradientTop {
position: absolute;
margin-top: 5px;
z-index: 2;
width: 206px;
height: 30px;
float: left;
background: -webkit-linear-gradient(rgba(255, 255, 255, 2), rgba(255, 255, 255, 0))
}
div.gradientBottom {
position: absolute;
margin-bottom: 5px;
z-index: 2;
width: 206px;
height: 120px;
float: left;
bottom: -210px;
background: -webkit-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 1))
}
div.float {
border-right: 1px solid orange;
position: absolute;
z-index: 2;
margin-left: 5px;
margin-top: 5px;
float: left;
width: 200px;
}
div.mask {
position: relative;
z-index: 1;
margin-top: 5px;
float: left;
width: 206px;
height: 805px;
background-color: white;
}
img.left {
z-index: inherit;
margin-bottom: 3px;
float: left;
width: 200px;
min-height: 200px;
/* for modern browsers */
height: auto !important;
/* for modern browsers */
height: 200px;
/* for IE5.x and IE6 */
opacity: 0.4;
filter: alpha(opacity=40)
}
img.left:hover + #album1 {
opacity: .4;
}
img.left:hover {
opacity: 1.0;
}
#album1 {
z-index: 2;
width: 200px;
color: white;
text-align: center;
position: absolute;
background: orange;
top: 70px;
}
2 ответа
Единственный способ сделать это с помощью CSS - это если элемент, на который влияют, является либо потомком, либо соседним братом.
В случае потомка:
#parent_element:hover #child_element, /* or */
#parent_element:hover > #child_element {
opacity: 0.3;
}
Который будет применяться к таким элементам, как:
<div id="parent_element">
<div id="child_element">Content</div>
</div>
Для соседних братьев и сестер:
#first_sibling:hover + #second_sibling {
opacity: 0.3;
}
Который работает для разметки, такой как:
<div id="first_sibling">Some content in the first sibling</div> <div id="second_sibling">and now in the second</div>
В обоих случаях последний элемент в селекторе является выбранным.
Учитывая ваш пример псевдокода, вы, вероятно, хотите что-то вроде:
img:hover + img {
opacity: 0.3;
color: red;
}
Я знаю, что вы, вероятно, ищете чистый-CSS способ делать то, что вы хотите, но я бы посоветовал вам использовать HTML+CSS+JS в качестве замечательной структуры MVC, какой они есть.
- HTML - это ваша модель, содержащая ваши данные
- CSS - это ваш вид, определяющий, как должна выглядеть страница
- JS - ваш контроллер, контролирующий взаимодействие модели и представления.
Это контролирующий аспект, который должен быть использован здесь. Вы хотите контролировать вид элемента при взаимодействии с пользователем. Это именно то , для чего предназначен JS.
С очень минимальным JavaScript, вы можете включать и выключать класс #thisElement
когда img
завис над. Это, безусловно, лучше, чем играть в CSS-селекторные игры, хотя я пойму, если вы готовы принять только чистый CSS-ответ.