2017-10-23 68 views
5

Właśnie zaktualizowałem przeglądarkę Google Chrome na moim komputerze PC i Mac do wersji 62, a właściwość CSS user-select: all przestała działać poprawnie.Wybór użytkownika: dziedziczenie nie działa w chrome 62

Jeśli rodzic mający user-select ma wartość none, a element potomny ma wartość user-select, właściwość nadrzędna nie jest nadpisywana poprawnie.

-webkit-user-select: all; 
-moz-user-select: all; 
-ms-user-select: all; 
user-select: all; 

Czy ktoś inny doświadczył tego i wie, czy jest to błąd w nowej wersji Google Chrome, czy też jest właściwy sposób wdrożenia tego?

Oto kod wykazując problemu (użyj Chrome 62 widzi ten problem) - JSFiddle:

div { 
 
    margin: 5px; 
 
} 
 
.parent { 
 
    -webkit-user-select: none; 
 
    -moz-user-select: none; 
 
    -ms-user-select: none; 
 
    user-select: none; 
 
} 
 
.child { 
 
    -webkit-user-select: text; 
 
    -moz-user-select: text; 
 
    -ms-user-select: text; 
 
    user-select: text; 
 
}
<div class="parent"> 
 
    <div class="child"> 
 
    Parent has user-select set to none, Try to select this text 
 
    </div> 
 
</div> 
 

 
<div class="child"> 
 
    No parent, Try to select this text 
 
</div>

+0

Prawdopodobnie jest to błąd w przeglądarce. Mogę wybrać ten tekst za pomocą Ctrl + A - w systemie Windows - ale nie za pomocą przeciągania myszą. – Nisarg

Odpowiedz

3

To jest problem w przeglądarce Chrome. Błąd został już zgłoszony. Więcej szczegółów na temat błędu można znaleźć w innym (nie działającym przykładzie) pod numerem this bug report.


Dopóki błąd nie zostanie naprawiony, możliwe jest użycie niektórych skryptów JavaScript w celu zachowania. Zobacz this answer on StackOverflow.


Innym rozwiązaniem non JavaScript byłby następujący:

.parent :not(.selectable-all) { 
 
    -webkit-user-select: none; 
 
    -moz-user-select: none; 
 
    -ms-user-select: none; 
 
    user-select: none; 
 
} 
 
.selectable-all { 
 
    -webkit-user-select: all; 
 
    -moz-user-select: all; 
 
    -ms-user-select: all; 
 
    user-select: all; 
 
}
<div class="parent"> 
 
    <span>user-select set to none and not selectable all.</span> 
 
    <div class="child selectable-all"> 
 
    Parent has user-select set to none, Try to select this text 
 
    </div> 
 
</div> 
 

 
<div class="child selectable-all"> 
 
    No parent, Try to select this text 
 
</div>

+0

Idealne, czyste rozwiązanie css działa doskonale –

+0

czy wiesz, jak mogę to wykorzystać dla wszystkich potomków? Jak widać w tym skrzypcach to nie działa: https://jsfiddle.net/txdhez7k/1/ TIA –

+0

w ten sposób? - https://jsfiddle.net/sebastianbrosch/txdhez7k/2/ - jeśli nie opiszemy twojego problemu bardziej szczegółowo. –

0

Spróbuj zmienić user-select:all do user-select:text

CSS:

div { 
    margin: 5px; 
} 

.parent { 
    -webkit-user-select: none; 
    -moz-user-select: none; 
    -ms-user-select: none; 
    user-select: none; 
} 

.child { 
    -webkit-user-select: text; 
    -moz-user-select: text; 
    -ms-user-select: text; 
    user-select: text; 
} 

Demo: https://jsfiddle.net/lotusgodkk/12jfpzys/2/

+0

Wybór tekstu nie jest dobrym rozwiązaniem, ponieważ chcę zapewnić użytkownikowi opcję wyboru całego pola za pomocą jednego kliknięcia, wybierz tekst wymaga, aby użytkownik kliknął 2 lub 3 razy, aby zaznaczyć cały tekst. –