`<output>` etiketi
(denodell.com)<output>etiketi, web geliştiricileri arasında çok iyi bilinmese de dinamik sonuç gösterimi ve ekran okuyucu erişilebilirliğini yerleşik olarak sunar- HTML spesifikasyonunda uzun süredir yer alır ve
role="status"ile otomatik eşlenerek görme engelli yardımcı teknolojilere değişiklikleri duyurur <output>, girdi değerlerine göre hesaplanan sonuçları bildirmek için kullanılır, ancak çoğu eğitimde ve kütüphanede göz ardı edilirfor=""özniteliği desteği gibi güçlü erişilebilirlik özellikleri sağlar ve JavaScript framework'leriyle de son derece uyumludur- Çeşitli gerçek proje örneklerinde hesap makinesi, slider değeri biçimlendirme, form doğrulama geri bildirimi gibi durumlarda faydalı şekilde kullanılabilir
HTML'deki gizli mücevher: <output> etiketi
Tüm geliştiriciler <input> öğesini iyi bilir; bu, web'in temel girdi araçlarından biridir.
Ancak <output> öğesi çoğu kişi tarafından hiç kullanılmamış, hatta çoğu zaman varlığından bile haberdar olunmamıştır.
Bu üzücü, çünkü şimdiye kadar <div> ve ARIA ile geçici çözümler üretilen dinamik sonuç sunumu ve erişilebilirlik sorunlarını <output> doğrudan çözebilir.
Bu etiket HTML spesifikasyonunda uzun zamandır yer alsa da hâlâ yaygın olarak bilinmiyor.
HTML5 spesifikasyonundaki tanım
HTML5 spesifikasyonuna göre
<output>öğesi, uygulamada hesaplanan bir sonucu veya kullanıcı eyleminin sonucunu temsil eder
Erişilebilirlik ağacında role="status" ile eşlenir; böylece değer her değiştiğinde ekran okuyucu tüm içeriği kullanıcıya otomatik olarak bildirir.
Bu, varsayılan olarak aria-live="polite" aria-atomic="true" uygulanmış gibidir.
Bu davranış, kullanıcının akışını bölmeden tüm içeriği sakince okumasıyla öne çıkar.
Gerekirse geliştirici davranışı değiştirmek için ayrıca ARIA öznitelikleri tanımlayabilir.
<output> nasıl kullanılır
Basitçe aşağıdaki gibi kullanılabilir:
<output>여기에 동적 값 표시</output>
Yalnızca bu şekilde kullanıldığında bile yerleşik yardımcı teknoloji desteği elde edilir; ek özniteliklere, ezberlemesi zor API'lere gerek yoktur ve yalnızca saf HTML ile erişilebilirlik sağlanabilir.
Keşif anı
Yazar, bir erişilebilirlik projesinde çok adımlı formun puan gösterimi üzerinde çalışırken <output> değerini fark etti.
Form puanındaki değişim ekranda görünüyordu, ancak ekran okuyucu kullanan kullanıcılar bu değişimi fark edemiyordu.
Bu sorun ARIA live region ile çözülebiliyordu, ancak anlamsal olarak doğru HTML kullanmanın daha uygun olduğu düşünüldü.
Spesifikasyonu incelerken formdan bağımsız olarak da kullanılabilen ve sonucu otomatik olarak duyuran <output> öğesi keşfedildi; en basit çözümün zaten standardın içinde olduğu anlaşıldı.
Neden pek kullanılmıyor
Bu unutulmuş bir etiket; çoğu eğitimde veya bileşen kütüphanesinde ele alınmıyor ve Github açık depolarında da neredeyse hiç kullanım örneği yok.
Bunun sonucu olarak bilgi eksikliği sürekli tekrar ediyor ve az kullanılma döngüsü sürüp gidiyor.
Bilinmesi faydalı noktalar
<output>da<label>gibifor=""özniteliğine sahiptir- Sonucun hangi girdilere bağlı olduğunu, ilgili
iddeğerlerini boşlukla ayırarak belirtmek mümkündür
- Sonucun hangi girdilere bağlı olduğunu, ilgili
- Görsel olarak fark yaratmasa da erişilebilirlik ağacında girdi-sonuç ilişkisini anlamsal olarak kurar
<form>öğesi olmadan da, kullanıcı girdisine göre dinamik olarak değişen metin gereken her yerde kullanılabilir- Varsayılan olarak satır içi öğedir; bu nedenle yerleşim amacına göre
<span>veya<div>gibi stillendirilmesi gerekebilir - 2008'den beri spesifikasyonda yer aldığı için tarayıcı ve ekran okuyucu desteği çok güçlüdür
- React, Vue gibi tüm JS framework'leriyle uyumu çok iyidir
- Ekim 2025 itibarıyla bazı ekran okuyucular güncellemeleri okumayabiliyor; bu durumda
role="status"özniteliğinin ayrıca eklenmesi önerilir
Önemli:
<output>, kullanıcı girdisiyle açık biçimde ilişkili hesaplama sonucu veya eylem sonucu için uygundur.
Genel bildirimlerde (ör. toast mesajları) kullanılmamalı; sistem geri bildirimi için role="status" veya role="alert" tercih edilmelidir.
Gerçek kullanım örnekleri
Hesap makinesi uygulaması
Basit bir hesap makinesi yaparken sonuç gösterimini <output> ile kurmak, ek ARIA rolleri olmadan sonuç değerinin otomatik olarak duyurulması avantajını sağlar.
Slider değeri biçimlendirme (Volvo Cars örneği)
Bir slider ile dahili bir değer (ör. 10000) ayarlanırken, <output> içinde bunun okunması kolay biçimi gösterilir (10,000 miles/year).
Kapsayıcıya role="group" ve ortak bir etiket verilerek erişilebilirlik ve React bileşen kompozisyonu desteklenebilir.
Form doğrulama geri bildirimi
Parola gücü gibi gerçek zamanlı doğrulama mesajları da <output> aracılığıyla yardımcı teknoloji kullanıcılarına anında bildirilebilir.
Sunucu tarafından hesaplanan sonuçları gösterme
Kargo ücreti, vergi, sunucu API'sinden alınan öneri değerleri gibi sunucuda hesaplanan değerler için de <output> uygundur.
Aşağıdaki React örneğinde olduğu gibi, sunucudan gelen tutar alınıp hemen <output> içinde gösterilebilir.
Yerel öğe kullanmanın tatmini
Spesifikasyonun amaçladığı şekilde saf HTML öğelerini doğru kullanmak,
erişilebilirliği artırır ve kodu sadeleştirir.
Aynı zamanda az bilinen <output> etiketinin değerini ve kullanım alanlarını yeniden keşfetmeyi sağlar.
Bu, HTML içinde hâlâ gizli mücevher niteliğinde pek çok öğe bulunduğunu düşündürür.
Son güncelleme: Bob Rudis, bu yazıya uygun bir çalışan örnek sayfa yayımladı
1 yorum
Hacker News görüşleri
<output>öğesinin sorunu, işlevselliğinin yarım uygulanmış olması; bu yüzden pratikte neredeyse işe yaramaz hissettiriyorinputgibi birtypeözelliği olsa çok daha kullanışlı olacağını düşünüyorumSciter'imde
output|typeüzerinde deneme yaptım ve aşağıdaki gibi çeşitli türler ekledimtype="text": varsayılan, biçimlendirme yoktype="number": kullanıcının yereline göre sayı biçimitype="currency": kullanıcının yereline göre para birimi biçimitype="date": tarih olarak göster, saat dilimi dönüşümü yoktype="date-local": yerel tarih biçimi, UTCdatetimedeğerini yerele çevirtype="time": saat olarak göstertype="time-local": yerel saat, değer UTCdatetimeolarak işlenirBu şekilde sunucu kullanıcının yerel ayarını bilmeden de veriyi aktarabilir
Makaledeki ve spes'teki gibi
<output>, uygulamalarda bir hesabın sonucunu veya kullanıcı eyleminin sonucunu göstermek için vardırBurada önemli olan ARIA semantiğidir; sayfa güncellendiğinde ekran okuyucu sonucu okur
<output>içine istediğiniz türde gösterimi kendiniz koyabilirsinizVarsayılan "text"tir; tarih veya saat için
<time>etiketi kullanılabilirŞu anda sadece sayı biçimlendirmeye adanmış bir etiket yok ama
Intlgeldikten sonra buna yönelik istekler arttıÖrneğin:
<output>The new date is <time datetime="2025-10-11">Oct 11</time></output>Yani tüm türleri ele alması gereken şey
<output>değil, türleri ifade etmesi gereken şey HTML'in bütünü olmalıYarım yamalak işlev yüzünden neredeyse işe yaramaz denmesine katılıyorum
2025 itibarıyla hâlâ bu kadar çok böyle örnek olması üzücü
Bunun önemli bir kısmında Safari'nin payı olduğunu düşünüyorum
En uç örnek
<input type="date">Doğrudan prodüksiyonda kullanılabileceği söyleniyor ama tarayıcılar arası sorunlar yüzünden daha çok JS date picker kullanılıyor; bu da tuhaf hissettiriyor
Benim kişisel dileğim,
<output>'un doğrudan<input>'a bağlanıp sonucu göstermesiÖrneğin:
<input type="range" id="example_id" name="example_nm" min="0" max="50"><output name="example_result" for="example_id"></output>Böyleceinputdeğerini doğrudan gösterebilse güzel olurduBir
typebelirteci de eklense, ayrıca::beforeya da::afterCSS içindecontent:ile içeriğin değişmesi de mümkün olsa iyi olurduÇeşitli
<input>türleri için böyle biçimlendirme özellikleri olsa kullanılabilir olur diye düşünüyorumÖzellikle
type="tel"gibi girdileri şık biçimde formatlayıp gösterebilmek kullanışlı olurdu'checkbox, color, date, datetime-local, file, month, number, radio, range, tel, time, url, week'gibi türlerin hepsinde işe yarayabilirMetin türleri de bazı koşullarda yararlı olabilir
Bir de
for=""özelliğinin daha fazla rol üstlenmesini isterdimŞu anda örneklerin çoğu bunu
<output name="result"><form oninput="result.value=...">gibi dolaylı biçimde kullanıyor<output>için<input>ile simetrik şekilde türler düşünmek yanlış yaklaşımoutput, girdi gibi tipli bir değer değil; sayfada içeriği değişen bir kapsayıcı kavramıBen şu biçimi tercih ederim
<output for=input><!-- özel time-locale bileşeni yerleştir --><time is=time-locale datetime=2001-02-03>2001-02-03</time></output>Bu bileşen yerel ayara göre değeri değiştirebilse iyi olurduHTML/CSS ile sahte içerik üretmek birçok soruna yol açmaya açık
Örneğin CSS
::before/:afterile enjekte edilen şeyi kopyalarken sorun çıkması ya da.innerTextile gerçek iç metin arasındaki fark gibiElbette bunlarla ilgili kararlar vermek gerekir ama bir etikete fazla işlev yüklenirse sonunda sadece o etiket için yazılmış bir DSL'ye dönüşür
Değerin türü (mutlak/göreli), eşlik eden veri (para birimi türü vb.) derken iş HTML işlemenin bir parçası hâline gelir ve JS ile esnek biçimde değiştirmek zorlaşır
<output>? Ben de hiç kullanmadımBugün ilk kez öğrendim ve TIL listeme ekledim
GitHub public repo'larında arayınca da neredeyse hiç çıkmamasının sebebi, kimse öğretmezse kimsenin kullanmaması
Buradan aklıma gelen şu: LLM'ler kod üretirken bu etiketi gerçekten kullanıyor mu, yoksa hiç öğrenmemiş mi?
Ben de AI'ın dokümanları (spec) okumamasından endişeliyim
Yeni bir W3C spec'i çıksa bile çoğu kişi sadece "vibe coding" yaparsa ne olacak?
AI güncel spec'leri yansıtmak yerine eski kod kalıplarını tekrar tekrar üretirse, spec güncellemelerinin yayılması bugün olduğundan bile zor olabilir
Claude bana kod üretirken
<output>etiketini ilk kez orada fark ettimLLM'ler standart belgeleri doğrudan okumaz; mevcut projelerden elde ettikleri devasa veri içindeki istatistiksel örüntülere göre kod üretirler
Gerçek kodda bu etiket neredeyse hiç kullanılmıyorsa, LLM çıktısında da neredeyse hiç görünmez
7 Ekim 2025 güncellemesi: Bazı ekran okuyucular hâlâ
<output>etiketindeki güncellemeleri algılamıyor, bu yüzden bir süre daharoleözelliğini açıkça kullanmak daha iyi olabilir:<output role="status">17 yıllık bu eski etiketin desteğinin iyileşmesini beklemekten başka çare olup olmadığını merak ediyorum
Windows ortamında NVDA deposuna issue açarsanız genelde oldukça iyi ilgileniyorlar
https://github.com/nvaccess/nvda
17 yıllık bir standart olmasına rağmen ekran okuyucuların etiketi yok sayması sorununu düzeltmek için çaba gerekiyor
Bunun açıkça ekran okuyucu tarafının sorunu olduğunu düşünüyorum
Birkaç frontend web erişilebilirliği dersi aldım ama
<output>etiketini bir kez bile görmedimBu faydalı bilgiyi paylaştığın için teşekkürler
<output>da<label>gibifor=""özelliğine sahip; bunun ekran okuyucu kullanıcıları için gerçekten anlamlı olup olmadığını merak ediyorumMevcut web'de neredeyse hiç kullanılmadığı için ekran okuyucu kullanıcıları da buna alışık olmayabilir ama sonuçta bu muhtemelen yazılımın UX'ine bağlıdır
Bunun yardımcı teknolojilere düzgün biçimde açılıp açılmadığından emin değilim
Şu an bilgisayar başında değilim, o yüzden hemen test edemem
Kişisel olarak
outputdeğerini açıkça etiketlemenin çok daha iyi olduğunu düşünüyorumÖrneğin:
<label for="output">Total</label><output id="output">£123.45</output>Böyle olunca ekran okuyucu bunu "Total, £123.45" diye okur ve bağlamı anlamak kolaylaşırSemantik HTML'in yeni başlayanlar için bir tuzak olduğunu düşünüyorum
Çok kafa yormadan
aria-livegibi gerçekten çalışan çözümler kullanmak gerekBöyle öğelerle eğlenebilirsiniz ama geliştirici olarak sorumluluğumuz, kullanıcı için gerçekten çalışan bir yapı sunmak
Yaygın kullanılmayan semantik etiketlerdense, tarayıcıların ve mevcut ekosistemin beklediği şeyleri kullanmak daha doğru
EPUB ile çok çalışmış biri olarak semantik sayfa yapısının genel olarak çok daha kolay ve iyi olduğunu söyleyebilirim
<output>'un web sayfası erişilebilirliği için, özellikle de ekran okuyucu desteği için bir etiket olduğunu öğrenmiş oldum"ARIA", erişilebilirliği artıran HTML özellikleri kümesi olan Accessible Rich Internet Applications'ın kısaltmasıdır
Bu, React'in altında JavaScript'in ne olduğunu açıklamaya benziyor
Erişilebilirliğin temellerini bilmemek utanılacak bir şey değil ama bu yüzden okuyucunun bilmemesine şaşırır gibi tepki vermek de gereksiz bence
MDN'de ilgili belgeler gayet iyi derlenmiş
(Makalenin yazarı da aynı rehberi vurguluyor)
"ARIA kullanmanın birinci kuralı, gerekli semantik ve davranışı zaten sağlayan yerel bir HTML öğesi veya özelliği varsa, onu yeniden kullanmak için ARIA role, state veya property eklemeye çalışmak yerine doğrudan o yerel öğeyi ya da özelliği kullanmaktır"
https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA
Açıklama için teşekkürler
Aslında ben de Google'da aratabilirdim ama bulanık bir cumartesi öğleden sonrasında senin yorumunu okumak daha rahattı
Tekrar teşekkürler
Bu makalenin başlığını görünce
<output>'un yanlış kullanıldığını sanmıştım ama okuyunca gerçekten şaşırdım(Özellikle en üstteki şüpheli GenAI hesap makinesi görselini görünce daha da büyük bir fiyasko beklemiştim, ama içerik o kadar iyiydi ki hepsini okuyup bitirdikten sonra ancak tekrar o görseli hatırladım)
O şüpheli GenAI hesap makinesi görseli çok komik
Toplama, çarpma ve bölme var ama çıkarma yok
O şüpheli GenAI hesap makinesi görseli hakkında konuşacak olursak
AI'dan önce insanların yaptığı daha da özensiz görselleri unutuyor gibiyiz
AI sayesinde artık en azından utanılmayacak kadar düzgün görselleri anında üretebiliyoruz
Bu örnekteyse (öznel olarak) vintage retro IT havasını iyi verdiği için anlamlı buluyorum
Her AI kullanımı profesyonel sanatçıların işinin yerine geçmek zorunda değil
Böyle şeyler gördükçe hoşuma gidiyor
Bir başka ipucu da, form adlarını backend veri yapısıyla uyumlu verecek şekilde isimlendirirseniz JS ile değer çekme veya veriyi yeniden şekillendirme ihtiyacı azalır
Örneğin şöyle:
<input name=“entity[id]”><input name=“entity[relation]”>Böylece JS ile ayrıca uğraşıp veri oluşturmaya gerek kalmadan sadece formu göndererek doğrudan istediğiniz veri elde edilir