fix(site): width/height nas imagens da home (auditoria 4.7)
125 imagens na home, 0 com srcset e 122 sem width/height — o browser só sabia o tamanho depois de descarregar, o que causa layout shift. Uploads são redimensionados a um limite de lado maior (functions_images.php), não a uma dimensão fixa (fotos de equipa vão de 389x512 a 512x512, ícones de oferta de 128x128 a 256x256), por isso as dimensões não dão para hardcode: site_img_dims_attr() em functions_site.php lê o ficheiro real com getimagesize() por pedido, tal como o gallery.php já fazia, e devolve o par width="" height="" ou "" se o ficheiro não existir. SVG não passa por getimagesize() (sem decoder embutido) — svg_img_dims_attr() lê os atributos width/height (ícones fitme-*.svg, 48x48 fixo) ou cai para o viewBox (logos do navbar, só têm viewBox). Aplicado a: ícones da oferta, fotos de equipa (card + painel de detalhe), ícone de modalidade em modalidade_icon_html() e no horário (index.php e includes/horario.php), logo do navbar. srcset ficou de fora: as imagens já vêm coartadas para pouco mais do que o maior tamanho a que aparecem (fotos de equipa a 512px cabidas numa caixa de no máx. 200px CSS com object-fit:cover; ícones a 128-256px mostrados a 44px) — é a folga normal para ecrãs retina, não desperdício a resolver com múltiplas resoluções. E o layout é sempre CSS-driven (width/height: 100% + object-fit), por isso um srcset não mudaria o que é descarregado por variação de viewport, só pouparia bytes nalguns casos — gerar 2-3 tamanhos por upload via GD seria trabalho a mais para o ganho real neste site. Fica só o fix de dimensões, que é o que resolve o CLS que a auditoria mediu. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
a42b6d33c0
commit
595a37fd8b
4 files changed
+59
-9
No files matched your search
@@ -1,16 +1,18 @@
|
||||
<?php
|
||||
if($current_uri_2 == 'crossfit'){
|
||||
$logo = base_url('site/assets/img/logos/logo_crossfit.svg');
|
||||
$logo_rel = 'site/assets/img/logos/logo_crossfit.svg';
|
||||
}
|
||||
else
|
||||
{
|
||||
$logo = base_url('site/assets/img/logos/logo_black.svg');
|
||||
$logo_rel = 'site/assets/img/logos/logo_black.svg';
|
||||
}
|
||||
$logo = base_url($logo_rel);
|
||||
$logo_dims = svg_img_dims_attr(dirname(__DIR__, 2) . '/' . $logo_rel);
|
||||
?>
|
||||
<header class="header-section lazy">
|
||||
<nav class="navbar navbar-expand-lg navbar-light" style="padding-left:1rem; padding-top: 0; padding-bottom: 0;padding-right: 0; ">
|
||||
<a class="navbar-brand" href="<?= htmlspecialchars(gym_url(current_gym())) ?>">
|
||||
<img loading="eager" decoding="async" alt="Logo FitMe3070" src="<?= $logo ?>" style="width: 150px;">
|
||||
<img loading="eager" decoding="async" alt="Logo FitMe3070" src="<?= $logo ?>" <?= $logo_dims ?> style="width: 150px;">
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button>
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
|
||||
Reference in new issue
Block a user