Làm thế nào để ghi đè! Quan trọng?


249

Tôi đã tạo một biểu định kiểu tùy chỉnh ghi đè CSS gốc cho mẫu Wordpress của tôi. Tuy nhiên, trên trang lịch của tôi, CSS gốc có chiều cao của mỗi ô được đặt với !importantkhai báo:

td {height: 100px !important}

Có một số cách tôi có thể ghi đè này?


3
Bạn cũng đã thử sử dụng !importantchưa? Nếu bảng CSS của bạn được xác định sau mẫu gốc, nó sẽ hoạt động tốt.
Petr Janeček

1
Tờ nào xuất hiện cuối cùng, của bạn hay của mẫu?
j08691

67
Đây là lý do tại sao !importantđược coi là có hại.
Spudley

8
Cách mạnh mẽ nhất là như vậy: td [style] {height: 110px! Quan trọng; }. nó hoạt động như thể bạn đã chèn kiểu nội tuyến vào html vì bạn đang áp dụng kiểu cho thuộc tính kiểu thực của thẻ.
DMTintner

Câu trả lời:


351

Ghi đè! Sửa đổi quan trọng

  1. Chỉ cần thêm quy tắc CSS khác với !important và cung cấp cho bộ chọn độ đặc hiệu cao hơn (thêm thẻ, id hoặc lớp bổ sung vào bộ chọn)
  2. thêm một quy tắc CSS với cùng một bộ chọn ở điểm muộn hơn so với quy tắc hiện có (trong một tie, cái cuối cùng được xác định sẽ thắng).

Một số ví dụ có độ đặc hiệu cao hơn (thứ nhất là cao nhất / ghi đè, thứ ba là thấp nhất):

table td    {height: 50px !important;}
.myTable td {height: 50px !important;}
#myTable td {height: 50px !important;}

Hoặc thêm cùng một bộ chọn sau cái hiện có:

td {height: 50px !important;}

Tuyên bố từ chối trách nhiệm:

Nó gần như không bao giờ là một ý tưởng tốt để sử dụng !important. Đây là kỹ thuật xấu của những người tạo ra mẫu WordPress. Theo kiểu lan truyền, nó buộc người dùng mẫu phải thêm các !importantsửa đổi riêng để ghi đè lên nó và nó giới hạn các tùy chọn để ghi đè lên nó thông qua JavaScript.

Nhưng, thật hữu ích khi biết cách ghi đè lên nó, nếu đôi khi bạn phải làm thế.


7
Tôi biết rằng đây là một chút về phía cũ của câu trả lời, nhưng có lẽ bạn có thể thêm một nhận xét rằng đây là một cách cực kỳ tồi để tác giả CSS của bạn (hoặc nêu rõ lý do tại sao nó có thể chấp nhận được nếu bạn không đồng ý)? Tôi đã thấy mọi người tham khảo câu trả lời này ... :)
ZenMaster

Câu trả lời chính xác. Tôi đồng ý, đó là một mớ hỗn độn. Nó buộc tôi phải hack xung quanh hack của họ, sau đó ai đó hack xung quanh hack của tôi, v.v. Trong trường hợp của tôi, tôi phải xử lý các mẫu lấy CSS của họ từ cơ sở dữ liệu ở đâu đó. Tôi grep kết xuất DB và nó cho tôi thấy nó xuất phát từ blob json 1 MB. Tôi không hữu ích lắm trong việc tìm nơi thay đổi nó, buộc tôi phải thêm CSS vào một tệp mã, cách nó nên được thực hiện, ngoại trừ với những hack khó chịu này.
Josh Ribakoff


cũng có thể là một ý tưởng tốt để thêm định danh thẻ ngay cả khi nó làm chậm css. Chỉ cần sửa một lỗi mà tôi phải đặt trong div # header. Class {style :; } để nó mất ... rất phiền phức
Sparatan117

Có những công dụng tốt cho !important. Giống như ghi đè kiểu trình duyệt hoặc toàn trang web từ tập lệnh Kiểu, AdBlock hoặc uBlock. Hoặc khi bạn không có quyền truy cập hợp lý dễ dàng vào CSS cơ sở, có thể rất phức tạp, trải qua nhiều tệp và thay đổi theo thời gian (và cũng có thể sử dụng !important). Giống như bất kỳ công cụ nào, tiềm năng tích cực hay tiêu cực dựa trên cách bạn sử dụng nó. Mọi người cần ngừng đi vượn bất cứ khi nào những thứ như thế này hoặc goto / eval / globalals / vv. được đề cập. Cũng có thể nói "tránh WordPress" hoặc "tránh CSS" vì khả năng "làm rối tung mọi thứ" là quá lớn.
Beejor

30

Chỉ !importantnên được sử dụng khi bạn có bộ chọn trong biểu định kiểu của mình với tính đặc hiệu xung đột .

Nhưng ngay cả khi bạn có tính đặc hiệu xung đột, tốt hơn là tạo một bộ chọn cụ thể hơn cho ngoại lệ. Trong trường hợp của bạn, tốt hơn là có một classHTML của bạn mà bạn có thể sử dụng để tạo một bộ chọn cụ thể hơn mà không cần !importantquy tắc.

