Ustawianie rozmiaru obrazu tła za pomocą CSS?

Czy Można ustawić rozmiar obrazu tła za pomocą CSS?

Chcę zrobić coś takiego:

background: url('bg.gif') top repeat-y;
background-size: 490px;

Ale wydaje się, że to całkowicie złe robić to w ten sposób...

 371
Author: Ankit Agrawal, 2009-08-27

18 answers

CSS2

Jeśli chcesz powiększyć obraz, musisz edytować sam obraz w edytorze obrazów.

Jeśli używasz znacznika img, możesz zmienić rozmiar, ale nie dałoby to pożądanego rezultatu, jeśli chcesz, aby obraz był tłem dla innych treści(i nie powtórzy się tak, jak chcesz)...

CSS3 uwolnij moce

Można to zrobić w CSS3 za pomocą background-size.

Wszystkie nowoczesne przeglądarki obsługują to, więc jeśli nie musisz obsługiwać starych przeglądarek, jest to sposób, aby to zrobić.
Obsługiwane przeglądarki:
Mozilla Firefox 4.0 + (Gecko 2.0+), Microsoft Internet Explorer 9.0+, Opera 10.0+, Safari 4.1 +(webkit 532) i Chrome 3.0+.

.stretch{
/* Will stretch to specified width/height */
  background-size: 200px 150px;
}
.stretch-content{
/* Will stretch to width/height of element */
  background-size: 100% 100%;
}

.resize-width{
/* width: 150px, height: auto to retain aspect ratio */
  background-size: 150px Auto;
}
.resize-height{
/* height: 150px, width: auto to retain aspect ratio */
  background-size: Auto 150px;
}
.resize-fill-and-clip{ 
  /* Resize to fill and retain aspect ratio.
     Will cause clipping if aspect ratio of box is different from image. */ 
  background-size: cover;
}
.resize-best-fit{
/* Resize to best fit and retain aspect ratio.
   Will cause gap if aspect ratio of box is different from image. */ 
  background-size: contain;
}

W szczególności Lubię wartości cover i contain, które dają nam nową moc kontroli, której wcześniej nie mieliśmy.

Runda

Można również użyć background-size: round, które mają znaczenie w połączeniu z powtarzaniem:

.resize-best-fit-in-repeat{
/* Resize to best fit in a whole number of times in x-direction */ 
  background-size: round auto; /* Height: auto is to keep aspect ratio */
  background-repeat: repeat;
}

Spowoduje to dostosowanie szerokości obrazu tak, aby zmieścił się wiele razy w obszarze pozycjonowania w tle.


uwaga dodatkowa
Jeśli rozmiar, którego potrzebujesz, to statyczny rozmiar piksela, nadal warto fizycznie zmienić rozmiar rzeczywistego obrazu. Jest to zarówno w celu poprawy jakości zmiany rozmiaru (biorąc pod uwagę, że oprogramowanie obrazu wykonuje lepszą pracę niż przeglądarki), jak i w celu zaoszczędzenia przepustowości, jeśli oryginalny obraz jest większy niż to, co do wyświetlenia.

 599
Author: awe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-16 09:20:49

Tylko CSS 3 to wspiera,

background-size: 200px 50px;

Ale edytowałbym sam obraz, aby użytkownik musiał ładować mniej i może wyglądać lepiej niż skurczony obraz bez antyaliasingu.

 331
Author: Maertz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-10 09:17:42

Jeśli użytkownicy używają tylko Opery 9.5+, Safari 3+, Internet Explorer 9 + i Firefox 3.6+, odpowiedź brzmi tak. Inaczej nie.

Właściwość background-size jest częścią CSS 3, ale nie będzie działać na większości przeglądarek.

Dla Twoich celów po prostu Powiększ rzeczywisty obraz.

 23
Author: Christopher Tokar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-29 21:10:41

Niemożliwe . Tło zawsze będzie tak duże, jak to tylko możliwe, ale można go powstrzymać od powtarzania się z background-repeat.

background-repeat: no-repeat;

Po Drugie, tło nie wchodzi w obszar marginesu pudełka, więc jeśli chcesz, aby tło było tylko na rzeczywistej zawartości pudełka, możesz użyć marginesu zamiast wypełnienia.

Po trzecie, możesz kontrolować, gdzie zaczyna się obraz tła. Domyślnie jest to lewy górny róg pudełka, ale możesz to kontrolować za pomocą background-position, tak:

background-position: center top;

A może

background-position: 20px -14px;

Pozycjonowanie negatywne jest często używane z CSS sprites .

 18
Author: mikl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-27 14:27:32

Nie za mocno, jeśli nie boisz się pójść trochę głębiej:)

Jest jedenzapomniany argument:

background-size: contain;

To nie będzie rozciągać background-image Jak to zrobi z cover. Rozciągałoby się, aż dłuższa strona osiągnie szerokość lub wysokość zewnętrznego pojemnika, a tym samym zachowując obraz.

Edit: są też -webkit-background-size i -moz-background-size.

Właściwość background-size JEST OBSŁUGIWANA W IE9+, Firefox 4+, Opera, Chrome i Safari 5+.

- Źródło: W3 Szkoły

 12
Author: kaiser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-09 17:28:32

Background-size: 200px 50px zmień go na 100% 100% i będzie skalowany w zależności od potrzeb tagu zawartości, takiego jak ul li lub div... próbowałem

 3
Author: mihai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-03 13:08:48

Możesz całkowicie z CSS3:

body {
    background-image: url(images/bg-body.png); 
    background-size: 100%; /* size the background image at 100% like any responsive img tag */
    background-position: top center;
    background-repeat:no-repeat;
 }

Spowoduje to Rozmiar obrazu tła do 100% szerokości elementu body, a następnie odpowiednio zmieni rozmiar tła, gdy element body zmieni rozmiar dla mniejszych rozdzielczości.

Oto przykład: http://www.sccc.premiumdw.com/examples/resize-background-images-with-css/

 3
Author: Mike Sinkula,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-11 14:05:19

Wystarczy, że zagnieżdżone div będą kompatybilne z przeglądarką

   
      <div>
         <div style="background: url('bg.gif') top repeat-y;min-width:490px;">
            Put content here
         </div>
      </div>
   
 2
Author: Cornelius Lamb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-14 19:56:03

Na poparcie odpowiedzi, którą dał @tetra, chcę zaznaczyć, że jeśli obraz jest SVG, zmiana rozmiaru rzeczywistego obrazu nie jest konieczna.

Ponieważ plik SVG jest po prostu XML, możesz określić dowolny rozmiar, który ma się pojawić w XML.

Jeśli jednak używasz tego samego obrazu SVG w różnych miejscach i potrzebujesz go o różnych rozmiarach, użycie background-size jest bardzo pomocne. Pliki SVG są z natury mniejsze niż obrazy rastrowe i zmiana rozmiaru w locie za pomocą CSS może bądź bardzo pomocny bez żadnych kosztów wydajności, o których wiem, a na pewno niewiele lub nie ma utraty jakości.

Oto krótki przykład:

<div class="hasBackgroundImage">content</div>

.hasBackgroundImage
{
    background: transparent url('/image/background.svg') no-repeat 10px 5px;
    background-size: 1.4em;
}
W przeciwieństwie do innych systemów operacyjnych, System operacyjny nie jest w pełni funkcjonalny.]}
 2
Author: SunSparc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-10 20:19:09

Możesz użyć dwóch <div> elementów:

  • Jednym z nich jest pojemnik (jest to ten, który pierwotnie chciał obrazek tła do wyświetlenia na).

  • Drugi jest zawarty wewnątrz. Ustawiasz jego rozmiar na rozmiar obraz tła (lub rozmiar, który chcesz wyświetlić).

Zawarty div jest następnie ustawiany na pozycję absolute. W ten sposób nie zakłóca normalnego przepływu elementów w div zawierającym.

Umożliwia efektywnie używaj obrazów sprite.

 2
Author: Ben Shomer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-16 15:53:03

Nie można ustawić rozmiaru obrazu tła przy użyciu bieżącej wersji CSS (2.1).

Można ustawić tylko: position, fix, image-url, repeat-mode, i color.

 1
Author: knittl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-29 21:11:40
put the below code in the body of you css file

background-image: URL('../images/wave-green-plain-colour.jpg') ;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
width:100px;
 1
Author: Shwetha S.H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-13 12:57:29

Napisałeś

background: url('bg.gif') top repeat-y;    
background-size: 490px;

Ale zobaczysz tylko tło w zależności od rozmiaru kontenera.

Jeśli masz pusty kontener z adresem URL tła i niezależnie od rozmiaru tła, nie zobaczysz bg.gif.

Jeśli ustawisz rozmiar continera na

background: url('bg.gif') top repeat-y;    
background-size: 490px;
height: 490px;
width: 490px;

W połączeniu z kodem, który napisałeś powyżej, będziesz mógł zobaczyć BG.plik gif.

 1
Author: Carlos Calla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-22 05:07:55

Jeśli chcesz ustawić background-size w tej samej właściwości background możesz użyć use:

background:url(my-bg.png) no-repeat top center / 50px 50px;
 1
Author: Orlando Leite,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-23 23:18:43

background-size działa w Chrome 4.1, ale do tej pory nie mogłem zrobić to działa w Firefoksie 3.6.

 0
Author: silversky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-29 21:13:31

Używam obrazów tła dla przycisków, ale wyświetla tylko obraz o takim samym rozmiarze jak tekst, nawet jeśli ustawiam szerokość i wysokość. Zamiast tego wstawiam tekst za pomocą znaków &nbsp; (niełamliwe spacje). Wciskam tyle, ile potrzeba, w zasadzie, aż pojawi się całe tło przycisku. Więc mogę mieć taki kod:

W arkuszu stylów:

#v2menu-home {
    background-image:url(../v2-siteimages/button.png);
    background-repeat:no-repeat;
}

W dokumencie HTML:

<div id="v2menu">
    <a id="v2menu-home" href="/index.php">home&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
</div><!-- v2menu -->
 0
Author: Martin Thompson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-02 08:22:41

Na przykład:
Obraz tła zawsze będzie pasował do rozmiaru kontenera (Szerokość 100% i wysokość 100px).
Cross-browser CSS:

.app-header {
background: url("themes/default/images/background.jpg") no-repeat;
-moz-background-size: 100% 100px;
-webkit-background-size: 100% 100px;
-o-background-size: 100% 100px;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src = "themes/default/images/background.jpg", sizingMethod = 'scale');
background-size: 100% 100px;

}

 0
Author: skyrosbit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-28 20:10:09

Jest to możliwe do zrobienia w CSS3 z background-size

.backgroungImage {
    background: url('../imageS/background.jpg') no-repeat;
    background-size: 32px 32px;
}
 0
Author: omkar khade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-10 07:59:01