Làm thế nào để lật hình nền bằng CSS?


224

Làm thế nào để lật bất kỳ hình nền bằng CSS? Có thể không?

currenty Tôi đang sử dụng hình ảnh mũi tên này trong một background-imagesố litrong css

nhập mô tả hình ảnh ở đây

Bật: visitedTôi cần lật mũi tên này theo chiều ngang. Tôi có thể làm điều này để tạo một hình ảnh khác của mũi tên NHƯNG tôi chỉ tò mò muốn biết là có thể lật hình ảnh trong CSS cho:visited


3
câu hỏi hay! điều này có thể có ích trong rất nhiều trường hợp khác nhau.
AshBrad

@AshBrad - Cảm ơn ý kiến. vâng, nó có thể hữu ích trong nhiều điều kiện
Jitendra Vyas

Câu trả lời:


234

Bạn có thể lật nó theo chiều ngang với CSS ...

a:visited {
    -moz-transform: scaleX(-1);
    -o-transform: scaleX(-1);
    -webkit-transform: scaleX(-1);
    transform: scaleX(-1);
    filter: FlipH;
    -ms-filter: "FlipH";
}

jsFiddle .

Thay vào đó, nếu bạn muốn lật theo chiều dọc ...

a:visited {
    -moz-transform: scaleY(-1);
    -o-transform: scaleY(-1);
    -webkit-transform: scaleY(-1);
    transform: scaleY(-1);
    filter: FlipV;
    -ms-filter: "FlipV";
}

Nguồn .


1
Nếu tôi chỉ xem xét các trình duyệt Web-kit thì chỉ -webkit-transform: scaleX(-1);đủ?
Jitendra Vyas

@Jitendra Nó nên, cộng với thuộc tính không có tiền tố của nhà cung cấp.
alex

25
@alex - Một vấn đề trong việc này. nó cũng lật văn bản bên trong <a>và tôi chỉ muốn lật hình nền. Mã bạn đưa ra là lật toàn bộ phần tử
Jitendra Vyas

3
@Jitendra Không giống như bạn chỉ có thể lật hình nền. Bạn có thể đặt biểu tượng trong một spanvà sau đó lật nó, tuy nhiên.
alex

1
@alex - OK nếu tôi sử dụng mã này, <li><a href="#"><span>text</span></a></li>nó cũng lật văn bản vì vậy điều gì sẽ trái ngược với mã đưa ra của bạn để hủy văn bản để tôi có thể viết mã unflip cho li a span { }trong css
Jitendra Vyas

86

Tôi thấy tôi chỉ lật nền không phải toàn bộ yếu tố sau khi thấy manh mối lật trong câu trả lời của Alex. Cảm ơn alex vì câu trả lời của bạn

HTML

<div class="prev"><a href="">Previous</a></div>
<div class="next"><a href="">Next</a></div>

CSS

.next a, .prev a {
    width:200px;
    background:#fff
}
 .next {
    float:left
}
 .prev {
    float:right
}
 .prev a:before, .next a:before {
    content:"";
    width:16px;
    height:16px;
    margin:0 5px 0 0;
    background:url(http://i.stack.imgur.com/ah0iN.png) no-repeat 0 0;
    display:inline-block 
}
 .next a:before {
    margin:0 0 0 5px;
    transform:scaleX(-1);
}

Xem ví dụ tại đây http://jsfiddle.net/qngrf/807/


7
@Jitendra Bạn có thể vui lòng kiểm tra URL của Jsfiddle không. Tôi nghĩ rằng nó không có cùng mã mà bạn đã đăng trong câu trả lời của mình + nó không hoạt động ..
sachinjain024

3
mã jsfiddle bạn đăng là lật văn bản? đó là những gì bạn muốn, hoặc chỉ là hình nền?
mandza

1
jsfiddle của bạn không giống như mã, bạn có thể vui lòng cập nhật nó không?
Royi Namir

1
@JitendraVyas xin chào từ năm 2016! Tôi đã xem xét đề xuất một chỉnh sửa để sửa URL jsfiddle vì nó vẫn liên kết đến các mã khác với câu trả lời của bạn ở đây - quan tâm để chỉnh sửa bài đăng hoặc xóa liên kết? Cảm ơn :)
hoàn toàn không phải là

-webkit-transform:scaleX(-1);cho chrome
Wesley Smith

19

Theo w3schools: http://www.w3schools.com/cssref/css3_pr_transform.asp

