天氣 × 衣櫥
根據天氣穿什麼搭配緊身褲?
選擇國家、城市、活動和緊身褲。根據真實預報準備適合寒冷、雨天或風天的穿搭,無需 GPS 或帳號。
建立穿搭 →✦ MET Norway
選擇你的選項並請求天氣預報。
✦ 緊身褲與穿搭層次
✦ 鞋款
✦ 為何這樣搭配可能適合
請檢查衣物標籤與實際狀況。天氣預報無法保證緊身褲的防水或保暖性能。
深入探索天氣狀況
查看逐小時預報、實用穿搭清單及美國官方警報。我們只載入你所需的資訊。
📈 未來數小時與7天預報
溫度、濕度、降雨、晴空紫外線與風速。
🎒 根據天氣準備出門清單
利用已儲存的預報製作清單,無需額外購物或通話。
⚠️ 美國官方警報
美國國家氣象局針對各地區的有效警報。
建議如何產生
我們結合天氣預報與你的選擇,絕不虛構衣物性能。
實時天氣預報來自 MET Norway 的溫度、體感溫度、風速和降水量資料。
你的緊身褲請標明是輕薄款、普通款還是保暖款。這不是實驗室測試。
你的活動城市短途和長時間徒步需要不同的穿搭層次。
寒冷、下雨或有風時,緊身褲該怎麼搭配
先查看實時天氣預報。根據溫度、降雨、風力和戶外天氣調整穿搭層次。纖維比例並不代表保暖程度。
❄️寒冷天氣的緊身褲穿搭組合
短途出行可穿普通緊身褲、毛衣和外套。接近零度或長時間徒步時,請考慮真正的保暖層和外層防護。穿著有抓地力的封閉式鞋子。
🌧️下雨時緊身褲的穿搭建議
大多數緊身褲不防水。請加穿防水外層,穿著底部防滑的封閉式鞋子,並準備可在室內脫下的衣物。
🌬️有風或溫和天氣的穿搭
有風時,防風外套比纖維名稱更重要。天氣溫和時,穿著舒適的上衣和易於脫卸的輕薄層次。
六套適合實際情況的穿搭組合
天氣預報僅供參考,非固定穿搭。根據路線、活動和現有衣物調整層次。
🌧️城市中的雨天
搭配不透明緊身褲、毛衣、防水外套和抓地力良好的鞋子。
出門前:濕滑的路面和室內暖氣需要不同的穿搭層次。
黑色緊身褲 →🌲長時間散步
根據天氣選擇合適的緊身褲、保暖或防風層,並穿著舒適的鞋子。
出門前:戶外活動時間長短與溫度同樣重要。
秋季穿搭 →🚉城市旅行
試穿舒適的緊身褲、簡單上衣、可脫卸的外層和適合步行的鞋子。
出門前:室內外溫差可能很大。
樂福鞋與緊身褲 →☀️溫暖的日子
如果舒適,選擇輕薄緊身褲,搭配合適的上衣和透氣鞋。
出門前:濕度和活動強度也會影響舒適度。
材質質感 →❄️寒冷的早晨
考慮真正保暖的衣物、外套和厚襪子;若長時間在戶外,請加穿防護外層。
出門前:風會增加寒冷感。
纖維混紡 →🌬️多風的午後
將日常穿的緊身褲搭配防風外套,方便隨時脫卸的中層衣物。
出門前: 外層防護的重量可能比彈性纖維的比例更重要。
旅行穿搭 → 常見問題
冷天可以穿緊身褲嗎?
可以,視衣物材質和暴露在外的時間而定。薄款可能需要保暖層;纖維種類並不保證保暖效果。
下雨天適合穿嗎?
作為穿搭的一部分可以,但大多數緊身褲不防水。建議加穿合適的外層和穿防滑鞋。
這個規劃工具如何運作?
選擇國家、城市、活動和緊身褲款式。LEGGIC結合MET Norway的公開數據,提供穿搭建議,並不涉及產品測試。
如何根據天氣預報決定穿著
單看溫度不足以判斷舒適度:風速、降雨、戶外時間及室內外溫差都會影響感受。這些只是參考,不能保證布料效果。
根據溫度的五個穿搭起點
低於 0 °C
緊身褲與層次: 穿著真正保暖的衣物,並視情況加穿外層防護。
鞋款與合身: 穿封閉式防滑鞋和保暖襪子。
0–5 °C
緊身褲與層次: 穿保暖緊身褲或加穿防護層,並依暴露時間增添保暖。
鞋款與合身: 穿適合濕冷環境的封閉鞋款。
6–12 °C
緊身褲與層次: 穿日常緊身褲、毛衣和可調節外套。
鞋款與合身: 若下雨,選擇舒適且耐用的鞋子。
13–20 °C
緊身褲與層次: 穿普通緊身褲和輕薄層次。
鞋款與合身: 選擇適合行程的鞋款。
超過 20 °C
緊身褲與層次: 若感覺舒適,可穿輕薄緊身褲,避免過熱。
鞋款與合身: 穿舒適且透氣的鞋子。
這些溫度區間僅供參考。運動強度、風速、布料和個人偏好會影響實際感受,並非普遍標準。
三個需注意的因素
🌬️風防風層可能比纖維混紡更重要。
🌧️雨緊身褲通常不防水,建議加穿防護外層。
🕓持續時間短途行程不需要和長途徒步一樣的穿搭層數。
出門前的五項檢查
- 戶外時間估算你將暴露在天氣中的時間。
- 實際服裝檢查面料、覆蓋範圍與合身度。
- 鞋子選擇合適的鞋底與鞋帶設計。
- 層次穿搭攜帶可增減的服裝單品。
- 資料來源查看當地最新天氣預報。
標籤無法透露的事實
80/20混紡真的保暖嗎?
不會。成分比例無法衡量保溫效果。
更高GSM代表防水嗎?
不會。GSM是每單位面積的重量,非防雨性能指標。
更多彈性纖維代表更適合運動嗎?
不會。結構、尺寸與活動自由度才是關鍵。
氣象資料 © MET Norway (CC BY 4.0)。建議為LEGGIC解讀,非服裝測試或供應商推薦。MET Norway · CC BY 4.0。
額外地點與大致座標:GeoNames,CC BY 4.0;編輯選擇。GeoNames。
(function(){
"use strict";
var root=document.querySelector('[data-tool=weather]');if(!root)return;
var L={"find":"搜尋更多城市","hint":"找不到你的地區?請在選定國家搜尋或載入更多國家。無GPS或IP定位。","lookup":"地點名稱","search":"搜尋地區","countries":"更多國家","empty":"無結果。","loading":"正在搜尋地點…","choose":"選擇此地點","intro":"詳細探索天氣","lead":"查詢逐小時預報、實用穿搭清單及美國官方警報。我們只載入你要求的資料。","forecast":"小時與未來7天","forecastDesc":"溫度、濕度、降雨、晴空紫外線與風速。","alerts":"美國官方警報","alertsDesc":"美國國家氣象局針對美國地區的有效警報。","go":"查詢","hour":"未來數小時(UTC)","days":"未來數天(UTC日期)","unavailable":"資料來源暫時無法使用。","nothing":"無相容數值。","notUS":"NWS警報僅適用於美國。","noAlerts":"目前沒有任何官方警告。","countryReady":"國家列表已載入。","source":"資料來源:MET Norway、PlaceDB(CC0)及 NWS。列表使用快取的天氣預報,非服裝測試。","pack":"根據天氣準備出門清單","packDesc":"使用已保存的預報製作清單,無需額外購物或通話。","packItems":["你的緊身褲","保暖衣物或外套","防雨外層","防風夾克","保暖襪子與包腳鞋","舒適且防滑的鞋子"],"packCopy":"複製清單","packSaved":"清單已複製"},country=root.querySelector('#wa-country'),city=root.querySelector('#wa-city');
var input=root.querySelector('#wa-place-query'),matches=root.querySelector('.wa-place-matches'),status=root.querySelector('.wa-place-status-text');
function item(tag,value){var e=document.createElement(tag);e.textContent=String(value);return e;}
function query(){
var opt=city.selectedOptions[0],p=new URLSearchParams();
if(opt&&opt.dataset.placeId){p.set('country',country.value);p.set('place',opt.dataset.placeId);p.set('q',opt.dataset.query);}
else if(city.value)p.set('city',city.value);
return p;
}
var placeEpoch=0,panelEpoch={forecast:0,pack:0,alerts:0};
function clear(){placeEpoch++;for(var mode in panelEpoch)panelEpoch[mode]++;matches.replaceChildren();status.textContent='';for(var e of root.querySelectorAll('.wa-deep-output'))e.replaceChildren();}
country.addEventListener('change',clear);city.addEventListener('change',clear);
var find=root.querySelector('.wa-place-find');
find.addEventListener('click',async function(){
var value=input.value.trim();if(value.length<2){input.focus();return;}
var findIntent=++placeEpoch,chosenCountry=country.value;
status.textContent=L.loading;matches.replaceChildren();find.disabled=true;
try{
var r=await fetch('/api/weather-places?country='+encodeURIComponent(country.value)+'&q='+encodeURIComponent(value));
if(!r.ok)throw Error('places');var d=await r.json();if(findIntent!==placeEpoch||country.value!==chosenCountry)return;if(!d.places||!d.places.length)status.textContent=L.empty;
else status.textContent=d.places.length+' · '+L.choose;
for(const p of d.places||[]){
var li=item('li',''),b=item('button',p.name);
b.type='button';b.addEventListener('click',function(){
if(findIntent!==placeEpoch||country.value!==chosenCountry)return;
var opt=document.createElement('option');opt.value='p-'+p.country+'-'+p.id;opt.textContent=p.name;
opt.dataset.placeId=String(p.id);opt.dataset.query=value;city.append(opt);city.disabled=false;city.value=opt.value;
city.dispatchEvent(new Event('change',{bubbles:true}));status.textContent=p.name+' ✓';matches.replaceChildren();
});li.append(b);matches.append(li);
}
}catch{if(findIntent===placeEpoch)status.textContent=L.unavailable;}finally{find.disabled=false;}
});
input.addEventListener('keydown',function(e){if(e.key==='Enter'){e.preventDefault();find.click();}});
root.querySelector('.wa-all-countries').addEventListener('click',async function(){
var button=this;button.disabled=true;status.textContent=L.loading;
try{
var r=await fetch('/api/weather-countries');if(!r.ok)throw Error('countries');
var d=await r.json(),already=new Set(Array.from(country.options,x=>x.value)),extra=[];
var fmt=new Intl.DisplayNames([document.documentElement.lang||'en'],{type:'region'});
for(var c of d.countries||[]){if(!/^[A-Z]{2}$/.test(c.code)||already.has(c.code))continue;
var o=document.createElement('option');o.value=c.code;o.textContent=fmt.of(c.code)||c.name;
country.append(o);extra.push(c.code);}
window.__leggicMoreCountries=[...new Set([...(window.__leggicMoreCountries||[]),...extra])];
status.textContent=L.countryReady;button.hidden=true;
}catch{status.textContent=L.unavailable;button.disabled=false;}
});
function line(box,name,value){var row=item('div','');row.className='wa-deep-line';row.append(item('span',name),item('strong',value));box.append(row);}
for(const btn of root.querySelectorAll('.wa-deep-fetch')){
btn.addEventListener('click',async function(){
var mode=btn.dataset.mode,box=root.querySelector('.wa-deep-output[data-mode="'+mode+'"]');
var intent=++panelEpoch[mode],selectedCountry=country.value,selectedCity=city.value;
if(!city.value){box.textContent=L.empty;return;}
box.textContent=L.loading;btn.disabled=true;
var p=query(),url=mode==='alerts'?'/api/weather-alerts':'/api/weather-advice';
if(mode==='forecast'||mode==='pack')p.set('view','extended');
try{
var r=await fetch(url+'?'+p.toString());if(!r.ok)throw Error('source');
var d=await r.json();if(intent!==panelEpoch[mode]||city.value!==selectedCity||country.value!==selectedCountry)return;box.replaceChildren();
if(mode==='forecast'){
var a=item('div','');a.className='wa-deep-lines';
if(Number.isFinite(d.humidity))line(a,'💧',d.humidity+'%');
if(Number.isFinite(d.uvClearSky))line(a,'UV (clear sky)',d.uvClearSky);
if(Number.isFinite(d.windGustMs))line(a,'Wind gust',d.windGustMs+' m/s');
for(var h of (d.hourly||[]).slice(0,18))line(a,h.time.slice(5,16).replace('T',' ')+' UTC',h.temperatureC+' °C'+(Number.isFinite(h.precipChance)?' · '+h.precipChance+'%':''));
box.append(a);
var b=item('div','');b.className='wa-deep-lines';
for(var day of d.daily||[])line(b,day.dayUTC,day.lowC+' / '+day.highC+' °C');
box.append(item('h4',L.days),b);
}else if(mode==='pack'){
if(!Number.isFinite(d.temperatureC))throw Error('missing temperature');
var items=[L.packItems[0]];
if(d.temperatureC<10)items.push(L.packItems[1]);
if((Number.isFinite(d.precipMm)&&d.precipMm>=0.2)||/rain|snow|sleet/i.test(d.symbol||''))items.push(L.packItems[2]);
if(d.windMs>=8)items.push(L.packItems[3]);
items.push(d.temperatureC<5?L.packItems[4]:L.packItems[5]);
var list=item('ul','');list.className='wa-packing-list';
for(const label of [...new Set(items)]){var li=item('li',label);list.append(li);}
box.append(list);
var copy=item('button',L.packCopy);copy.type='button';copy.className='wa-pack-copy';
copy.addEventListener('click',async function(){try{
await navigator.clipboard.writeText(items.join('\n'));copy.textContent=L.packSaved;
}catch{copy.textContent=L.unavailable;}});
box.append(copy);
}else{
if(!d.supported){box.textContent=L.notUS;return;}
if(!d.alerts?.length){box.textContent=L.noAlerts;return;}
for(var a of d.alerts)line(box,a.severity,a.event+': '+a.headline);
var link=item('a','National Weather Service');link.href='https://www.weather.gov/';link.rel='noopener noreferrer';box.append(link);
}
}catch{if(intent===panelEpoch[mode])box.textContent=L.unavailable;}finally{btn.disabled=false;}
});
}
})();document.addEventListener('DOMContentLoaded',()=>{setTimeout(()=>{
// The deferred app.js initializes its tool on DOMContentLoaded; run just after it.
const button=document.getElementById('buildLook');if(!button)return;
const labels={it:'Abbinamento',de:'Outfit',es:'Conjunto',fr:'Tenue',en:'Look'};
const enhance=()=>{
const result=document.querySelector('#lookResult .result');
if(!result||result.querySelector('.style-look-grid'))return;
const items=[...result.querySelectorAll('ol li')].slice(0,3);
if(!items.length)return;
const selectedText=id=>{
const element=document.getElementById(id);
return element?.selectedOptions?.[0]?.textContent?.trim()||element?.value||'';
};
const metaText=[selectedText('color'),selectedText('season'),selectedText('shoes')].filter(Boolean).join(' · ');
const grid=document.createElement('div');grid.className='style-look-grid';
items.forEach((item,index)=>{
const card=document.createElement('article');card.className='style-look';
const meta=document.createElement('span');meta.className='style-look-meta';meta.textContent=metaText;
const content=document.createElement('div'),title=document.createElement('b'),copy=document.createElement('p');
title.textContent=(labels[document.documentElement.lang]||labels.en)+' '+(index+1);
copy.innerHTML=item.innerHTML;
content.append(title,copy);card.append(meta,content);grid.append(card);
});
result.querySelector('ol')?.replaceWith(grid);
};
const next=()=>setTimeout(enhance,0);
button.addEventListener('click',next);
for(const id of ['color','season','occasion','shoes','finish'])document.getElementById(id)?.addEventListener('change',next);
next();
},0);});(()=>{const root=document.querySelector('header.site-header [data-lp]');if(!root)return;const t=root.querySelector('.lp-trigger'),d=root.querySelector('.lp-dialog');if(!d||typeof d.showModal!=='function')return;const f=d.querySelector('.lp-filter'),items=[...d.querySelectorAll('.lp-item')],groups=[...d.querySelectorAll('.lp-group')],empty=d.querySelector('.lp-empty');const norm=s=>s.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g,'');const apply=()=>{const q=norm(f.value.trim());let shown=0;items.forEach(a=>{const ok=!q||norm(a.dataset.names+' '+a.textContent).includes(q);a.parentElement.hidden=!ok;if(ok)shown++;});groups.forEach(g=>{g.hidden=![...g.querySelectorAll('li')].some(li=>!li.hidden)});empty.hidden=shown>0;};t.addEventListener('click',e=>{if(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;e.preventDefault();d.showModal();f.value='';apply();if(window.matchMedia('(pointer:fine)').matches)f.focus();else d.querySelector('.lp-item.is-current')?.scrollIntoView({block:'center'});});d.querySelector('.lp-close').addEventListener('click',()=>d.close());d.addEventListener('click',e=>{if(e.target===d)d.close()});f.addEventListener('input',apply);f.addEventListener('keydown',e=>{if(e.key==='Enter'){const first=items.find(a=>!a.parentElement.hidden);if(first){e.preventDefault();first.click();}}});d.addEventListener('close',()=>t.focus());})();