2013-06-20 5 views
0

Я пытаюсь узнать немного больше о переходах CSS3 и «классных вещах». Таким образом, у меня есть несколько отличных анимаций на моем сайте, и я сделал некоторые исследования Google, которые помогли мне совсем немного.Переход CSS3, целевой элемент до элемента hover

Я хотел выбрать элемент вне моего элемента hover. Я узнал, что с помощью знака + вы можете настроить таргетинг на элемент, который появляется после элемента hover. Небольшой пример (в LESS):

header{ 
    display: inline-block; 
    div#bg_2{ 
     color:#000; 
    } 
    div#container{ 
     float:left; 
     &:hover{    
      & + nav { 
       ul{ 
        opacity: 0; 
       } 
       li{ 
        .transition(1200ms, ease-in-out); 
        margin-left:-100px; 
       } 
      } 
     } 

    } 
    nav{ 
     height:30px; 
    } 
} 

Так что этот пример позволяет мне дать переход к элементу после элемента парения. Но мой вопрос в том, можно ли сделать обратное? Нацеливать элемент перед элементом наведения? В примере используется элемент bg_2.

+3

Что бы это ни было, SASS или LESS Я предполагаю, что это не CSS. –

+0

он пишет в LESS, но это просто CSS. –

+1

Он * оценивает * в CSS, но это не CSS (как написано). –

ответ

1

! subject selector в черновике CSS-селекторов 4 - это способ выбора предыдущего элемента. Он предлагает, чтобы вместо того, чтобы писать .one + .two { … } в стиле .two, вы можете написать !.one + .two { … } в стиле .one.

Однако ! в настоящее время не используется ни в одном браузере. И спецификация CSS Selectors 4 все еще может измениться, потому что это черновик. Кроме того, спецификация в настоящее время отмечает селектор объектов ! как «полный» profile, который предназначен для использования JavaScript, но не в «быстром» профиле, который должен использовать CSS.

Поскольку вы не можете использовать !, в настоящее время нет способа выбрать то, что вы хотите, с помощью чистого CSS.

См. Также this answer about there being no parent selector, который ссылается на спецификации CSS, где вы можете найти все определенные селекторы.

+0

Спасибо, я буду помнить об этом. –

+0

Я бы хотел, чтобы люди правильно прочитали спецификации, на которые они ссылаются. Даже в селекторах уровня 4 api он по-прежнему не реализуется (вероятно): «[Fast vs Complete Selector Profile] (http://www.w3.org/TR/selectors4/#subject)». Кроме того, селектор api не завершен, тем не менее, он может и, вероятно, продолжит еще несколько изменений. –

+0

@David Thomas: :) – BoltClock

0

Только CSS не может достичь того, что вам нужно. У нас есть одноуровневые селекторы (+ и ~), но элемент мишенью должен прийти после первого элемента. *

В качестве простого примера, проверьте this fiddle. Учитывая эту разметку:

<p class="one">One</p> 
<p class="two">Two</p> 

и этот CSS:

.one ~ .two { background: red; } 
.two ~ .one { background: green; } 

Вы могли бы ожидать .one закончить зеленый и красный .two. В действительности только .two получает цвет фона, потому что вторая строка пытается стилизовать элемент, который предшествует в DOM.

* + является смежным смежным браслетом, ~ общий комбинированный комбинатор. См. Это CSS Tricks article для деталей. Они очень похожи: + будет нацелен только на элемент непосредственно после другого конкретного элемента, тогда как ~ будет нацелен на родного брата, который появляется где-нибудь после него.

+0

Да, мое решение заключается в том, чтобы сделать это с помощью некоторого jQuery, но мне было интересно, можно ли его выбрать с помощью CSS , –

+0

Это невозможно с помощью CSS (потенциальные будущие селекторы в стороне): так что на данный момент это или @ Rory's должен быть принятым ответом. – CherryFlavourPez