2014-07-24 28 views
9

:focus ve :hover ile biçimlendirdiğim bir girdi var. Giriş :focus olduğunda, girişin üzerine geldiğimde :hover stilinin tetiklenmesini istemiyorum.Giriş olduğunda: focus, tetikleme: hover stilleri

Bunu nasıl şekillendirmem gerekiyor?

.form-control:hover { 
    border-color: #a9a9a9; 
} 

.form-control:focus { 
    box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 2px rgba(102,175,233,.6); 
    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 2px rgba(102,175,233,.6); 
} 

cevap

0

hızlı kesmek: .form-kontrol katı 0px #FFFFFF: Bir kenarlık eklemek odak üzerinde sınır Çıkarma

+0

Büyük olasılıkla kenar genişliğini kastediyorsunuz. Evet, tam olarak – BoltClock

+0

. Onu düzenleyeceğim. – ml242

0

odak çalışır:

.form-control:hover { 
    border-color: #a9a9a9; 
} 
.form-control:focus { 
    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 2px rgba(102, 175, 233, 0.6); 
    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 2px rgba(102, 175, 233, 0.6); 
    border: none; 
} 

Benim css olarak izleyin

Veya "atlama" biçiminde olmaması için kenarlığı şeffaf olarak şeffaf olarak ayarlayın.

.form-control:hover { 
    border-color: #a9a9a9; 
} 
.form-control:focus { 
    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 2px rgba(102, 175, 233, 0.6); 
    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 2px rgba(102, 175, 233, 0.6); 
    border-color: rgba(0, 0, 0, 0); 
} 

Buraya bakın: http://jsfiddle.net/kbLP9/: http://codepen.io/TheNathanG/pen/eCtiu

0

bir çözüm girişi :focus olduğunda pointer-events: none beyanı kullanmaktır. http://jsfiddle.net/7LbNV/:

.form-control:focus { 
    box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 2px rgba(102,175,233,.6); 
    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 2px rgba(102,175,233,.6); 
    pointer-events: none; 
} 

başka çözüm, arzu edilen etkiyi elde etmek için sözde sınıfları :focus ve :hover birleştirmektir.

.form-control:focus:hover { 
    border-color: initial; 
} 
+1

Sadece imleç-olayları kullanmanın, yalnızca fareyi kullanarak fareyi kullanarak başka şekillerde kullanabilmeyi beklediği form alanları ve diğer öğeler üzerinde gezinme etkilerini önlemek için kullanmanızı şiddetle tavsiye ederim. kenarlık rengi: başlangıç ​​'biraz daha tarayıcı uyumluluğu için' border-color: currentColor 'ile değiştirilebilir. Alternatif, geriye uyumlu bir çözüm için – BoltClock

12

bunun için bir belirli CSS seçici :not seçici var. Ve good compatibility vardır:

a:hover:not(:focus) { 
 
    color: magenta; 
 
} 
 

 
a:focus:not(:hover) { 
 
    color: cyan; 
 
}
<a href="example.com">Stackoverflow</a>
Ben de böyle bir şey ile, gelme durumuna göre biraz daha "statik" olacağından, focus olaya tercih vermek önermek:

a:hover:not(:focus) { 
 
    color: magenta; 
 
} 
 

 
a:focus { 
 
    color: cyan; 
 
}
<a href="example.com">Stackoverflow</a>

Ve geriye doğru uyumlu alternatif Gönderen: Basit bir deyişle

a:hover { 
 
    color: magenta; 
 
} 
 

 
a:focus { 
 
    color: cyan; 
 
} 
 

 
a:focus:hover { 
 
    color: cyan; 
 
}
<a href="example.com">Stackoverflow</a>

:

Sen hover ve camgöbeği için her durum (eflatun için bir kural vardır focus) ve her ikisi için de, focus durumuna (görsel olarak) tercih verme: cyan.

2

Basitçe şöyle bir :not(:focus) için :hover kuralı ekleyin: tarayıcı desteği bir konudur

.form-control:hover:not(:focus) { 
    border-color: #a9a9a9; 
} 

ise (:not() IE8'de ve alt desteklenmez gibi), muhtemelen sadece yeni bir kural yazmak zorunda kalacak kodlanmış bir renk değeriyle :hover kuralı geçersiz kılmak için :hover ve :focus birleştirme (border-color, currentColor başlangıç ​​değeri olarak, IE8'de desteklenen ve ya daha düşük değildir):

.form-control:hover { 
    border-color: #a9a9a9; 
} 

.form-control:hover:focus { 
    border-color: /* Default border color depending on your layout */; 
} 
+0

+1. – arielnmz