Đặt lại / xóa kiểu CSS chỉ cho phần tử


481

Tôi chắc chắn điều này phải được đề cập / hỏi trước đây nhưng đã tìm kiếm một thời đại không có may mắn, thuật ngữ của tôi phải sai!

Tôi mơ hồ nhớ một tweet tôi đã thấy cách đây một thời gian gợi ý rằng có một quy tắc css có sẵn sẽ loại bỏ bất kỳ kiểu nào được đặt trước trong biểu định kiểu cho một thành phần cụ thể.

Một ví dụ sử dụng tốt có thể là trong trang RWD đầu tiên trên thiết bị di động, nơi phần lớn kiểu dáng được sử dụng cho một thành phần cụ thể trong chế độ xem màn hình nhỏ cần 'đặt lại' hoặc xóa cho cùng một thành phần trong chế độ xem trên màn hình.

Một quy tắc css có thể đạt được một cái gì đó như:

.element {
  all: none;
}

Ví dụ sử dụng:

/* mobile first */
.element {
   margin: 0 10;
   transform: translate3d(0, 0, 0);
   z-index: 50;
   display: block;
   etc..
   etc..
}

@media only screen and (min-width: 980px) {
  .element {
    all: none;
  }
}

Vì vậy, chúng tôi có thể nhanh chóng loại bỏ hoặc thiết lập lại kiểu dáng mà không phải khai báo mọi thuộc tính.

Có ý nghĩa?


5
Không, một điều như vậy không tồn tại. Khi một phần tử đã nhận được một kiểu CSS nhất định thông qua quy tắc, nó không thể chỉ là một phần mềm được lấy lại bởi - - cách duy nhất là ghi đè lên mọi thuộc tính CSS với giá trị mong muốn một cách rõ ràng.
CBroe

Cách thực hiện là hạn chế nó ở vị trí đầu tiên với các truy vấn phương tiện
Kevin Lynch


13
một tài sản được gọi là allđang được đề nghị đặt lại tất cả các thuộc tính CSS cho một yếu tố cho giá trị CSS-rộng nhất định - giá trị mà bạn muốn sử dụng sẽ được unset, mà resets một tài sản cho một trong hai giá trị di truyền của nó nếu nó được thừa hưởng theo mặc định, hoặc mặt khác, giá trị ban đầu của nó. Không có từ nào để thực hiện, nhưng thật tuyệt khi biết ai đó đã nghĩ về nó.
BoltClock

2
all: revertsẽ làm. Xem câu trả lời của tôi. @CBroe Có một thứ như vậy đang tồn tại.
Asim KT

Câu trả lời:


602

Từ khóa CSS3 initialđặt thuộc tính CSS3 thành giá trị ban đầu như được xác định trong thông số kỹ thuật . Các initialtừ khóa có trình duyệt hỗ trợ rộng ngoại trừ cho các gia đình IE và Opera Mini.

Vì sự thiếu hỗ trợ của IE có thể gây ra sự cố, đây là một số cách bạn có thể đặt lại một số thuộc tính CSS về giá trị ban đầu của chúng:

