Cách xóa phần tô sáng trên phần tử văn bản đầu vào


610

Khi một phần tử HTML được 'tập trung' (hiện được chọn / được gắn thẻ), nhiều trình duyệt (ít nhất là Safari và Chrome) sẽ đặt một đường viền màu xanh xung quanh nó.

Đối với bố cục tôi đang làm việc, điều này gây mất tập trung và có vẻ không đúng.

<input type="text" name="user" class="middle" id="user" tabindex="1" />

Firefox dường như không làm điều này, hoặc ít nhất, sẽ cho phép tôi kiểm soát nó bằng:

border: x;

Nếu ai đó có thể cho tôi biết IE hoạt động như thế nào, tôi sẽ tò mò.

Bắt Safari để loại bỏ một chút ngọn lửa này sẽ rất tuyệt.

Câu trả lời:


1100

Trong trường hợp của bạn, hãy thử:

input.middle:focus {
    outline-width: 0;
}

Hoặc nói chung, để ảnh hưởng đến tất cả các yếu tố hình thức cơ bản:

input:focus,
select:focus,
textarea:focus,
button:focus {
    outline: none;
}

Trong các bình luận, Noah Whitmore đề nghị đưa điều này hơn nữa để hỗ trợ các yếu tố có contenteditablethuộc tính được đặt thành true(thực sự biến chúng thành một loại yếu tố đầu vào). Sau đây cũng nên nhắm mục tiêu những mục tiêu đó (trong các trình duyệt có khả năng CSS3):

[contenteditable="true"]:focus {
    outline: none;
}

Mặc dù tôi không khuyến nghị điều đó, vì mục đích hoàn chỉnh, bạn luôn có thể vô hiệu hóa phác thảo tiêu điểm trên mọi thứ với điều này:

*:focus {
    outline: none;
}

Hãy nhớ rằng phác thảo tập trung là một tính năng tiếp cận và khả năng sử dụng; nó gợi ý người dùng về yếu tố nào hiện đang được chú trọng.


10
Cảm ơn Cory, mẹo tuyệt vời. Bạn cũng cần gán CSS cho textarea để bao gồm tất cả các trường đầu vào. input:focus, textarea:focus {outline: none;}
BaronGrivet

7
đừng quên chọn cũng đượcselect:focus {outline:none;}
Geek Num 88

2
Ngoài ra còn có <button>thẻ, được sử dụng bởi jQuery UI và Twitter Bootstrap, trong số những thứ khác, vì vậy tôi sẽ thêm button: focusvào danh sách để hoàn thiện.
Chris Parton

1
Theo kinh nghiệm của tôi, điều này có thể xảy ra mà không cần tập trung, trong trường hợp đó tôi phải áp dụng nó chobutton, button:focus { outline:none; }
Mike Lyons

1
@ Cᴏʀʏ bạn có phiền khi chuyển ghi chú về a11y và khả năng sử dụng đến đầu câu hỏi của bạn không? IMO nó sẽ cải thiện đáng kể câu trả lời của bạn vì loại bỏ các tính năng a11y là một thực tế xấu.
Josef Engelfrost

64

Để loại bỏ nó khỏi tất cả các đầu vào

input {
 outline:none;
}

31

Đây là một chủ đề cũ, nhưng để tham khảo, điều quan trọng cần lưu ý là việc vô hiệu hóa phác thảo của phần tử đầu vào không được khuyến khích vì nó cản trở khả năng truy cập.

Thuộc tính phác thảo là có lý do - cung cấp cho người dùng một dấu hiệu rõ ràng về trọng tâm bàn phím. Để đọc thêm và các nguồn bổ sung về chủ đề này, hãy xem http://outlinenone.com/


1
Boaz, FYI input.middle {phác thảo: none} vẫn sẽ cho phép bạn duyệt qua các phần tử (bao gồm input.middle). Nhấn phím tab cũng sẽ tập trung vào thẻ đầu vào. Chỉ có điều là bạn sẽ không thể nhìn thấy tiêu điểm (tiêu điểm phác thảo) trên đó. Vì vậy, nó không có hại khi sử dụng nó .. :)
Anish Nair

11
@AquerNair Only thing is that you won't be able to see the focus(outline focus) on it- và đó chính xác là quan điểm của tôi. Xóa phác thảo sẽ vô hiệu hóa dấu hiệu trực quan của sự kiện trọng tâm, không phải sự kiện thực tế. Xóa chỉ dẫn trực quan có nghĩa là bạn đang làm cho những người khuyết tật dựa vào chỉ định đó khó khăn hơn.
Boaz - Phục hồi Monica

2
Đôi khi chúng ta cần phải thỏa hiệp, để đạt được điều gì đó :)
Anish Nair

