2013-08-05 3 views
2

Я получил эту структуру:Изменить стиль CSS элемента, щелкнув другой

<div id="d1"> 
Text 
<div id="d2">Word</div> 
<a href="#hide">My other text</a> 
</div> 

Теперь я хочу, чтобы по щелчку на #hide:target, div#d2 исчезают.

Могу ли я сделать это с помощью CSS?

+4

Что такое ': target'? – MightyPork

+2

У CSS нет событий click. Он имеет селектор ': hover', но без щелчка. – gvee

+0

@gvee CSS ': active' не является селектором кликов? – Memolition

ответ

12

Вы можете сделать это с помощью CSS!

Если изменить ваш HTML разметку немного вы можете добиться этого с помощью CSS :target

#d2:target { 
 
     display: none; 
 
    }
<div id="d1"> 
 
     Text 
 
    <div id="d2">Word 
 
     <a href="#d2">My other text</a> 
 
    </div>

+0

... очень умный! – gvee

+0

+1 для выхода из готового решения. Я не вижу другого способа сделать это, используя только CSS. – AnaMaria

+0

Очень хорошо .. Спасибо! – Grork

1

Возможно, вы должны использовать javascript или jQuery для этого.

$('#object').click(function(){ 
    $('#tohide').hide(); 
}); 

Чтобы сделать его специфичным для этого (локальной области)

if($('#d2 a').attr('href')=='#hide'){ 
    $('#d2 a').click(function(){ 
    $('#d2').hide(); 
    }); 
} 

Но это не правильный способ сделать это. Используйте классы.

0

вы можете сделать это с помощью JQuery очень легко, как:

$(document).ready(function(){ 
    $("a").click(function(){ 
    $("#d2").hide(); 
}); 
}); 

</script> 
1

Вы можете сделать это с помощью CSS, но вы должны использовать JavaScript, чтобы изменить CSS (стиль) элемента.

Это решение не требует подключаемых модулей (таких как jQuery).

<div id="d1"> 
    Text 
    <div id="d2">Word</div> 
    <a href="#hide" onclick="document.getElementById('d2').style.display='none';">My other text</a> 
</div> 

Если вы хотите, чтобы он был полностью бесфункционным.

<div id="d1"> 
    Text 
    <div id="d2">Word</div> 
    <a href="#hide" onclick="this.previousSibling.previousSibling.style.display='none';">My other text</a> 
</div> 
+0

Хорошее решение. Но все еще не идеально. Поскольку document.getElementById - это функция Jscript. Я все равно поеду с этим ... +1 – AnaMaria

-1

Я твердо убежден, что CSS для стиля, и Javascript для функции (и HTML предназначен для разметки).

Я совершил ошибку, используя: цель и функциональность здания с CSS, где это не должно быть, и поверьте мне, вы собираетесь сделать кошмар для себя с этими вредными привычками в будущем. jQuery будет вашим лучшим другом в подобных ситуациях. Он работает во всех браузерах (которые поддерживают javascript), и у вас не будет вашей функциональности, ломающейся в крайних случаях, и ваши пользователи разозлились. Сделайте то, что говорит Джек, и используйте простой JQuery. вы также можете использовать .addClass и .removeClass, чтобы изменить css другими способами, чем просто скрыть/показать.

+0

Проснись! Для этого вам не нужен jQuery. – idmean

+0

Вы абсолютно правы, вам НЕ НУЖНО jQuery. Но как вы можете видеть в этой таблице: http: //www.quirksmode.org/css/selectors/(look for: target), который вы предлагаете, не будет хорошо работать в любой версии IE. Даже 9 и 10 (отличные браузеры, на мой взгляд) перечислены как имеющие «неполную» поддержку. Не нужно использовать jQuery, так как не нужно ничего делать с помощью передовой практики. Но для того, чтобы все правильно работало во многих случаях использования, попробуйте использовать передовую практику. Прошло уже 11 утра, и я очень бодрствую, спасибо. –

+0

Я имею в виду, что лучше использовать обычный JavaScript, а не jQuery. (Если это единственный раз, когда вам нужен javascript), я не говорил о том, чтобы использовать CSS. – idmean

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