Bütünleşik Biçembentler, 2. Aşama | ||
---|---|---|
Önceki | Yukarı | Sonraki |
Sayfalı ortam (kağıt, saydam, bilgisayar ekranında gösterilen sayfalar, vb.), belge içeriğinin kesikli sayfalara ayrıldığı sürekli ortamdan farklıdır. Sayfalara bölünmeyi sağlamak için BB2 görsel biçimleme modelini şöyle genişletir:
sayfa çerçevesi, çerçeveli modeli genişleterek yazarlara sayfa boyutu, kenar boşlukları, vb. belirtme imkanı sağlar.
Sayfa modeli, sayfalara bölünmeyi sağlamak adına görsel biçimleme modelini genişletir.
BB2 sayfa modeli bir belgenin sonsuz genişlikte ve yükseklikteki dörtgen bir alanın (sayfa çerçevesi) içinde nasıl biçimleneceğini belirtir. Sayfa çerçevesi, belgenin eninde sonunda yer aldığı gerçek yaprağın (kağıt, saydam, vs.) karşılığı olmak zorunda değildir. BB sayfa modeli sayfa çerçevesinde biçimleme belirtir, fakat sayfa çerçevesini yaprağa aktarmak kullanıcı arayüzünün sorumluluğundadır. Bazı aktarım olasılıkları:
Her yaprağa bir sayfa çerçevesi aktarımı (tek taraflı baskı).
Aynı yaprağın iki tarafına iki sayfa çerçevesi aktarımı (çift taraflı baskı).
Bir yaprağa çok sayıda sayfa çerçevesi aktarımı.
Büyük bir sayfa çerçevesinin birden fazla yaprağa aktarımı.
Forma imleme. Forma imleme, kitap formalarını işaretlemek için yapılan bir işlem olup, forma imi forma tamamlandıktan sonra formanın uygun bir yerinde görünür.
Bir belgenin çeşitli baskı tablalarına basılması.
Bir dosyaya çıktılama.
BB2, kullanıcı arayüzlerinin sayfa çerçevelerini yapraklara nasıl aktaracağını belirtmese de, hedef yaprağın boyutları ve baskı yönü hakkında birşeyler söyleyecek mekanizmaları içerir.
@page
kuralıBir sayfa çerçevesi iki alan içeren bir dikdörtgen alandır:
Sayfa alanı. Sayfa alanı sayfanın üzerine serildiği çerçeveleri içerir. Sayfa alanının kenarları sayfa kesimleri arasında yer alan sayfa düzenininin ilk taşıyıcı bloku olarak davranır.
Biçembent yazarları bir sayfa çerçevesinin boyutlarını, baskı yönünü, dış boşluklarını, vs.yi bir @page
kuralı içinde belirtirler. Bir @page
kuralı sırayla @page
anahtar sözcüğü, bir sayfa seçici (arada boşluk olmaksızın ardından isteğe bağlı bir sayfa sözde sınıfı gelebilir) ve (sayfa bağlamı da denen) bir bildirim blokundan oluşur.
Bir sayfa seçici bildirimlerin hangi sayfalara uygulanacağını belirtir. BB2'de, sayfa seçiciler ilk sayfa, bütün sol sayfalar, bütün sağ sayfalar veya belli bir ismi olan bir sayfa için atanabilirler.
Sayfa çerçevesinin boyutları size
nitelikleri ile ayarlanır. Sayfa alanının boyutları sayfa çerçevesinden dış boşluk alanı çıkarılarak bulunur.
@page
kuralı, 8.5 x 11 inçlik sayfa çerçevesi ile sayfa alanı arasında tüm kenarlarda 2 cm.lik dış boşluk oluşturur:@page { size: 8.5in 11in; margin: 2cm }
Bir @page
kuralı içindeki bir marks
niteliği sayfa çerçevesi için kesme ve hizalama imlerini belirtir.
Dış boşluk nitelikleri
(margin-top
, margin-right
, margin-bottom
, margin-left
ve margin
) sayfa bağlamına uygulanır. Aşağıdaki şekilde yaprak, sayfa çerçevesi ve sayfa dış boşlukları arasındaki ilişki resmedilmiştir:
Sayfa alanının aşağı ve yukarısındaki çerçeve dış boşluklarının hesaplanmış değeri '0'dır.
Sayfa bağlamının yazıtipleriyle bir bağı yoktur, dolayısıyla em ve ex birimlerine izin verilmez. Dış boşluk niteliklerinin yüzdelik değerleri sayfa çerçevesinin boyutlarına görelidir; sol ve sağ dış boşluklar için sayfa çerçevesinin genişliği ölçü alınırken, alt ve üst dış boşluklar için sayfa çerçevesinin yüksekliği ölçü alınır. BB2 nitelikleri ile ilgili diğer tüm birimlere izin verilmiştir.
Negatif dış boşluk değerleri (hem sayfa çerçevesi hem de elemanlar üzerinde) veya mutlak konumlama nedeniyle içerik sayfa çerçevesinin dışına taşabilir, fakat bu içerik kullanıcı arayüzü, yazıcı veya belki de bir kağıt kesici tarafından "kesilebilir".
size
niteliğisize | NİTELİK |
Değer: | uzunluk{1,2} | auto | portrait | landscape | inherit |
İlk değer: | auto |
Uygulama yeri: | sayfa bağlamı |
Kalıtsallık: | Elverişsiz |
Yüzdelik değerler: | Elverişsiz |
Ortam: | görsel, sayfalı |
Bu nitelik sayfa çerçevesinin boyutlarını ve baskı yönünü belirtir.
Bir sayfa çerçevesinin boyutları göreli (ölçeklenebilir) ya da mutlak (sabit boyut) olabilir. Göreli sayfa çerçeveleri, kullanıcı arayüzlerine belgeyi ölçekleme ve hedef boyutu en iyi şekilde kullanma imkanı verir.
Bir göreli sayfa çerçevesi size
niteliğinin üç değeri ile oluşturulur (Değerlerin Türkçeleri köşeli ayraç içinde yanlarına yazılmıştır):
margin
niteliğinin yüzdelik değerleri hedef boyuta göreli olarak belirtilmiştir. Yani, hedef yaprağın boyutları 21.0cm x 29.7cm (yani A4) ise dış boşluklar 2.10cm ve 2.97cm olur.@page { size: auto; /* auto değeri zaten ilk değerdir */ margin: 10%; }
size
niteliği için uzunluk değerleri bir mutlak sayfa çerçevesi oluşturur. Eğer sadece bir uzunluk değeri belirtilmişse, bu değeri sayfa çerçevesinin hem genişliğine hem de yüksekliğine uygular. Sayfa çerçevesi ilk taşıyıcı blok olduğundan size
niteliğinde yüzdelik değerlere izin verilmez.
@page { size: 8.5in 11in; /* genişlik ve yükseklik */ }
Bu örnekte sayfa çerçevesinin genişliği 8.5inç, yüksekliği ise 11 inç olup hedef yaprak boyutlarının 8.5"x11" veya daha büyük olması gerekir.
Kullanıcı arayüzleri sayfa çerçevesinin yaprağa aktarımının denetimini kullanıcılarına verebilir (mutlak sayfa çerçevesinin döndürülmesi gibi).
Bir sayfa çerçevesi hedef yaprağa sığmadığı takdirde kullanıcı arayüzü şunlardan birini yapmayı seçebilir:
Kullanıcı arayüzlerinin bu işlemleri yerine getirmeden önce kullanıcıya sorması gerekir.
Sayfa çerçevesi hedef boyuttan küçük olduğu takdirde, kullanıcı arayüzü sayfa çerçevesini yaprağın herhangi bir yerine yerleştirmekte özgürdür. Bununla birlikte, çift taraflı basılan sayfaların hizalanması ve yaprağın kenarına yakın basılan bilgilerin ister istemez kaybından kaçınmak için sayfa çerçevesinin yaprağa ortalanması önerilir.
marks
niteliğimarks | NİTELİK |
Değer: | [ crop || cross ] | none | inherit |
İlk değer: | none |
Uygulama yeri: | sayfa bağlamı |
Kalıtsallık: | Elverişsiz |
Yüzdelik değerler: | Elverişsiz |
Ortam: | görsel, sayfalı |
Yüksek nitelikli baskıda, sayfa çerçevesine çoğunlukla imler eklenir. Bu nitelik kesme ve/veya hizalama imlerinin sayfa çerçevesi kenarlarının hemen dışında oluşturulup oluşturulmayacağını belirtir.
Kesme imleri sayfanın nerede kesileceğini belirtir. Hizalama imleri ise yaprakları hizalamakta kullanılır.
İmler sadece mutlak sayfa çerçevelerinde bulunurlar. (size
niteliğine bakınız). Göreli sayfa çerçevelerinde, sayfa çerçevesi hedefle hizalanır ve imler basılabilir alanın dışına konur.
İmlerin boyutları, biçemi ve konumu kullanıcı arayüzlerine bağlıdır.
Belgeler çift taraflı basılırken, sol ve sağ sayfaların sayfa çerçeveleri farklı olacaktır. Bu, sayfa bağlamında belirtilen BB sözde sınıfları ile sağlanabilir.
Kullanıcı arayüzleri tarafından tüm sayfalar özdevinimli olarak ya :left
ya da :right
sözde sınıfı olarak sınıflandırılır.
@page :left { margin-left: 4cm; margin-right: 3cm; } @page :right { margin-left: 3cm; margin-right: 4cm; }
Eğer sol ve sağ sayfalar için ayrı bildirimler yapılmışsa, kullanıcı arayüzleri sayfa çerçevelerini sağ ve sol yapraklara aktarmıyor (yazıcı sadece tek taraflı baskı yapıyor olabilir) olsa bile bu bildirimleri dikkate almak zorundadır.
Biçembent yazarları bir belgenin ilk sayfası için :first
sözde sınıfı ile ayrıca biçem belirtebilirler:
@page { margin: 2cm } /* Tüm dış boşluklar 2cm */ @page :first { /* Baş sayfa için */ margin-top: 10cm /* Üst dış boşluk 10cm */ }
Belgenin ilk sayfasının :left
veya :right
sınıfından olması, belgenin ana yazma yönüne bağlı olup bu belgenin kapsamında değildir. Bununla birlikte, bir sol veya sağ ilk sayfa oluşturmaya zorlamak için biçembent yazarları ilk üretilen sayfa çerçevesinden önce bir sayfa kesmesi yerleştirebilirler. (örn, HTML'de bu <body>
elemanı için belirtilir.)
:left
veya :right
@page
kuralında belirtilmiş nitelikler, hiçbir sınıf belirtilmemiş @page
kuralının niteliklerini geçersiz kılarlar. :first
@page
kuralında belirtilmiş nitelikler ise :left
veya :right
@page
kuralında belirtilmiş nitelikleri geçersiz bırakırlar.
:left
veya :right
sözde sınıflarının belirtilmiş olması belgeyi tek veya çift taraflı basılır yapmaz ve bu konu bu belgenin kapsamı dışındadır.İçerik sayfa modeline göre biçimlenirken içeriğin bir kısmı sayfa çerçevesinin dışında kalabilir. Örneğin, white-space
niteliğinin değeri olarak pre belirtilmiş bir eleman sayfa çerçevesinden daha geniş bir çerçeve üretebilir. Ayrıca, çerçeveler mutlak olarak konumlandıklarında münasebetsiz yerlerde bitebilirler. Örneğin resimler sayfa çerçevesinin kenarına veya 100.000 inç aşağısına yerleştirilmeye çalışılabilir.
Böyle elemanların gerektiği gibi biçimlenmesi için bir belirtim, bu belgenin kapsamı dışındadır. Yine de yazarlara ve kullanıcı arayüzlerine sayfa çerçevesinin dışında kalan içerikle ilgili olarak aşağıdaki genel ilkelere uymaları önerilir:
Sayfa çerçevesinin çok az dışında içeriğin yaprağın kenarına kadar basılmasına (sayfanın kanamasına) izin verilmelidir.
Elemanların konumlanmasına uyum sağlamak için kullanıcı arayüzlerinin büyük miktarda boş sayfa basmaktan kaçınması gerekir (100 boş sayfa istemezsiniz, herhalde). Yine de az miktarda boş sayfa üretmeye, page-break-before
ve page-break-after
niteliklerinin left ve right değerlerine uyum sağlamak için izin verilebilir.
Yazarların oluşmasını önlemek için elemanları alakasız yerlere konumlamaması gerekir. Bunun yerine şunlar yapılabilir:
display
niteliğine none değeri atanabilir.visibility
niteliği kullanılabilir.Kullanıcı arayüzleri sayfa çerçevesi dışına konumlanan çerçeveleri çeşitli yollarla işleme sokabilir; onları iptal edebilir veya belge sonunda onlar için sayfa çerçeveleri oluşturabilirler.
Aşağıdaki bölümlerde BB2'de sayfa biçimleme açıklanmaktadır. Beş nitelik kullanıcı arayüzlerinin nerelerde sayfa kesebileceğini veya kesmesi gerektiğini ve kalan içeriğin hangi sayfadan devam edeceğini belirler. Her sayfa kesmesi geçerli sayfa çerçevesinin sonlandırır ve belge ağacının kalan parçalarının yeni bir sayfa çerçevesine yerleştirilmeye devam edilmesine sebep olur.
page-break-before
, page-break-after
, page-break-inside
Önden sayfa kesme:
page-break-before | NİTELİK |
Değer: | auto | always | avoid | left | right | inherit |
İlk değer: | auto |
Uygulama yeri: | blok seviyesinden elemanlar |
Kalıtsallık: | hayır |
Yüzdelik değerler: | Elverişsiz |
Ortam: | görsel, sayfalı |
Sondan sayfa kesme:
page-break-after | NİTELİK |
Değer: | auto | always | avoid | left | right | inherit |
İlk değer: | auto |
Uygulama yeri: | blok seviyesinden elemanlar |
Kalıtsallık: | hayır |
Yüzdelik değerler: | Elverişsiz |
Ortam: | görsel, sayfalı |
İçinden sayfa kesme:
page-break-inside | NİTELİK |
Değer: | auto | avoid | inherit |
İlk değer: | auto |
Uygulama yeri: | blok seviyesinden elemanlar |
Kalıtsallık: | evet |
Yüzdelik değerler: | Elverişsiz |
Ortam: | görsel, sayfalı |
Bu niteliklerin değerlerinin anlamları (Değerlerin Türkçeleri köşeli ayraç içinde yanlarına yazılmıştır):
Olası bir sayfa kesme yeri genellikle ebeveyn elemanın page-break-inside
, önceki elemanın page-break-after
ve sonraki elemanın page-break-before
niteliğinin etkisi altındadır. Bu nitelikler auto dışında değerlere sahip oldukları takdirde, always, left ve right değerleri avoid değerine göre öncelikli olurlar. Bu niteliklerin nasıl bir sayfa kesmesini zorlayabileceği veya bastırabileceği ile ilgili kesin kurallar için İzin verilen sayfa kesmeleri bölümüne bakınız.
page
niteliğipage | NİTELİK |
Değer: | betimleyici | auto | inherit |
İlk değer: | auto |
Uygulama yeri: | blok seviyesinden elemanlar |
Kalıtsallık: | evet |
Yüzdelik değerler: | Elverişsiz |
Ortam: | görsel, sayfalı |
page
niteliği bir elemanın gösterilmesi için belli bir sayfa türü belirtmek için kullanılır.
@page rotated {size: landscape} table {page: rotated; page-break-before: right}
page
niteliği şöyle çalışır: satıriçi içerikli bir blok çerçevesi, önceki satıriçi içerikli bir blok çerçevesinden farklı bir page
niteliğine sahipse, bunlar arasına bir veya iki sayfa kesmesi yerleştirilir ve kesmeden sonraki çerçeveler isimli türde bir sayfa çerçevesinde oluşturulur. Aşağıda Zorlanmış sayfa kesmeleri bölümüne bakınız.
<div>
üzerinde atanmış olmasına rağmen hiçbirinde "narrow" sayfa türü kullanılmamaktadır:@page narrow {size: 9cm 18cm} @page rotated {size: landscape} div {page: narrow} TABLE {page: rotated}
belge:
<div> <TABLE>...</TABLE> <TABLE>...</TABLE> </div>
orphans
, widows
Sayfada tutulacak satır sayısı:
orphans | NİTELİK |
Değer: | tamsayı | inherit |
İlk değer: | 2 |
Uygulama yeri: | blok seviyesinden elemanlar |
Kalıtsallık: | evet |
Yüzdelik değerler: | Elverişsiz |
Ortam: | görsel, sayfalı |
Sonraki sayfaya aktarılacak satır sayısı:
widows | NİTELİK |
Değer: | tamsayı | inherit |
İlk değer: | 2 |
Uygulama yeri: | blok seviyesinden elemanlar |
Kalıtsallık: | evet |
Yüzdelik değerler: | Elverişsiz |
Ortam: | görsel, sayfalı |
orphans
niteliği bir sayfanın dibinde kalması gereken olası en az sayıda satırdan oluşan bir paragraf belirtir. widows
niteliği ise bir sayfanın tepesinde kalması gereken olası en az sayıda satırdan oluşan bir paragraf belirtir. Bunların sayfa kesmelerinde nasıl kullanıldıkları aşağıda örneklerle açıklanmıştır.
Paragraf biçimleme hakkında bilgi için lütfen satır çerçevelerinin açıklandığı bölüme bakınız.
Normal akışta sayfa kesmeleri aşağıdaki belirtilen yerlerde yer alabilir:
Blok çerçeveleri arasında düşey dış boşluklarda. Bir sayfa kesmesi böyle bir yerde yer alırsa, ilgili margin-top
ve margin-bottom
niteliklerinin hesaplanmış değerleri '0'a ayarlanır.
Bir blok çerçevesi içindeki satır çerçeveleri arasında.
Bu kesmeler aşağıdaki kurallara konu olurlar:
Kural A: Dış boşluklarla bütünleşen çerçeveyi üreten öğelerin page-break-after
ve page-break-before
niteliklerinden en az birinin always, left, veya right değerinde olması veya tümünün auto değerinde olması durumunda (1)'de sayfa kesmeye izin verilir.
Kural B: Bununla birlikte, bunların hepsi auto ise ve tüm elemanların en yakın ortak üstseli, değeri avoid olan bir page-break-inside
niteliğine sahipse, burada kesmeye izin verilmez.
Kural C: En yakın blok çerçevesinin başlangıcı ile olası kesme arasındaki satır çerçevelerinin sayısı orphans
değerine eşit veya büyükse ise veya olası
kesmeyle en yakın blok çerçevesinin sonu arasındaki satır çerçevelerinin
sayısı widows
değerine eşit veya büyükse (2)'de kesmeye izin verilir.
Kural D: Ek olarak, (2)'de kesmeye sadece page-break-inside
niteliğinin değeri auto ise izin verilir.
Eğer yukarıdakiler sayfa çerçevelerinden taşan içeriği tutmak için yeterli kesme noktaları sağlamazsa, B ve D kuralları ek kesme noktalarını bulmak için kaldırılırlar.
Eğer hala yeterli sayfa kesmesi sağlanamıyorsa, daha fazla kesme noktası bulmak için A ve C kuralları da kaldırılır.
Sayfa kesmeleri mutlak olarak konumlanmış çerçevelerin içinde bulunamazlar.
Bir sayfa kesmesinin (1)'de yer alması için, dış boşluklarla bütünleşen çerçeveyi üreten tüm elemanların page-break-after
ve page-break-before
nitelikleri arasından en az birinin always, left veya right değerini taşıması gerekir.
Bir sayfa kesmesinin (1)'de yer alması için, ayrıca, dış boşluğun üstündeki son ve altındaki ilk satır çerçevesinin page
nitelikleri aynı değere sahip olmamalıdır.
BB2 izin verilen sayfa kesmelerinden hangisinin kullanılması gerektiğini tanımlamaz; BB2 kullanıcı arayüzlerinin olası kesme noktalarında kesme yapmasını/yapmamasını tümden yasaklamaz. Fakat kullanıcı arayüzlerinin aşağıdaki ampirik davranışları gözlemlemeleri önerilir (bazıları aykırı gelebilir):
widows
kısıtı ile çelişmemelidir, yani sonraki sayfaya geçen kısım tam olarak iki satır içermelidir.Şimdi orphans
için '10', widows
için '20' değerlerinin verilmiş olduğunu ve sayfanın altında 8 satırlık yer kaldığını varsayalım:
orphans
kısıtı ile çelişeceği için) paragraf bölünmeden sonraki sayfaya aktarılmalıdır.Sayfa bağlamındaki bildirimler normal BB2 bildirimleri gibi bütünleşime itaat ederler.
@page { margin-left: 3cm; } @page :left { margin-left: 4cm; }
Sözde sınıf seçicilerin daha yüksek özgülüğü nedeniyle sol sayfaların sol dış boşluğu '4cm' ve diğer tüm sayfalarınki ise (yani sağ sayfaların) '3cm' olacaktır.
Önceki | Yukarı | Sonraki |
Üretilen içerik, özdevinimli numaralama ve listeler | Bir Linux Kitaplığı Sayfası | Renkler ve artalanlar |