.reset-this {
    animation : none;
    animation-delay : 0;
    animation-direction : normal;
    animation-duration : 0;
    animation-fill-mode : none;
    animation-iteration-count : 1;
    animation-name : none;
    animation-play-state : running;
    animation-timing-function : ease;
    backface-visibility : visible;
    background : 0;
    background-attachment : scroll;
    background-clip : border-box;
    background-color : transparent;
    background-image : none;
    background-origin : padding-box;
    background-position : 0 0;
    background-position-x : 0;
    background-position-y : 0;
    background-repeat : repeat;
    background-size : auto auto;
    border : 0;
    border-style : none;
    border-width : medium;
    border-color : inherit;
    border-bottom : 0;
    border-bottom-color : inherit;
    border-bottom-left-radius : 0;
    border-bottom-right-radius : 0;
    border-bottom-style : none;
    border-bottom-width : medium;
    border-collapse : separate;
    border-image : none;
    border-left : 0;
    border-left-color : inherit;
    border-left-style : none;
    border-left-width : medium;
    border-radius : 0;
    border-right : 0;
    border-right-color : inherit;
    border-right-style : none;
    border-right-width : medium;
    border-spacing : 0;
    border-top : 0;
    border-top-color : inherit;
    border-top-left-radius : 0;
    border-top-right-radius : 0;
    border-top-style : none;
    border-top-width : medium;
    bottom : auto;
    box-shadow : none;
    box-sizing : content-box;
    caption-side : top;
    clear : none;
    clip : auto;
    color : inherit;
    columns : auto;
    column-count : auto;
    column-fill : balance;
    column-gap : normal;
    column-rule : medium none currentColor;
    column-rule-color : currentColor;
    column-rule-style : none;
    column-rule-width : none;
    column-span : 1;
    column-width : auto;
    content : normal;
    counter-increment : none;
    counter-reset : none;
    cursor : auto;
    direction : ltr;
    display : inline;
    empty-cells : show;
    float : none;
    font : normal;
    font-family : inherit;
    font-size : medium;
    font-style : normal;
    font-variant : normal;
    font-weight : normal;
    height : auto;
    hyphens : none;
    left : auto;
    letter-spacing : normal;
    line-height : normal;
    list-style : none;
    list-style-image : none;
    list-style-position : outside;
    list-style-type : disc;
    margin : 0;
    margin-bottom : 0;
    margin-left : 0;
    margin-right : 0;
    margin-top : 0;
    max-height : none;
    max-width : none;
    min-height : 0;
    min-width : 0;
    opacity : 1;
    orphans : 0;
    outline : 0;
    outline-color : invert;
    outline-style : none;
    outline-width : medium;
    overflow : visible;
    overflow-x : visible;
    overflow-y : visible;
    padding : 0;
    padding-bottom : 0;
    padding-left : 0;
    padding-right : 0;
    padding-top : 0;
    page-break-after : auto;
    page-break-before : auto;
    page-break-inside : auto;
    perspective : none;
    perspective-origin : 50% 50%;
    position : static;
    /* May need to alter quotes for different locales (e.g fr) */
    quotes : '\201C' '\201D' '\2018' '\2019';
    right : auto;
    tab-size : 8;
    table-layout : auto;
    text-align : inherit;
    text-align-last : auto;
    text-decoration : none;
    text-decoration-color : inherit;
    text-decoration-line : none;
    text-decoration-style : solid;
    text-indent : 0;
    text-shadow : none;
    text-transform : none;
    top : auto;
    transform : none;
    transform-style : flat;
    transition : none;
    transition-delay : 0s;
    transition-duration : 0s;
    transition-property : none;
    transition-timing-function : ease;
    unicode-bidi : normal;
    vertical-align : baseline;
    visibility : visible;
    white-space : normal;
    widows : 0;
    width : auto;
    word-spacing : normal;
    z-index : auto;
    /* basic modern patch */
    all: initial;
    all: unset;
}

/* basic modern patch */

#reset-this-root {
    all: initial;
    * {
        all: unset;
    }
}

Như đã đề cập trong một nhận xét của @ user566245:

Điều này đúng về nguyên tắc, nhưng số dặm cá nhân có thể khác nhau. Ví dụ, một số thành phần nhất định như textarea theo mặc định có đường viền, áp dụng thiết lập lại này sẽ khiến đường viền của textarea giảm đi.

[POST EDIT FEB 4, '17] Được nâng cấp để trở thành một quy tắc hiện đại, người dùng Joost

#reset-this-parent {
  all: initial;
  * {
    all: unset;
  }
}

VÍ DỤ TỪ W3

Ví dụ: nếu một tác giả chỉ định tất cả: ban đầu trên một phần tử, nó sẽ chặn tất cả sự kế thừa và đặt lại tất cả các thuộc tính, như thể không có quy tắc nào xuất hiện ở cấp độ tác giả, người dùng hoặc tác nhân người dùng của tầng.

Điều này có thể hữu ích cho phần tử gốc của một "widget" được bao gồm trong một trang, không muốn kế thừa các kiểu của trang bên ngoài. Tuy nhiên, lưu ý rằng mọi kiểu "mặc định" được áp dụng cho phần tử đó (chẳng hạn như display: block từ biểu định kiểu UA trên các phần tử khối như) cũng sẽ bị xóa.


JAVASCRIPT?

Không ai nghĩ về css khác để thiết lập lại css? Đúng?

Có snip hoàn toàn phù hợp: https://stackoverflow.com/a/14791113/845310

getElementsByTagName ("*") sẽ trả về tất cả các phần tử từ DOM. Sau đó, bạn có thể đặt kiểu cho từng thành phần trong bộ sưu tập:

đã trả lời ngày 9 tháng 2 năm 13 lúc 20:15 bởi VisioN

var allElements = document.getElementsByTagName("*");
for (var i = 0, len = allElements.length; i < len; i++) {
    var element = allElements[i];
    // element.style.border = ...
}

Với tất cả những gì đã nói; Tôi không nghĩ rằng thiết lập lại css là một cái gì đó khả thi trừ khi chúng tôi chỉ có một trình duyệt web .. nếu cuối cùng thì 'mặc định' được thiết lập bởi trình duyệt.

Để so sánh, đây là danh sách giá trị Firefox 40.0 cho một <blockquote style="all: unset;font-style: oblique">nơi font-style: obliquekích hoạt hoạt động DOM.

align-content: unset;
align-items: unset;
align-self: unset;
animation: unset;
appearance: unset;
backface-visibility: unset;
background-blend-mode: unset;
background: unset;
binding: unset;
block-size: unset;
border-block-end: unset;
border-block-start: unset;
border-collapse: unset;
border-inline-end: unset;
border-inline-start: unset;
border-radius: unset;
border-spacing: unset;
border: unset;
bottom: unset;
box-align: unset;
box-decoration-break: unset;
box-direction: unset;
box-flex: unset;
box-ordinal-group: unset;
box-orient: unset;
box-pack: unset;
box-shadow: unset;
box-sizing: unset;
caption-side: unset;
clear: unset;
clip-path: unset;
clip-rule: unset;
clip: unset;
color-adjust: unset;
color-interpolation-filters: unset;
color-interpolation: unset;
color: unset;
column-fill: unset;
column-gap: unset;
column-rule: unset;
columns: unset;
content: unset;
control-character-visibility: unset;
counter-increment: unset;
counter-reset: unset;
cursor: unset;
display: unset;
dominant-baseline: unset;
empty-cells: unset;
fill-opacity: unset;
fill-rule: unset;
fill: unset;
filter: unset;
flex-flow: unset;
flex: unset;
float-edge: unset;
float: unset;
flood-color: unset;
flood-opacity: unset;
font-family: unset;
font-feature-settings: unset;
font-kerning: unset;
font-language-override: unset;
font-size-adjust: unset;
font-size: unset;
font-stretch: unset;
font-style: oblique;
font-synthesis: unset;
font-variant: unset;
font-weight: unset;
font: ;
force-broken-image-icon: unset;
height: unset;
hyphens: unset;
image-orientation: unset;
image-region: unset;
image-rendering: unset;
ime-mode: unset;
inline-size: unset;
isolation: unset;
justify-content: unset;
justify-items: unset;
justify-self: unset;
left: unset;
letter-spacing: unset;
lighting-color: unset;
line-height: unset;
list-style: unset;
margin-block-end: unset;
margin-block-start: unset;
margin-inline-end: unset;
margin-inline-start: unset;
margin: unset;
marker-offset: unset;
marker: unset;
mask-type: unset;
mask: unset;
max-block-size: unset;
max-height: unset;
max-inline-size: unset;
max-width: unset;
min-block-size: unset;
min-height: unset;
min-inline-size: unset;
min-width: unset;
mix-blend-mode: unset;
object-fit: unset;
object-position: unset;
offset-block-end: unset;
offset-block-start: unset;
offset-inline-end: unset;
offset-inline-start: unset;
opacity: unset;
order: unset;
orient: unset;
outline-offset: unset;
outline-radius: unset;
outline: unset;
overflow: unset;
padding-block-end: unset;
padding-block-start: unset;
padding-inline-end: unset;
padding-inline-start: unset;
padding: unset;
page-break-after: unset;
page-break-before: unset;
page-break-inside: unset;
paint-order: unset;
perspective-origin: unset;
perspective: unset;
pointer-events: unset;
position: unset;
quotes: unset;
resize: unset;
right: unset;
ruby-align: unset;
ruby-position: unset;
scroll-behavior: unset;
scroll-snap-coordinate: unset;
scroll-snap-destination: unset;
scroll-snap-points-x: unset;
scroll-snap-points-y: unset;
scroll-snap-type: unset;
shape-rendering: unset;
stack-sizing: unset;
stop-color: unset;
stop-opacity: unset;
stroke-dasharray: unset;
stroke-dashoffset: unset;
stroke-linecap: unset;
stroke-linejoin: unset;
stroke-miterlimit: unset;
stroke-opacity: unset;
stroke-width: unset;
stroke: unset;
tab-size: unset;
table-layout: unset;
text-align-last: unset;
text-align: unset;
text-anchor: unset;
text-combine-upright: unset;
text-decoration: unset;
text-emphasis-position: unset;
text-emphasis: unset;
text-indent: unset;
text-orientation: unset;
text-overflow: unset;
text-rendering: unset;
text-shadow: unset;
text-size-adjust: unset;
text-transform: unset;
top: unset;
transform-origin: unset;
transform-style: unset;
transform: unset;
transition: unset;
user-focus: unset;
user-input: unset;
user-modify: unset;
user-select: unset;
vector-effect: unset;
vertical-align: unset;
visibility: unset;
white-space: unset;
width: unset;
will-change: unset;
window-dragging: unset;
word-break: unset;
word-spacing: unset;
word-wrap: unset;
writing-mode: unset;
z-index: unset;