6
@AquerNair Đúng. Nhưng nhiều hơn mọi người đọc chủ đề này sẽ thích cách dễ dàng (nghĩa là outline:none;) mà không xem xét các hàm ý. Chỉ vì điều gì đó dễ dàng và tiết kiệm thời gian, không có nghĩa đó là cách thực hành tốt nhất :)
Boaz - Tái lập Monica

5
Tôi đến trễ để thảo luận, nhưng bạn vẫn có thể định kiểu trạng thái tập trung của các đầu vào (như thay đổi màu hoặc độ rộng đường viền). Miễn là bạn luôn ghi nhớ khả năng truy cập khi thực hiện điều đó (độ tương phản tốt, v.v.), nó chỉ có thể truy cập như các phác thảo mặc định.
Meg

18

Đây là một mối quan tâm chung.

Các phác thảo mặc định mà trình duyệt hiển thị là xấu xí.

Xem ví dụ này:


"Cách khắc phục" phổ biến nhất mà hầu hết khuyến nghị là outline:none- nếu sử dụng không đúng cách - là thảm họa cho khả năng truy cập.


Vì vậy, ... những gì sử dụng là phác thảo?

Có một trang web rất khô mà tôi tìm thấy giải thích mọi thứ tốt.

Nó cung cấp phản hồi trực quan cho các liên kết có "tiêu điểm" khi điều hướng tài liệu web bằng phím TAB (hoặc tương đương). Điều này đặc biệt hữu ích cho những người không thể sử dụng chuột hoặc khiếm thị. Nếu bạn xóa phác thảo bạn đang làm cho trang web của bạn không thể truy cập được cho những người này.

Ok, chúng ta hãy thử ví dụ như trên, bây giờ sử dụng TABphím để điều hướng.

Lưu ý làm thế nào bạn có thể biết nơi tập trung ngay cả khi không nhấp vào đầu vào?

Bây giờ, hãy thử outline:nonetin tưởng của chúng tôi<input>

Vì vậy, một lần nữa, sử dụng TABphím để điều hướng sau khi nhấp vào văn bản và xem điều gì xảy ra.

Xem làm thế nào khó khăn hơn để tìm ra nơi tập trung là gì? Dấu hiệu duy nhất là con trỏ nhấp nháy. Ví dụ của tôi ở trên là quá đơn giản. Trong các tình huống thực tế, bạn sẽ không chỉ có một yếu tố trên trang. Một cái gì đó nhiều hơn dọc theo dòng này.

Bây giờ so sánh nó với cùng một mẫu nếu chúng ta giữ nguyên phác thảo:

Vì vậy, chúng tôi đã thiết lập như sau

  1. Đề cương là xấu
  2. Loại bỏ chúng làm cho cuộc sống khó khăn hơn.

Vậy câu trả lời là gì?

Loại bỏ các phác thảo xấu xí và thêm tín hiệu hình ảnh của riêng bạn để chỉ trọng tâm.

Đây là một ví dụ rất đơn giản về những gì tôi muốn nói.

Tôi xóa phác thảo và thêm đường viền dưới vào : tập trung: kích hoạt . Tôi cũng xóa các đường viền mặc định ở phía trên, bên trái và bên phải bằng cách đặt chúng ở dạng trong suốt : tập trung: hoạt động (tùy chọn cá nhân)

Vì vậy, chúng tôi cố gắng tiếp cận trên với ví dụ "thực tế" của chúng tôi từ trước đó:

Điều này có thể được mở rộng hơn nữa bằng cách sử dụng các thư viện bên ngoài dựa trên ý tưởng sửa đổi "phác thảo" thay vì loại bỏ nó hoàn toàn như Materialize

Bạn có thể kết thúc với một cái gì đó không xấu và làm việc với rất ít nỗ lực


18

Điều này đã gây nhầm lẫn cho tôi một thời gian cho đến khi tôi phát hiện ra đường kẻ không phải là đường viền hay đường viền, nó là một cái bóng. Vì vậy, để loại bỏ nó, tôi đã phải sử dụng nó:

input:focus, input.form-control:focus {

    outline:none !important;
    outline-width: 0 !important;
    box-shadow: none;
    -moz-box-shadow: none;
    -webkit-box-shadow: none;
}

6

Bạn có thể sử dụng CSS để vô hiệu hóa điều đó! Đây là mã tôi sử dụng để vô hiệu hóa đường viền màu xanh:

*:focus {
outline: none;
}

Điều này sẽ loại bỏ các đường viền màu xanh!

Đây là một ví dụ hoạt động: JSfiddle.net

Hy vọng nó giúp!


4

Loại bỏ tất cả các kiểu lấy nét là không tốt cho khả năng truy cập và người dùng bàn phím nói chung. Nhưng phác thảo là xấu xí và cung cấp một phong cách tập trung tùy chỉnh cho mọi phần tử tương tác duy nhất có thể là một nỗi đau thực sự.

