2011-07-13 26 views

Trả lời

6

Trong khi giả yếu tố ::selection vẫn còn trong draft spec, text-decoration đã không tuyên bố là một trong những thuộc tính phong cách cho phép. Mặc dù các trình duyệt vẫn thực hiện nó, chúng phải tuân thủ các quy tắc theo tài liệu đó, không cho phép text-decoration như vậy.

Điều đó nói rằng, không có gì sai với bộ chọn của bạn, mặc dù điều đáng chú ý là Firefox sử dụng phiên bản đầu tiên của nhà cung cấp ::-moz-selection thay thế. Bạn sẽ phải lặp lại quy tắc để hỗ trợ trình duyệt đó, cùng với Chrome, Safari và Opera (xem this answer để biết thông tin).

Vì vậy, trong SCSS, bạn muốn làm điều này:

* { 
    &::-moz-selection { /* Style any selection */ } 
    &::selection { /* Style any selection */ } 
} 

Bạn có thể có thể làm giảm rằng việc sử dụng mixins, nhưng tôi không chắc chắn nếu mixins làm việc với selectors pseudo-yếu tố.

11

mixins làm việc với chọn thành phần giả;) xem mixin tôi:

$prefixes: ("-moz-", ""); 
@mixin selection($color, $background) { 
    @each $prefix in $prefixes { 
     ::#{$prefix}selection { 
      color: $color; 
      background: $background; 
     } 
    } 
} 

làm thế nào để sử dụng:

@include selection(white, black); 

tất nhiên bạn có thể làm cho nó xa linh hoạt hơn, nhưng nó đã đủ cho tôi ;)

+1

:: lựa chọn chỉ có một tiền tố moz, và nó có giá trị cần lưu ý rằng đó là một tiêu chuẩn không và không nên được sử dụng, kiểm tra [trang] này (https://developer.mozilla.org/en-US/docs/CSS/::selection) trên mạng nhà phát triển Mozilla. – Pierre

+0

@Peter: Lạ là tôi đã bỏ lỡ nó khi tôi chỉnh sửa câu trả lời này lần đầu tiên. Tôi thường chú ý đến những thứ này. (Và có, tôi biết bạn không phải là cùng một Peter.) – BoltClock

26

đó là cách tôi làm điều đó:

// define it 
@mixin selection { 
    ::-moz-selection { @content; } 
    ::selection { @content; } 
} 

// use it 
@include selection { 
    color: white; 
    background: black; 
} 

Cập nhật

Tôi khuyên bạn chỉ nên sử dụng ::selection {} với autoprefixer thay vì bản mixin. Điều này sẽ làm cho mã của bạn mỏng hơn và bộ não của bạn nhẹ hơn :)

Trong trường hợp này, autoprefixer sẽ làm thay đổi này:

::selection { 
    color: white; 
    background: black; 
} 

... (tùy thuộc vào trình duyệt mục tiêu của bạn/cấu hình) vào một cái gì đó như thế:

::-moz-selection { 
    color: white; 
    background: black; 
} 

::selection { 
    color: white; 
    background: black; 
} 
+3

Điều này chắc chắn là sạch hơn và tái sử dụng nhiều hơn câu trả lời của Peter. Hy vọng nó tăng lên đến đỉnh! – BoltClock

+0

@VitalyBatonov Nếu câu hỏi của bạn được trả lời, đánh dấu nó như nó là :) – yckart

+0

Đáng buồn thay, tôi không nghĩ rằng điều đó sẽ xảy ra - OP đã không được trên trang web kể từ khi ngay cả trước khi bạn đăng câu trả lời này. Câu trả lời của bạn đã lên đến đỉnh, tuy nhiên, do đó, có ít nhất. – BoltClock

0

Kết hợp tuyệt vời, tôi đã thay đổi để làm việc bên trong quy tắc bằng cách thêm "&", nó hoạt động tốt hơn cho tôi. Tôi cũng đã thêm tiền tố trống để nhận quy tắc không có tiền tố.

@mixin selection($color, $background) { 
    $prefixes: ("-moz-", "-webkit-", "-o-", "-ms-", ""); 
    @each $prefix in $prefixes { 
     &::#{$prefix}selection { 
     color: $color; 
     background: $background; 
     } 
    } 
} 
0

Với la bàn bạn có thể làm điều đó như sau:

@import "compass/css3/selection"; 
@include selection($highlightBackground, $highlightColor) 
+0

"Chỉ cần sử dụng thư viện của người khác" không giải thích cách người ta sẽ viết về một tính năng tương tự không tồn tại trong thư viện đã nói. – cimmanon

Các vấn đề liên quan