8
Tôi nghĩ rằng điều này là đúng về nguyên tắc, nhưng số dặm cá nhân có thể khác nhau. Ví dụ, một số thành phần nhất định như textarea theo mặc định có đường viền, áp dụng thiết lập lại này sẽ khiến đường viền của textarea giảm đi. Vì vậy, nó không phải là một thiết lập lại thực sự. Tôi đã kết thúc việc sử dụng nó cho chỉ một số tài sản mà tôi quan tâm. Bạn cũng có thể kết hợp nó với bộ chọn * để đặt lại tất cả các thành phần hoặc đặt lại tất cả các thành phần bên trong một thành phần cụ thể.
dùng566245

8
@ user566245 Áp dụng điều này với bộ chọn * sẽ giết trình duyệt của bạn VÀ một chú mèo con. Đây KHÔNG phải là một thiết lập lại thực sự. Thiết lập lại đúng không tồn tại.
Milche P Parent

@Milkywayspotypes lol, có lẽ bạn đúng. Đối với tôi, tôi chỉ lấy các thuộc tính mà tôi muốn đặt lại và áp dụng cho "div # theid *". Hy vọng rằng điều này không giết chết bất kỳ con mèo con nào :)
user566245

1
@Jeremy: Bạn đang nghĩ về các mặc định của trình duyệt, các yếu tố khác nhau. Giá trị ban đầu của màn hình luôn là nội tuyến bất kể nó được áp dụng cho thành phần nào.
BoltClock

1
@mmmshuddup Cảm ơn vì tiền boa. Nếu bạn xem câu trả lời ban đầu, tôi đã cải tổ nó như CSS. Đối với việc nén, tốt, đây là một câu trả lời, không phải là một bản sao dán-dán. Phải không?
Milche P Parent

172

Dành cho độc giả tương lai. Tôi nghĩ rằng đây là những gì có nghĩa nhưng hiện tại không thực sự được hỗ trợ rộng rãi (xem bên dưới):

#someselector {
  all: initial;
  * {
    all: unset;
  }
}
  • Được hỗ trợ trong ( nguồn ): Chrome 37, Firefox 27, IE 11, Opera 24
  • Không được hỗ trợ: Safari

12
Các nguồn tuyên bố rằng Internet Explorer không hỗ trợ all.
Dan Dascalescu

1
Sau cùng. Đây phải là câu trả lời mới được chấp nhận.
JS_Riddler

2
Microsoft liệt kê allnhư đang xem xét . Một phiên bản tương lai của Edge cũng có thể hỗ trợ nó.
Kevin

1
Tôi chỉ đọc "Trên các thuộc tính được kế thừa, giá trị ban đầu có thể gây ngạc nhiên và bạn nên xem xét sử dụng các từ khóa kế thừa, bỏ đặt hoặc hoàn nguyên thay thế. Ngoài ra, điều này có trở lại với trình duyệt cụ thể không? ...? DDT?
Milche P Parent

18
Nơi duy nhất tôi thấy CSS lồng nhau như #someselector { ... * { all: unset; } ... }trong Sass. Bạn chưa đề cập đến Sass ở đây - đây có phải là một số điều CSS3 mới không? Tìm kiếm "CSS lồng nhau" chỉ cho tôi các hướng dẫn cấp nhập cảnh và thông tin Sass. Việc thêm phần ... * { ... } ...lồng nhau vào CSS của tôi (trong HTML5) sẽ phá vỡ tài liệu của tôi (các phần tử con của tôi có kiểu riêng mà tôi chỉ muốn áp dụng cho cha mẹ).
i336_