td.a-semantic-class-name { height: 100px; }

Cá nhân tôi không bao giờ sử dụng !importanttrong phong cách của tôi. Hãy nhớ rằng C trong CSS là để xếp tầng. Sử dụng !importantsẽ phá vỡ điều này.


17
Đây không phải là sự thật. Một !importantquy tắc trong stylesheet sẽ ghi đè lên một quy luật bình thường trong một stylethẻ, ví dụ. Tuy nhiên, trong một số tình huống, có vẻ như một quy tắc cụ thể hơn sẽ ghi đè lên nó. Ví dụ: nếu bạn đặt font-size: 24pt !importantbật body, bạn vẫn có thể ghi đè bằng font-size: 12ptbật p. Điều này là do bạn không trọng các !importantquy tắc, bạn được trọng các ngầm font-size: inherittrên p.
meustrus

23

Tuyên bố từ chối trách nhiệm: Tránh! Quan trọng bằng mọi giá.

Đây là một hack bẩn, bẩn, nhưng bạn có thể ghi đè một! Quan trọng, mà không cần! Quan trọng, bằng cách sử dụng một hình ảnh động (lặp vô hạn hoặc rất lâu) trên tài sản mà bạn đang cố gắng ghi đè lên các nhà nhập khẩu.

@keyframes forceYellow {
  from {
    background-color: yellow;
  }
  to {
    background-color: yellow;
  }
}

div {
  width: 100px;
  height: 100px;
  margin: 0 auto;
  background: red !important;
  animation: 1s linear infinite forceYellow;
}
<div></div>


2
có khả năng làm căng CPU của người dùng
Berry Tsakala

2
Có vẻ như thủ thuật này không còn hiệu quả nữa. Trên Firefox 78 và Chrome 83, hộp vẫn có màu đỏ.
Andy Pan

13

Được rồi đây là một bài học nhanh về Tầm quan trọng của CSS. Tôi hy vọng rằng dưới đây sẽ giúp!

Trước hết, mỗi phần của tên kiểu là trọng số, vì vậy bạn càng có nhiều yếu tố liên quan đến kiểu đó thì nó càng quan trọng. Ví dụ

#P1 .Page {height:100px;}

quan trọng hơn:

.Page {height:100px;}

Vì vậy, khi sử dụng quan trọng, lý tưởng này chỉ nên được sử dụng, khi thực sự cần thiết. Vì vậy, để vượt qua sự giải mã, làm cho phong cách cụ thể hơn, nhưng cũng có một ghi đè. Xem bên dưới:

td {width:100px !important;}
table tr td .override {width:150px !important;}

Tôi hi vọng cái này giúp được!!!


hai !importantcó thể được ghi đè bởi tái xác định .old-class-name {bla bla bla} như .old-đẳng cấp name.overrided {bla bla bla} trong <style></style>thẻ trên các thành phần, đó là công việc đối với tôi
Tarek Kalaji

11

Ghi đè bằng JavaScript

$('.mytable td').attr('style', 'display: none !important');

Đã làm cho tôi.


Tôi nghĩ rằng phong cách nội tuyến luôn ghi đè lên quan trọng của cha mẹ! cờ.
Joshua Ramirez

3
@JoshuaRamirez Không, họ thực sự không ghi đè một cờ quan trọng trừ khi bạn đặt cờ! Quan trọng là nội tuyến
Cam

1
Nếu bạn sẽ sử dụng JS, bạn cũng có thể xóa hoàn toàn phần tử, trừ khi có khả năng từ xa bạn sẽ cần nó một lần nữa. Xếp chồng! Quan trọng thông qua JS chỉ đưa bạn trở lại câu hỏi ban đầu.
SilverbackNet

@SilverbackNet Theo hiểu biết của tôi, Ghi đè bằng cách sử dụng JS chính xác hơn và thường hoạt động khi tải CSS theo trình tự và tải khối jquery của JS sau khi mọi thứ được tải. Vì vậy, Nó ghi đè các thay đổi được thực hiện bởi css độc lập với chuỗi css.
Manish Shrivastava

ghi đè như thế này không hoạt động cho các thuộc tính phong cách.
dùng2284570

6

Điều này cũng có thể giúp

td[style] {height: 50px !important;}

Điều này sẽ ghi đè bất kỳ kiểu nội tuyến


0

Trong mọi trường hợp, bạn có thể ghi đè heightbằng max-height.


-5

Tôi muốn thêm một câu trả lời cho điều này chưa được đề cập, vì tôi đã thử tất cả những điều trên mà không có kết quả. Tình huống cụ thể của tôi là tôi đang sử dụng semantic-ui, được xây dựng trong !importantcác thuộc tính trên các yếu tố (cực kỳ khó chịu). Tôi đã thử mọi cách để ghi đè lên nó, chỉ cuối cùng mới làm được một việc (sử dụng jquery). Nó là như sau:

$('.active').css('cssText', 'border-radius: 0px !important');

Điều này không hiệu quả, hãy xem câu trả lời của Manish, sử dụng attr('style', ...thay vào đó
Barshe Roussy
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.