Как перевернуть фоновое изображение с помощью CSS?

Как перевернуть любое фоновое изображение с помощью CSS? Является ли это возможным?

Сейчас я использую это изображение стрелки в background-image из li в css

введите описание изображения здесь

Вкл: visited Мне нужно перевернуть эту стрелку по горизонтали. Я могу сделать это, чтобы сделать еще одно изображение стрелки НО Мне просто любопытно узнать, можно ли перевернуть изображение в CSS для :visited


person Jitendra Vyas    schedule 24.04.2011    source источник
comment
хороший вопрос! это может пригодиться во многих различных случаях.   -  person AshBrad    schedule 23.03.2012
comment
@AshBrad - Спасибо за комментарии. да, это может быть полезно во многих условиях   -  person Jitendra Vyas    schedule 24.03.2012


Ответы (5)


Вы можете перевернуть его по горизонтали с помощью CSS ...

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

jsFiddle.

Если вместо этого вы хотите перевернуть по вертикали ...

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

Источник.

person alex    schedule 24.04.2011
comment
Если я рассматриваю только браузеры Web-kit, то достаточно -webkit-transform: scaleX(-1);? - person Jitendra Vyas; 24.04.2011
comment
@Jitendra Должно быть, плюс свойство без префикса поставщика. - person alex; 24.04.2011
comment
@alex - одна проблема в этом. он также переворачивает текст, который находится внутри <a>, и я хочу только перевернуть фоновое изображение. Код, который вы даете, - это перевернуть весь элемент - person Jitendra Vyas; 24.04.2011
comment
@Jitendra Не похоже, что вы можете просто перевернуть фоновое изображение. Однако вы можете поместить значок в span, а затем перевернуть его. - person alex; 24.04.2011
comment
@alex - Хорошо, если я использую этот код <li><a href="#"><span>text</span></a></li>, он тоже переворачивает текст, поэтому то, что будет противоположно вашему коду, чтобы развернуть текст, чтобы я мог написать код отмены для li a span { } в css - person Jitendra Vyas; 24.04.2011
comment
@Jitendra Вы бы так не сделали, вы бы поместили значок в диапазон и сделали a:visited span { ... }. - person alex; 24.04.2011
comment
@alex - отредактируйте пример jsfiddle. Я не хочу, чтобы <span> </span> оставалось пустым. - person Jitendra Vyas; 24.04.2011
comment
@Jitendra Если вы не хотите идти на компромисс, вы не сможете заставить его работать в современных браузерах. - person alex; 24.04.2011
comment
@ alex- Я рассматриваю только браузеры web-kit. возможно ли это без пустого span? - person Jitendra Vyas; 24.04.2011
comment
@alex - Я нашел бескомпромиссный способ. Спасибо, что дали мне ключ к разгадке. - person Jitendra Vyas; 24.04.2011
comment
Также приветствую XY-переворачивание; transform: scale(-1, -1);, что равно transform: scale(-1);. - person Joel Purra; 29.11.2013
comment
@Claudio, вы не внесли никаких улучшений в ответ в своей редакции. Я не знаю, почему кто-то одобрил это изменение. - person Ramaraj T; 14.05.2014

Я нашел способ перевернуть только фон, а не весь элемент, увидев подсказку для переворота в ответе Алекса. Спасибо Алекс за ваш ответ

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);
}

См. Пример здесь http://jsfiddle.net/qngrf/807/

person Jitendra Vyas    schedule 24.04.2011
comment
@Jitendra Не могли бы вы проверить URL-адрес Jsfiddle. Я думаю, что у него нет того же кода, который вы указали в своем ответе, + он не работает .. - person sachinjain024; 03.04.2013
comment
Код jsfiddle, который вы публикуете, переворачивает текст? это то, что вы хотите, или просто фоновое изображение? - person mandza; 11.09.2014
comment
ваш jsfiddle не совпадает с кодом, можете ли вы его обновить? - person Royi Namir; 07.06.2015
comment
@JitendraVyas привет с 2016 года! Я подумывал о том, чтобы предложить отредактировать, чтобы исправить URL-адрес jsfiddle, поскольку он по-прежнему ссылается на другой код, чем в вашем ответе здесь - хотите отредактировать сообщение или удалить ссылку? Спасибо :) - person totallyNotLizards; 24.05.2016
comment
-webkit-transform:scaleX(-1); для хрома - person Wesley Smith; 27.07.2017

Согласно w3schools: http://www.w3schools.com/cssref/css3_pr_transform.asp

Свойство transform поддерживается в Internet Explorer 10, Firefox и Opera. Internet Explorer 9 поддерживает альтернативное свойство -ms-transform (только 2D-преобразования). Safari и Chrome поддерживают альтернативное свойство -webkit-transform (3D- и 2D-преобразования). Opera поддерживает только 2D-преобразования.

Это двухмерное преобразование, поэтому оно должно работать с префиксами поставщиков в Chrome, Firefox, Opera, Safari и IE9 +.

Другие использованные ответы: до того, как он не переворачивает внутреннее содержимое. Я использовал это в нижнем колонтитуле (чтобы вертикально отразить изображение из моего заголовка):

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);
}

Таким образом, вы в конечном итоге переворачиваете элемент, а затем повторно переворачиваете всех его дочерних элементов. Также работает с вложенными элементами.

person jdforsythe    schedule 29.01.2014
comment
Спасибо за ответ! Этот сработал для меня лучше всего, так как другие либо перевернули всех детей, либо потребовали более сложного трюка, чтобы перевернуть сальто. - person Austin Salgat; 22.11.2015
comment
Если этот ответ переворачивает все внутри целевого элемента, просто вставьте его в другой элемент. Другими словами, оберните контент, который вы не хотите переворачивать, в новый элемент ‹div›. - person Onosa; 26.10.2018

Как бы то ни было, для браузеров на основе Gecko вы не можете обусловить это :visited из-за возникающих утечек конфиденциальности. См. http://hacks.mozilla.org/2010/03/privacy-related-changes-coming-to-css-vistited/

person Boris Zbarsky    schedule 24.04.2011

Вы можете переворачивать как по вертикали, так и по горизонтали одновременно

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

А с помощью свойства transition вы можете получить отличный флип

    -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;

Фактически он переворачивает весь элемент, а не только 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>

person Fi Ras    schedule 20.09.2015
comment
Переворот одновременно по вертикали и горизонтали имеет тот же эффект, что и поворот изображения на 180 градусов, работает нормально, и это то, что я искал, - person Stonecrusher; 21.04.2016