34

Có một giải pháp hoàn toàn mới cho vấn đề này.

Sử dụng all: reverthoặc all: unset.

Từ MDN:

Từ khóa hoàn nguyên hoạt động chính xác giống như unset trong nhiều trường hợp. Sự khác biệt duy nhất là đối với các thuộc tính có các giá trị được đặt bởi trình duyệt hoặc bởi các bảng định kiểu tùy chỉnh được tạo bởi người dùng (được đặt ở phía trình duyệt).

Bạn cần "Quy tắc css khả dụng sẽ xóa mọi kiểu được đặt trước đó trong biểu định kiểu cho một thành phần cụ thể."

Vì vậy, nếu phần tử có tên lớp như remove-all-styles:

Ví dụ:

HTML:

<div class="remove-all-styles other-classe another-class"> 
   <!-- content -->
   <p class="text-red other-some-styles"> My text </p>
</div>

Với CSS:

  .remove-all-styles {
    all: revert;
  }

Sẽ thiết lập lại tất cả các phong cách được áp dụng bởi other-class, another-classvà tất cả các khác kế thừa và áp dụng phong cách đó div.

Hoặc trong trường hợp của bạn:

/* mobile first */
.element {
   margin: 0 10;
   transform: translate3d(0, 0, 0);
   z-index: 50;
   display: block;
   etc..
   etc..
}

@media only screen and (min-width: 980px) {
  .element {
    all: revert;
  }
}

Sẽ làm.

Ở đây chúng tôi đã sử dụng một thuộc tính CSS thú vị với một giá trị CSS thú vị khác.

  1. revert

Trên thực tế revert, như tên gọi, hoàn nguyên thuộc tính đó theo kiểu người dùng hoặc tác nhân người dùng.

  1. all

Và khi chúng ta sử dụng revertvới thuộc alltính, tất cả các thuộc tính CSS được áp dụng cho phần tử đó sẽ được hoàn nguyên về kiểu người dùng / tác nhân người dùng.

Nhấn vào đây để biết sự khác biệt giữa phong cách tác giả, người dùng, tác nhân người dùng.

Ví dụ: nếu chúng tôi muốn tách các widget / thành phần được nhúng khỏi các kiểu của trang có chứa chúng , chúng tôi có thể viết:

.isolated-component {
 all: revert;
}

Điều này sẽ hoàn nguyên tất cả author styles(tức là CSS của nhà phát triển) thành user styles(các kiểu mà người dùng trang web của chúng tôi đặt - kịch bản ít có khả năng hơn) hoặc theo user-agentkiểu nếu không có kiểu người dùng nào được đặt.

Thêm chi tiết tại đây: https://developer.mozilla.org/en-US/docs/Web/CSS/revert

Và vấn đề duy nhất là sự hỗ trợ : chỉ Safari 9.1 và iOS Safari 9.3 có hỗ trợ chorevert giá trị tại thời điểm viết.

Vì vậy, tôi sẽ nói sử dụng phong cách này và dự phòng cho bất kỳ câu trả lời khác.


2
Sẽ rất tuyệt, nhưng thật không may, hỗ trợ trình duyệt vẫn có lỗ hổng: caniuse.com/#feat=css-all (ví dụ nhỏ hơn các chương trình caniuse, ví dụ all: initialall: unsethoạt động với tôi trên MS Edge 16).
Robert Kusznier

25

Hãy để tôi trả lời câu hỏi này một cách kỹ lưỡng, bởi vì nó là nguồn đau của tôi trong nhiều năm và rất ít người thực sự hiểu vấn đề và tại sao nó lại quan trọng để giải quyết. Nếu tôi hoàn toàn chịu trách nhiệm về thông số CSS, tôi sẽ cảm thấy xấu hổ, vì đã không giải quyết vấn đề này trong thập kỷ qua.

Vấn đề

Bạn cần chèn đánh dấu vào một tài liệu HTML và nó cần nhìn một cách cụ thể. Hơn nữa, bạn không sở hữu tài liệu này, vì vậy bạn không thể thay đổi quy tắc kiểu hiện có. Bạn không biết những tấm phong cách có thể là gì, hoặc chúng có thể thay đổi thành gì.