Vì vậy, sự thỏa hiệp tốt nhất mà tôi tìm thấy là chỉ hiển thị các kiểu phác thảo khi chúng tôi phát hiện ra rằng người dùng đang sử dụng bàn phím để điều hướng. Về cơ bản, nếu người dùng nhấn TAB, chúng tôi trình bày đề cương và nếu ông sử dụng chuột, chúng tôi ẩn chúng.

Nó không ngăn bạn viết các kiểu lấy nét tùy chỉnh cho một số yếu tố nhưng ít nhất nó cung cấp một mặc định tốt.

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

// detect keyboard users

const keyboardUserCssClass = "keyboardUser";

function setIsKeyboardUser(isKeyboard) {
  const { body } = document;
  if (isKeyboard) {
   body.classList.contains(keyboardUserCssClass) || body.classList.add(keyboardUserCssClass);
  } else {
   body.classList.remove(keyboardUserCssClass);
  }
}

// This is a quick hack to activate focus styles only when the user is
// navigating with TAB key. This is the best compromise we've found to
// keep nice design without sacrifying accessibility.
document.addEventListener("keydown", e => {
  if (e.key === "Tab") {
   setIsKeyboardUser(true);
  }
});
document.addEventListener("click", e => {
  // Pressing ENTER on buttons triggers a click event with coordinates to 0
  setIsKeyboardUser(!e.screenX && !e.screenY);
});

document.addEventListener("mousedown", e => {
  setIsKeyboardUser(false);
});
body:not(.keyboardUser) *:focus {
  outline: none;
}
<p>By default, you'll see no outline. But press TAB key and you'll see focussed element</p>
<button>This is a button</button>
<a href="#">This is anchor link</a>
<input type="checkbox" />
<textarea>textarea</textarea>
<select/>


Đây là một cách tiếp cận kỹ lưỡng. Người clicknghe là một liên lạc tốt đẹp.
Keith DC

4

Tôi đã thử tất cả các câu trả lời và tôi vẫn không thể bắt tôi làm việc trên Mobile cho đến khi tôi tìm thấy -webkit-tap-highlight-color.

Vì vậy, những gì làm việc cho tôi là ...

* { -webkit-tap-highlight-color: transparent; }

1
Đó là giải pháp tôi đang tìm kiếm. Điều này đặc biệt hữu ích khi bạn trải nghiệm màn hình cảm ứng với các yếu tố như li
Anand G

4

Solutiion duy nhất làm việc với tôi

input[type="text"]:focus{
     box-shadow: 0 0 0 rgb(255, 255, 255);
}

 input[type="checkbox"]:focus{
      box-shadow: 0 0 0 rgb(255, 255, 255);
 }


2

Không ai trong số các giải pháp làm việc cho tôi trong Firefox.

Giải pháp sau đây thay đổi kiểu viền trên tiêu điểm cho Firefox và đặt phác thảo thành không có cho các trình duyệt khác.

Tôi đã thực sự làm cho đường viền tiêu điểm chuyển từ màu xanh lam 3px sang kiểu viền phù hợp với đường viền vùng văn bản. Dưới đây là một số kiểu viền:

Đường viền nét đứt (viền 2px nét đỏ): Đường viền đứt nét.  viền 2px màu đỏ

Không biên giới! (viền 0px):
Không biên giới.  viền: 0px

Đường viền Textarea (viền màu xám 1px): Biên giới văn bản.  viền 1px màu xám

Đây là mã:

input:focus, textarea:focus {
    outline: none; /** For Safari, etc **/
    border:1px solid gray; /** For Firefox **/
}

#textarea  {
  position:absolute;
  top:10px;
  left:10px;
  right:10px;
  width:calc(100% - 20px);
  height:160px;
  display:inline-block;
  margin-top:-0.2em;
}
<textarea id="textarea">yo</textarea>


1

Bạn cũng có thể thử điều này

input[type="text"] {
outline-style: none;
}

hoặc là

.classname input{
outline-style: none;
}

1

Bạn có thể xóa đường viền màu cam hoặc màu xanh lam (phác thảo) xung quanh hộp văn bản / đầu vào bằng cách sử dụng: phác thảo: không

input {
    background-color: transparent;
    border: 0px solid;
    height: 20px;
    width: 160px;
    color: #CCC;
    outline:none !important;
}

0

Hủy bỏ các phác thảo khi tập trung vào yếu tố, sử dụng bên dưới thuộc tính CSS:

input:focus {
    outline: 0;
}

Thuộc tính CSS này loại bỏ phác thảo cho tất cả các trường đầu vào tập trung hoặc sử dụng lớp giả để xóa phác thảo của phần tử bằng cách sử dụng thuộc tính CSS bên dưới.

.className input:focus {
    outline: 0;
} 

Thuộc tính này loại bỏ các phác thảo cho các yếu tố được chọn.


0

Thử cái này

*:focus {
    outline: none;
}

Điều này sẽ có hiệu lực trên khắp các trang của bạn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.