Czy Mogę zmienić wysokość obrazu w PSEUDOELEMENTACH CSS:before/:after?

Załóżmy, że chcę ozdobić linki do niektórych typów plików za pomocą obrazu. Mogę zadeklarować moje linki jako

<a href='foo.pdf' class='pdflink'>A File!</a>

Następnie mieć CSS jak

.pdflink:after { content: url('/images/pdf.png') }

Teraz to działa świetnie, chyba że {[2] }nie jest odpowiedni rozmiar dla mojego tekstu linku.

Chciałbym móc powiedzieć przeglądarce, aby przeskalowała :after obraz, ale na całe życie nie mogę znaleźć odpowiedniej składni. A może to jak obrazy tła, gdzie zmiana rozmiaru po prostu nie jest możliwa?

ETA: skłaniam się ku albo a) zmiana rozmiaru obrazu źródłowego na "właściwy" rozmiar, po stronie serwera i/lub B) zmiana znaczników, aby po prostu dostarczyć znacznik IMG w linii. Próbowałem uniknąć obu tych rzeczy, ale brzmią, jakby były bardziej kompatybilne niż próbować robić rzeczy czysto z CSS. Odpowiedź na moje pierwotne pytanie brzmi: "możesz w pewnym sensie to zrobić, czasami".

Author: Coderer, 2012-01-23

14 answers

background-size jest dozwolone. Nadal musisz jednak określić szerokość i Wysokość bloku.

.pdflink:after {
    background-image: url('/images/pdf.png');
    background-size: 10px 20px;
    display: inline-block;
    width: 10px; 
    height: 20px;
    content:"";
}

Pełna tabela zgodności znajduje się w MDN .

 411
Author: Ansel Santosa,
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-13 17:03:21

Zauważ, że pseudoelement :after jest ramką, która z kolei zawiera wygenerowany obraz. Nie ma sposobu na stylizację obrazu, ale możesz stylizować pudełko.

Poniżej jest tylko pomysłem, a rozwiązanie powyżej jest bardziej praktyczne.

.pdflink:after {
    content: url('/images/pdf.png');
    transform: scale(.5);
}

Http://jsfiddle.net/Nwupm/

Wady: musisz znać wewnętrzne wymiary obrazu, a to pozostawia kilka białych spacji, których nie mogę się pozbyć.

 108
Author: user123444555621,
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
2017-05-23 12:26:27

Ponieważ moja druga odpowiedź nie była oczywiście dobrze zrozumiana, oto druga próba:

Istnieją dwa podejścia do odpowiedzi na to pytanie.

Praktyczny (Pokaż mi to cholerne zdjęcie!)

Zapomnij o :after pseudo-selektorze i wybierz coś w rodzaju

.pdflink {
    min-height: 20px;
    padding-right: 10px;
    background-position: right bottom;
    background-size: 10px 20px;
    background-repeat: no-repeat;
}

Teoretyczne

Pytanie brzmi: czy możesz stylować wygenerowaną treść? Odpowiedź brzmi: Nie, Nie możesz. była długa dyskusja na liście dyskusyjnej W3C w tej sprawie, ale na razie nie ma rozwiązania.

Wygenerowana zawartość jest renderowana do wygenerowanego pudełka i możesz stylować to pudełko, ale Nie zawartość jako taka . Różne przeglądarki wykazują bardzo różne zachowania

#foo         {content: url("bar.jpg"); width: 42px; height:42px;}  
#foo::before {content: url("bar.jpg"); width: 42px; height:42px;}

Chrome zmienia rozmiar pierwszego, ale wykorzystuje wewnętrzne wymiary obrazu dla drugiego

Firefox i ie nie obsługują pierwszego i używają wewnętrznych wymiarów dla drugi

Opera używa wewnętrznych wymiarów dla obu przypadki