Các trường hợp sử dụng cho điều này là khi bạn đang cung cấp một thành phần hiển thị cho các trang web bên thứ 3 không xác định để sử dụng. Ví dụ về điều này sẽ là:

  1. Thẻ quảng cáo
  2. Xây dựng tiện ích mở rộng trình duyệt chèn nội dung
  3. Bất kỳ loại phụ tùng

Sửa chữa đơn giản nhất

Đặt mọi thứ trong iframe. Điều này có bộ hạn chế riêng của nó:

  1. Giới hạn tên miền chéo: Nội dung của bạn sẽ không có quyền truy cập vào tài liệu gốc. Bạn không thể phủ nội dung, sửa đổi DOM, v.v.
  2. Giới hạn hiển thị: Nội dung của bạn bị khóa bên trong hình chữ nhật.

Nếu nội dung của bạn có thể vừa với một hộp, bạn có thể giải quyết vấn đề # 1 bằng cách yêu cầu nội dung của bạn viết iframe và đặt rõ ràng nội dung, do đó, xoay quanh vấn đề, vì iframe và tài liệu sẽ chia sẻ cùng một tên miền.

Giải pháp CSS

Tôi đã tìm kiếm rất nhiều giải pháp cho vấn đề này, nhưng không may là không có. Điều tốt nhất bạn có thể làm là dứt khoát ghi đè lên tất cả các thuộc tính có thể có thể được ghi đè, và ghi đè lên chúng với những gì bạn nghĩ giá trị mặc định của họ nên được.

Ngay cả khi bạn ghi đè, không có cách nào để đảm bảo quy tắc CSS được nhắm mục tiêu nhiều hơn sẽ không ghi đè lên quy tắc của bạn . Điều tốt nhất bạn có thể làm ở đây là đặt mục tiêu quy tắc ghi đè của bạn càng cụ thể càng tốt và hy vọng tài liệu gốc không vô tình làm tốt nhất: sử dụng ID ngẫu nhiên hoặc ID ngẫu nhiên trên thành phần chính của nội dung của bạn và sử dụng! .


2
Bạn có thể sử dụng tất cả các thuộc tính, được hỗ trợ bởi tất cả các trình duyệt hiện đại .
Dan Dascalescu

1
Giải pháp thích hợp cho vấn đề chung này là sử dụng Các thành phần Web
GetFree vào

1
Đây là một vấn đề rất thực tế, nhưng chỉ tồn tại do kết quả của CSS kém phát triển ở nơi đầu tiên. Nếu bạn đang tạo đánh dấu và CSS, nếu bạn đã thực hiện đúng cách, không có kiểu nào của bạn sẽ chảy vào ứng dụng của bên thứ ba. Nếu tôi chịu trách nhiệm về thông số CSS, tôi sẽ không cảm thấy xấu hổ, nhưng những người khó chịu đang lạm dụng một cách tàn nhẫn những gì tôi đã tạo ra.
ESR

@DanDascalescu Tất cả các thuộc tính sẽ không trở lại kiểu css của trình duyệt "mặc định". Nó sẽ chỉ trở lại kiểu css "ban đầu". Sự khác biệt là một kiểu tạo trang như thể không tồn tại CSS, kiểu còn lại sẽ sử dụng kiểu phần tử (i, e, p { color: blue}sẽ không được đặt lại)
Cameron

10

những cách khác:

1) bao gồm mã css (tệp) của thiết lập lại CSS CSS của Yahoo và sau đó đặt mọi thứ vào DIV này:

<div class="yui3-cssreset">
    <!-- Anything here would be reset-->
</div>

2) hoặc sử dụng


4

Tôi không khuyên bạn nên sử dụng câu trả lời đã được đánh dấu là chính xác ở đây. Đó là một kho CSS khổng lồ cố gắng bao quát mọi thứ.

Tôi sẽ đề nghị bạn đánh giá cách loại bỏ kiểu từ một phần tử trên cơ sở từng trường hợp.

Hãy nói rằng vì mục đích SEO, bạn cần đưa một H1 vào một trang không có tiêu đề thực sự trong thiết kế. Bạn có thể muốn biến liên kết điều hướng của trang đó thành một H1 nhưng thông thường bạn không muốn liên kết điều hướng đó hiển thị dưới dạng một H1 khổng lồ trên trang.

Những gì bạn nên làm là bọc phần tử đó trong thẻ h1 và kiểm tra nó. Xem những kiểu CSS nào đang được áp dụng cụ thể cho phần tử h1.

Hãy nói rằng tôi thấy các kiểu sau được áp dụng cho phần tử.

