Próbuję zmienić rozmiar obrazu z procentem siebie. Na przykład chcę po prostu zmniejszyć obraz o połowę, zmieniając jego rozmiar do 50%. Ale zastosowanie width: 50%;
spowoduje zmianę rozmiaru obrazu na 50% elementu kontenera (element nadrzędny, który może być <body>
na przykład).
Pytanie brzmi, czy mogę zmienić rozmiar obrazu o określony procent bez używania javascript lub po stronie serwera? (Nie mam bezpośrednich informacji o rozmiarze obrazu)
Jestem prawie pewien, że nie możesz tego zrobić, ale chcę tylko sprawdzić, czy istnieją inteligentne rozwiązania CSS. Dzięki!
width: <number>%
. Nie sądzę, aby można było to zrobić!Odpowiedzi:
Mam dla ciebie 2 metody.
Metoda 1. Demo na jsFiddle
Ta metoda zmienia rozmiar obrazu tylko wizualnie, a nie rzeczywiste wymiary w DOM, a stan wizualny po zmianie rozmiaru wyśrodkowany w środku oryginalnego rozmiaru.
html:
css:
Uwaga dotycząca obsługi przeglądarek : statystyki przeglądarek są wyświetlane w tekście
css
.Metoda 2. Demo na jsFiddle
html:
css:
Uwaga:
img.normal
iimg.fake
to ten sam obraz.Uwaga dotycząca obsługi przeglądarek: ta metoda będzie działać we wszystkich przeglądarkach, ponieważ wszystkie przeglądarki obsługują
css
właściwości używane w metodzie.Metoda działa w ten sposób:
#wrap
i#wrap img.fake
płynąć#wrap
maoverflow: hidden
, aby jego wymiary były identyczne z wewnętrznym obrazem (img.fake
)img.fake
jest jedynym elementem wewnątrz#wrap
bezabsolute
pozycjonowania tak, aby nie przerywał drugiego kroku#img_wrap
maabsolute
pozycjonowanie wewnątrz#wrap
i rozciąga się na cały element (#wrap
)#img_wrap
ma takie same wymiary jak obraz.width: 50%
naimg.normal
jego rozmiar jest50%
o#img_wrap
, a więc50%
od oryginalnego rozmiaru obrazu.źródło
transform:scale()
Rozwiązanie ma duży problem chociaż. Nie współdziała dobrze z modelem pudełkowym CSS. Rozumiem przez to, że w ogóle nie wchodzi z nim w interakcję , więc otrzymujesz układ, który wygląda źle. Zobacz: jsfiddle.net/kahen/sGEkt/8HTML:
CSS:
To musi być jedno z najprostszych rozwiązań wykorzystujących podejście kontenerowe.
Podczas korzystania z podejścia z elementem kontenera to pytanie jest odmianą tego pytania . Sztuczka polega na tym, aby element kontenera otoczył obraz potomny powłoką, tak aby miał rozmiar równy rozmiarowi obrazu bez rozmiaru. Tak więc podczas ustawiania
width
właściwości obrazu jako wartości procentowej obraz jest skalowany względem jego oryginalnej skali.Niektóre inne właściwości zmniejszenia objętości włączanie i wartości nieruchomości to:
float: left/right
,position: fixed
imin/max-width
, jak wspomniano w połączonej pytanie. Każdy ma swoje skutki uboczne, aledisplay: inline-block
byłby bezpieczniejszym wyborem. Matt wspomniałfloat: left/right
w swojej odpowiedzi, ale błędnie to przypisałoverflow: hidden
.Demo na jsfiddle
Edycja: jak wspomniał trojan , możesz również skorzystać z nowo wprowadzonego wewnętrznego i zewnętrznego modułu określania rozmiaru CSS3 :
HTML:
CSS:
Jednak nie wszystkie popularne wersje przeglądarek obsługują go w chwili pisania tego tekstu .
źródło
<img src="https://www.google.com/images/srpr/logo11w.png"/>
CSS:img { display: inline-block; width: 15%; }
figure
jestwidth: fit-content;
aktualna. Obsługa przeglądarek również jest dziś znacznie lepsza.Spróbuj
zoom
nieruchomościEdycja: Najwyraźniej FireFox nie obsługuje
zoom
właściwości. Powinieneś użyć;dla FireFox.
źródło
Innym rozwiązaniem jest użycie:
Nie zostanie zweryfikowany, ponieważ
src
atrybut jest wymagany, ale działa (z wyjątkiem dowolnej wersji IE, ponieważsrcset
nie jest obsługiwany).źródło
Jest to rzeczywiście możliwe i odkryłem to zupełnie przez przypadek podczas projektowania mojej pierwszej responsywnej witryny projektowej na dużą skalę.
Przepełnienie: ukryte podaje wysokość i szerokość opakowania, pomimo pływającej zawartości, bez użycia hacka clearfix. Następnie możesz pozycjonować zawartość za pomocą marginesów. Możesz nawet uczynić element div wrappera blokiem inline.
źródło
To bardzo stary wątek, ale znalazłem go, szukając prostego rozwiązania do wyświetlania zrzutu ekranu siatkówki (w wysokiej rozdzielczości) na wyświetlaczu o standardowej rozdzielczości.
Jest więc rozwiązanie tylko HTML dla nowoczesnych przeglądarek:
To mówi przeglądarce, że obraz jest dwukrotnie większy od zamierzonego rozmiaru wyświetlacza. Wartości są proporcjonalne i nie muszą odzwierciedlać rzeczywistego rozmiaru obrazu. Aby osiągnąć ten sam efekt, można użyć 2w 1px. Atrybut src jest używany tylko przez starsze przeglądarki.
Miłym efektem jest to, że wyświetla ten sam rozmiar na siatkówce lub standardowym wyświetlaczu, zmniejszając się na drugim.
źródło
To rozwiązanie używa js i jquery i zmienia rozmiar na podstawie tylko właściwości obrazu, a nie elementu nadrzędnego. Może zmieniać rozmiar pojedynczego obrazu lub grupy na podstawie parametrów class i id.
Aby uzyskać więcej, przejdź tutaj: https://gist.github.com/jennyvallon/eca68dc78c3f257c5df5
źródło
To nie jest trudne podejście:
źródło
Właściwie większość odpowiedzi tutaj naprawdę nie skalować obraz do szerokości sobie .
Musimy mieć szerokość i wysokość auto na
img
elemencie, abyśmy mogli zacząć od jego oryginalnego rozmiaru.Następnie element kontenera może przeskalować obraz za nas.
Prosty przykład HTML:
A oto zasady CSS. W tym przypadku używam absolutnego pojemnika:
Możesz dostosować położenie obrazu za pomocą reguł takich jak
transform: translate(0%, -50%);
.źródło
Myślę, że masz rację, po prostu nie jest to możliwe z czystym CSS, o ile wiem (nie mam na myśli cross-browser).
Edytować:
Okej, nie podobała mi się moja odpowiedź, więc trochę się zdziwiłem. Mogłem znaleźć ciekawy pomysł, który mógłby pomóc ... może w końcu JEST to możliwe (choć nie jest to najpiękniejsza rzecz na świecie):
Edycja: przetestowana i działająca w Chrome, FF oraz IE 8 i 9. . Nie działa w IE7.
Przykład jsFiddle tutaj
html:
css:
źródło
inline-block
, dlatego szerokość#img_wrap
zależy nie tylko od wewnętrznej szerokości HTML, ale także od szerokości kontekstu-kontenera.