Thuộc tính biến đổi được hỗ trợ trong Internet Explorer 10, Firefox và Opera. Internet Explorer 9 hỗ trợ một thuộc tính thay thế, biến đổi -ms (chỉ chuyển đổi 2D). Safari và Chrome hỗ trợ một thuộc tính thay thế, biến đổi -webkit (biến đổi 3D và 2D). Opera chỉ hỗ trợ chuyển đổi 2D.

Đây là một biến đổi 2D, do đó, nó sẽ hoạt động, với các tiền tố của nhà cung cấp, trên Chrome, Firefox, Opera, Safari và IE9 +.

Các câu trả lời khác được sử dụng: trước đó để ngăn chặn nó lật nội dung bên trong. Tôi đã sử dụng điều này trên chân trang của mình (để phản chiếu theo chiều dọc hình ảnh từ tiêu đề của tôi):

HTML:

<footer>
<p><a href="page">Footer Link</a></p>
<p>&copy; 2014 Company</p>
</footer>

CSS:

footer {
background:url(/img/headerbg.png) repeat-x 0 0;

/* flip background vertically */
-webkit-transform:scaleY(-1);
-moz-transform:scaleY(-1);
-ms-transform:scaleY(-1);
-o-transform:scaleY(-1);
transform:scaleY(-1);
}

/* undo the vertical flip for all child elements */
footer * {
-webkit-transform:scaleY(-1);
-moz-transform:scaleY(-1);
-ms-transform:scaleY(-1);
-o-transform:scaleY(-1);
transform:scaleY(-1);
}

Vì vậy, cuối cùng bạn lật phần tử và sau đó lật lại tất cả các phần tử con của nó. Hoạt động với các yếu tố lồng nhau, quá.


1
Cảm ơn câu trả lời! Cái này hoạt động tốt nhất với tôi, vì những cái khác cũng lật tất cả trẻ em hoặc yêu cầu một thủ thuật phức tạp hơn để đảo ngược lật.
Austin Salgat

Nếu câu trả lời này không lật mọi thứ bên trong phần tử được nhắm mục tiêu của bạn, chỉ cần đẩy nó xuống thành phần tử khác. Nói cách khác, bọc nội dung bạn không muốn được lật bên trong phần tử <div> mới.
Onosa


5

Bạn có thể lật cả dọc và ngang cùng một lúc

    -moz-transform: scaleX(-1) scaleY(-1);
    -o-transform: scaleX(-1) scaleY(-1);
    -webkit-transform: scaleX(-1) scaleY(-1);
    transform: scaleX(-1) scaleY(-1);

Và với thuộc tính chuyển đổi, bạn có thể có được một cú lật tuyệt vời

    -webkit-transition: transform .4s ease-out 0ms;
    -moz-transition: transform .4s ease-out 0ms;
    -o-transition: transform .4s ease-out 0ms;
    transition: transform .4s ease-out 0ms;
    transition-property: transform;
    transition-duration: .4s;
    transition-timing-function: ease-out;
    transition-delay: 0ms;

Trên thực tế, nó lật ngược toàn bộ yếu tố, không chỉbackground-image

SNIPPET

function flip(){
	var myDiv = document.getElementById('myDiv');
	if (myDiv.className == 'myFlipedDiv'){
		myDiv.className = '';
	}else{
		myDiv.className = 'myFlipedDiv';
	}
}
#myDiv{
  display:inline-block;
  width:200px;
  height:20px;
  padding:90px;
  background-color:red;
  text-align:center;
  -webkit-transition:transform .4s ease-out 0ms;
  -moz-transition:transform .4s ease-out 0ms;
  -o-transition:transform .4s ease-out 0ms;
  transition:transform .4s ease-out 0ms;
  transition-property:transform;
  transition-duration:.4s;
  transition-timing-function:ease-out;
  transition-delay:0ms;
}
.myFlipedDiv{
  -moz-transform:scaleX(-1) scaleY(-1);
  -o-transform:scaleX(-1) scaleY(-1);
  -webkit-transform:scaleX(-1) scaleY(-1);
  transform:scaleX(-1) scaleY(-1);
}
<div id="myDiv">Some content here</div>

<button onclick="flip()">Click to flip</button>


"Lật cả dọc và ngang cùng một lúc" có tác dụng tương tự như xoay hình ảnh 180 độ, hoạt động tốt và là thứ tôi đang tìm kiếm,
Stonecrusher
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.