//bootstrap.min.css:1
h1 {
    font-size: 65px;
    font-family: 'rubikbold'!important;
    font-weight: normal;
    font-style: normal;
    text-transform: uppercase;
}

//bootstrap.min.css:1
h1, .h1 {
    font-size: 36px;
}

//bootstrap.min.css:1
h1, .h1, h2, .h2, h3, .h3 {
    margin-top: 20px;
    margin-bottom: 10px;
}

//bootstrap.min.css:1
h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
    font-family: inherit;
    font-weight: 500;
    line-height: 1.1;
    color: inherit;
}

//bootstrap.min.css:1
h1 {
    margin: .67em 0;
    font-size: 2em;
}

//user agent stylesheet
h1 {
    display: block;
    font-size: 2em;
    -webkit-margin-before: 0.67em;
    -webkit-margin-after: 0.67em;
    -webkit-margin-start: 0px;
    -webkit-margin-end: 0px;
    font-weight: bold;
}

Bây giờ bạn cần xác định chính xác kiểu được áp dụng cho H1 và bỏ đặt chúng trong lớp css. Điều này sẽ trông giống như sau:

.no-style-h1 {
    font-size: unset !important;
    font-family: unset !important;
    font-weight: unset !important;
    font-style: unset !important;
    text-transform: unset !important;
    margin-top: unset !important;
    margin-bottom: unset !important;
    font-family: unset !important;
    line-height: unset !important;
    color: unset !important;
    margin: unset !important;
    display: unset !important;
    -webkit-margin-before: unset !important;
    -webkit-margin-after: unset !important;
    -webkit-margin-start: unset !important;
    -webkit-margin-end: unset !important;
}

Điều này sạch sẽ hơn nhiều và không chỉ đổ một đốm mã ngẫu nhiên vào css của bạn mà bạn không biết nó thực sự đang làm gì.

Bây giờ bạn có thể thêm lớp này vào h1 của bạn

<h1 class="no-style-h1">
     Title
</h1>

4

Nếu bạn tình cờ sử dụng sass trong hệ thống xây dựng, một cách để làm điều này sẽ hoạt động trong tất cả các trình duyệt chính là bọc tất cả các kiểu nhập của bạn bằng một bộ chọn: không () như vậy ...

:not(.disable-all-styles) {
  @import 'my-sass-file';
  @import 'my-other-sass-file';
}

Sau đó, bạn có thể sử dụng lớp vô hiệu hóa trên một thùng chứa và nội dung phụ sẽ không có bất kỳ kiểu nào của bạn.

<div class="disable-all-styles">
  <p>Nothing in this div is affected by my sass styles.</p>
</div>

Tất nhiên, tất cả các kiểu của bạn bây giờ sẽ được thêm vào bộ chọn: not (), do đó, nó hơi khó hiểu, nhưng hoạt động tốt.


1

Bạn đã đề cập đến các trang web đầu tiên trên thiết bị di động ... Đối với một thiết kế đáp ứng, chắc chắn có thể ghi đè các kiểu màn hình nhỏ bằng các kiểu màn hình lớn. Nhưng bạn có thể không cần.

Thử cái này:

.thisClass {
    /* Rules for all window sizes. */
}

@media all and (max-width: 480px) {
    .thisClass {
        /* Rules for only small browser windows. */
    }
}

@media all and (min-width: 481px) and (max-width: 960px) {
    .thisClass {
        /* Rules for only medium browser windows. */
    }
}

@media all and (min-width: 961px) {
    .thisClass {
        /* Rules for only large browser windows. */
    }
}

Các truy vấn phương tiện đó không trùng lặp, vì vậy các quy tắc của chúng không ghi đè lẫn nhau. Điều này giúp dễ dàng duy trì từng bộ kiểu riêng biệt.


1

GIẢI PHÁP TỐT HƠN

Tải xuống biểu định kiểu "sao chép / dán" để đặt lại các thuộc tính css về mặc định (kiểu UA):
https://github.com/monmomo04/resetCss.git

