chevron-left chevron-right

Piotr Nalepa Frontend, architecture and AI

[CSS] Jak zrobić uzupełnienie procentowe dla kontenera zawierającego obrazek z ustaloną szerokością?

This version
blog.piotrnalepa.pl/2012/12/22/css-jak-zrobic-uzupelnienie-procentowe-dla-kontenera-zawierajacego-obrazek-z-ustalona-szerokoscia
Published
Author
, Staff Software Engineer
Category
CSS
Feedback
Write to me · Post on X

This post is 13 years old. Browsers and tools may have changed since then, so check the code against current documentation before you use it.

Projektanci stron WWW bardzo często się spotykają z problemem: jak zrobić, aby zawartość elementu następującego miała szerokość ustaloną w procentach minus konkretną szerokość wybranego elementu?
Do tej pory to było niemożliwe, aby coś takiego osiągnąć bez wykorzystania JS.

Section 1Calc() - ustawienie, które robi różnicę ... dosłownie

Teraz jest już rozwiązanie, możemy skorzystać z atrybutu CSS o nazwie calc(). Jest to bardzo ciekawy atrybut, którego możliwości są znaczące i ułatwia on tworzenie samo-dopasowujących się layoutów na stronach WWW.
Jego zadaniem jest wykonywanie działań arytmetycznych takich jak:

  • dodawanie,
  • odejmowanie,
  • mnożenie,
  • dzielenie.

Dzięki temu jest w stanie obliczyć jaką szerokość powinien mieć element do którego zastosowano calc(). Tym samym zostaje rozwiązany problem w przypadku tworzenia stron responsywnych (RWD), które zawierają elementy o stałej szerokości.

Section 2Calc() - zastosowanie

calc() jest funkcją CSS3, którą stosujemy przy ustalaniu szerokości elementu. Jego implementacja wygląda następująco:

Example 1HTML
1
2
3
4
<div class="content">
    <img src="obraz.jpg" alt=""/>
    <p class="text">Tekst</p>
</div>
Example 2CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
.content {
    width: 100%;
}
.content > img {
    width: 240px;
    height: auto;
}
.content > .text {
    width: 50%;
    width: -webkit-calc(100% - 240px);
    width: -moz-calc(100% - 240px);
    width: calc(100% - 240px);
}

Dla elementu z klasą text zastosowano funkcję calc(), której zadaniem jest odjęcie szerokości obrazka od szerokości kontenera rodzica i obliczenie jaką szerokość będzie miał element.
Dla przeglądarek nie obsługujących funkcji, dodałem szerokość z ustaloną wartością procentową (założenie było takie, że najmniejsza obsługiwana szerokość dla której obrazek będzie miał szerokość 240px to 480px).

Section 3Calc() - zgodność z przeglądarkami i podsumowanie

Przeglądarka wsparcie
Mozilla FirefoxMozilla Firefox tak
Google ChromeGoogle Chrome tak
OperaOpera nie
SafariSafari 5/6 nie/tak
Internet ExplorerInternet Explorer 7/8/9 nie/nie/tak

Powyższe zestawienie pokazuje, że najnowsze wersje przeglądarek obsługują już funkcję calc(). Co jest bardzo dobrą wiadomością. Niemiłym zaskoczeniem jest brak wsparcia dla Opery.

Można wywnioskować z tego jedną rzecz. Jeśli tworzysz strony WWW, które mają obsługiwać najnowsze możliwości CSS3 to wykorzystanie wcześniej wspomnianej funkcji ma jak najbardziej sens. Natomiast, jeśli wymagane jest wsparcie starszych wersji przeglądarek, to obawiam się, że bez JavaScriptu nie będzie można uzyskać tego efektu.

Share
Feedback

About the author

Staff Software Engineer

I've been writing this blog since 2009 and building for the web professionally for 14 years. Today I lead the frontend of the Cosmos platform at Bishop Fox, where I've been since day one of the project. Before that I worked at OLX, KUDO, Auto1 and eZ Systems. Here I write about what I've learned in practice: JavaScript, TypeScript, React, CSS and frontend architecture. I've also spoken at conferences across Poland and Europe. Got a question or an idea for a post? Let me know!