(z http://lists.w3.org/Archives/Public/www-style/2011Nov/0451.html )

Podobnie, przeglądarki pokazują bardzo różne wyniki na takich rzeczach jak http://jsfiddle.net/Nwupm/1/, gdzie generowany jest więcej niż jeden element. Należy pamiętać, że CSS3 jest jeszcze na wczesnym etapie rozwoju, a ten problem nie został jeszcze rozwiązany.

 36
Author: user123444555621,
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-24 20:49:17

Powinieneś użyć tła zamiast obrazu.

.pdflink:after {
  content: "";
  background-image:url(your-image-url.png);
  background-size: 100% 100%;
  display: inline-block;

  /*size of your image*/
  height: 25px;
  width:25px;

  /*if you want to change the position you can use margins or:*/
  position:relative;
  top:5px;

}
 17
Author: Santi Nunez,
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-11-22 11:34:16

diplay: block; nie mają żadnego efektu

Pozycjonowanie działa również bardzo dziwnie na frontend foundamentals, więc bądź ostrożny

body:before{ 
    content:url(https://i.imgur.com/LJvMTyw.png);
    transform: scale(.3);
    position: fixed;
    left: 50%;
    top: -6%;
    background: white;
}
 6
Author: Dmytro Yurchenko,
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
2019-02-24 00:30:21

Oto inne (działające) rozwiązanie : po prostu zmień rozmiar zdjęć do pożądanego rozmiaru:)

.pdflink:after {
    display: block;
    width: 20px;
    height: 10px;
    content:url('/images/pdf.png');
}

Potrzebujesz pdf.png ma być 20px * 10px, aby to działało. 20px/10px w css są tutaj, aby podać rozmiar bloku, aby elementy, które pojawiają się po bloku, nie były wszystkie pomieszane z obrazem

Nie zapomnij zachować kopii obrazu raw w oryginalnym rozmiarze

 4
Author: Thomas,
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
2017-09-19 02:52:48

Tak, pierwotne pytanie zostało zadane osiem lat temu, ale tak naprawdę jest aktualne dzisiaj, jak zawsze. Teraz, idę z filar do postu nad tym zagadnieniem:: przed, przez około tydzień:: po, I to prowadzi mnie za zakrętem.

Z tej strony i innych na ten temat-w końcu poskładałem to do kupy i zmieściłem obrazek w pseudo tagu.

** Uwaga bieżąca .colnav jest tylko moją klasą kontenerów, która zawiera i zestaw znaczników z zestawem

Poniżej znajduje się kod (kompletny)

.colnav li.nexus-button a:hover:before {   
    background-image: url('/images/fleur-de-lis.png');
    background-size: 90px 20px;
    background-repeat: no-repeat;
    width: 130px;
    height: 20px;
    margin-left: -120px;
    margin-top: -3px;
    transform: scale(1.5);
    content: "";
    position: absolute;
}

Plik obrazu miał (jest) 120 x 80, a obraz został zredukowany do 90x 20, gdzie następnie całkiem ładnie pasował za znacznikiem html href, a wszystko to razem z tą pozycją: absolute na końcu.

 4
Author: Terry McBride,
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
2020-11-29 17:23:22
.pdflink:after {
    background-image: url('/images/pdf.png');
    background-size: 10px 20px;
    width: 10px; 
    height: 20px;
    padding-left: 10px;// equal to width of image.
    margin-left:5px;// to add some space for better look
    content:"";
}
 3
Author: Ravi Soni,
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
2015-06-30 19:40:18

Możesz zmienić wysokość lub szerokość przed lub po w następujący sposób:

.element:after {
  display: block;
  content: url('your-image.png');
  height: 50px; //add any value you need for height or width
  width: 50px;
}
 3
Author: Nesha Zoric,
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
2018-05-17 13:34:56

Możesz użyć właściwości zoom. Sprawdź Ten jsfiddle

 2
Author: Plamen,
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-05 15:32:38

Użyłem tej czcionki rozmiar kontroli szerokość

.home_footer1::after {
color: transparent;
background-image: url('images/icon-mail.png');      
background-size: 100%;      
content: ".......................................";
font-size: 30pt;
}
 1
Author: Andre Jesus Seiji Nishi,
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-11-05 18:41:30

Obecnie dzięki flexbox możesz znacznie uprościć kod i dostosować tylko 1 parametr w razie potrzeby:

.pdflink:after {
    content: url('/images/pdf.png');
    display: inline-flex;
    width: 10px;
}

Teraz możesz po prostu dostosować szerokość elementu, a wysokość automatycznie się dostosuje, zwiększ / zmniejsz szerokość, aż Wysokość elementu będzie na wymaganej liczbie.

 1
Author: rhysclay,
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
2018-03-03 10:39:50
content: "";
background-image: url("yourimage.jpg");
background-size: 30px, 30px;
 0
Author: uyghurbeg,
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
2019-08-20 08:26:08

Zamiast ustawiać szerokość i wysokość obrazu tła, można ustawić szerokość i wysokość samego elementu.

.pdflink::after {
  content: '';
  background-image: url(/images/pdf.png);
  width: 100px;
  height: 100px;
  background-size: contain;
}
 0
Author: Usman Ahmed,
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
2020-08-06 11:21:06