Cảm ơn @ Milche P Parent!
Tôi đã thực sự tìm kiếm giá trị thuộc tính thiết lập lại / mặc định. Thử nghiệm đầu tiên của tôi là sao chép giá trị được tính toán từ công cụ Dev của trình duyệt của phần tử root (html). Nhưng khi tính toán, nó sẽ trông / hoạt động khác nhau trên mọi hệ thống. Cuối cùng, thật tốt khi đề cập rằng các thuộc tính đó sẽ đặt lại kiểu thành kiểu mặc định của phần tử gốc cao nhất nhưng không phải là giá trị ban đầu cho mỗi phần tử HTML. Vì vậy, để sửa lỗi này, tôi đã lấy các kiểu trình duyệt dựa trên webkit "tác nhân người dùng" và triển khai nó trong lớp "reset-this".
Đối với những người gặp sự cố trình duyệt khi cố gắng sử dụng dấu hoa thị * để đặt lại kiểu của các phần tử con và vì tôi biết nó không hoạt động cho bạn, tôi đã thay thế dấu hoa thị "*" bằng tất cả tên thẻ HTML thay thế . Trình duyệt không gặp sự cố; Tôi đang dùng Chrome Phiên bản 46.0.2490.71 m.

Liên kết hữu ích:


Tải xuống biểu định kiểu "sao chép / dán" để đặt lại các thuộc tính css về mặc định (kiểu UA):
https://github.com/monmomo04/resetCss.git

Kiểu tác nhân người dùng:
CSS mặc định của trình duyệt cho các phần tử HTML
http://trac.webkit.org/browser/trunk/Source/WebCore/css/html.css

Độ đặc hiệu Css (chú ý đến độ đặc hiệu):
https://css-tricks.com/specifics-on-css-specificity/

https://github.com/monmomo04/resetCss.git


1

Trong kịch bản cụ thể của tôi, tôi muốn bỏ qua việc áp dụng các kiểu phổ biến cho một phần cụ thể của trang, được minh họa tốt hơn như thế này:

<body class='common-styles'>
    <div id='header'>Wants common styles</div>
    <div id='container'>Does NOT want common styles</div>
    <div id='footer'>Wants common styles</div>
</body>

Sau khi gặp rắc rối với thiết lập lại CSS không mang lại nhiều thành công (chủ yếu là do ưu tiên quy tắc và phân cấp biểu định kiểu phức tạp), đã đưa ra jQuery phổ biến để giải cứu, công việc này rất nhanh chóng và khá bẩn:

$(function() {
    $('body').removeClass('common-styles');
    $('#header,#footer').addClass('common-styles');
});

(Bây giờ hãy nói rằng thật tệ khi sử dụng JS để đối phó với CSS :-))


0

Đối với những người bạn đang cố gắng tìm ra cách thực sự loại bỏ kiểu dáng khỏi phần tử, mà không xóa css khỏi các tệp, giải pháp này hoạt động với jquery:

$('.selector').removeAttr('style');

0

nếu bạn đặt CSS của mình trong các lớp, bạn có thể dễ dàng xóa chúng bằng Phương thức jQuery removeClass (). Mã dưới đây loại bỏ lớp .element:

    <div class="element">source</div>   
    <div class="destination">destination</div>
      <script>
        $(".element").removeClass();
      </script>

Nếu không có tham số nào được chỉ định, phương thức này sẽ xóa TẤT CẢ tên lớp khỏi các thành phần được chọn.


-2

Không, đây chỉ là vấn đề quản lý cấu trúc css của bạn tốt hơn.

Trong trường hợp của bạn, tôi sẽ đặt hàng css của tôi như thế này:

.element, .element1, .element2 p{z-index: 50; display: block}
.element, .element1{margin: 0 10}
.element2 p{transform: translate3d(0, 0, 0)}

@media only screen and (min-width: 980px) {
.element, .element1, .element2 p{display: none}
}

Chỉ cần thử nghiệm.


-2

Bất kỳ cơ hội bạn đang tìm kiếm quy tắc quan trọng? Nó không hoàn tác tất cả các khai báo nhưng nó cung cấp một cách để ghi đè chúng.

"Khi một quy tắc quan trọng được sử dụng cho khai báo kiểu, khai báo này sẽ ghi đè mọi khai báo khác được thực hiện trong CSS, cho dù nó nằm trong danh sách khai báo. Mặc dù,! Quan trọng không liên quan gì đến tính cụ thể."

https://developer.mozilla.org/en-US/docs/CSS/Specificity#The_!important_exception


! Nhập khẩu không phải là con đường để đi. Nó được in đậm để sử dụng và bạn chỉ nên sử dụng nó như là phương sách cuối cùng (ví dụ: khi một plugin sử dụng! Cũng quan trọng)
Maarten Wolfsen
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.