Apakah ada cara di CSS untuk memberikan garis besar pada teks dengan warna yang berbeda? Saya ingin menyorot beberapa bagian teks saya untuk membuatnya lebih intuitif - seperti nama, tautan, dll. Mengubah warna tautan dll. Sudah umum saat ini, jadi saya ingin sesuatu yang baru.
329
Jawaban:
Ada properti webkit eksperimental yang disebut
text-stroke
dalam CSS3, saya sudah mencoba untuk membuatnya bekerja selama beberapa waktu tetapi sejauh ini tidak berhasil.Apa yang saya lakukan sebagai gantinya adalah menggunakan
text-shadow
properti yang sudah didukung (didukung di Chrome, Firefox, Opera, dan IE 9 saya percaya).Gunakan empat bayangan untuk mensimulasikan teks yang dielus:
Saya telah membuat demo untuk Anda di sini
Dan contoh melayang tersedia di sini
Seperti yang disebutkan Jason C dalam komentar,
text-shadow
properti CSS sekarang didukung oleh semua browser utama, dengan pengecualian Opera Mini. Di mana solusi ini akan bekerja untuk kompatibilitas mundur (tidak benar-benar masalah tentang browser yang memperbarui otomatis) Saya percayatext-stroke
CSS harus digunakan.sumber
text-shadow
hingga IE10. Anehnya, IE9 mendukungbox-shadow
tetapi tidaktext-shadow
.text-shadow
. Tampaknya saat ini (3 tahun setelah jawaban ini diposting) itu didukung oleh semua browser utama dengan pengecualian Opera Mini, yang menunjukkan "dukungan parsial" (mengabaikanblur-radius
).text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;
text-shadow
dukungan, bukantext-stroke
. Yang hanya didukung oleh webkit saat ini.Sunting:
text-stroke
sekarang cukup matang dan diterapkan di sebagian besar browser . Lebih mudah, lebih tajam, dan lebih presisi. Jika audiens browser Anda dapat mendukungnya, Anda sekarang harus menggunakannyatext-stroke
terlebih dahulutext-shadow
.Anda dapat dan harus melakukan ini hanya dengan
text-shadow
efek tanpa offset:Mengapa? Ketika Anda mengimbangi beberapa efek bayangan, Anda akan mulai melihat sudut yang tidak rata dan bergerigi:
Memiliki efek bayangan teks hanya dalam satu posisi menghilangkan offset, artinya Jika Anda merasa itu terlalu tipis dan lebih memilih garis yang lebih gelap, tidak masalah - Anda - dapat mengulangi efek yang sama (menjaga posisi dan blur yang sama), beberapa kali. Seperti itu:
Berikut ini contoh hanya satu efek (atas), dan efek yang sama diulang 14 kali (bawah):
Perhatikan juga: Karena garisnya menjadi sangat tipis, sebaiknya matikan rendering sub-piksel
-webkit-font-smoothing: antialiased
.sumber
font-smoothing
opsinya, itu sangat meningkatkan output di chrome!text-stroke
tidak sama dengan garis besar viatext-shadow
.text-stroke
tidak memiliki opsi untuk membuat garis besar muncul di luar teks yang berarti garis besar mengalir ke teks sehingga sering terlihat sangat mengerikan. Dengan kata laintext-stroke
bukan penggantitext-shadow
untuk garis besarMudah! SVG untuk menyelamatkan.
Ini adalah metode yang disederhanakan:
Ini demo yang lebih kompleks .
sumber
Anda dapat mencoba menumpuk beberapa bayangan buram sampai bayangan terlihat seperti goresan, seperti:
Berikut biola: http://jsfiddle.net/GGUYY/
Saya menyebutkannya kalau-kalau ada yang tertarik, meskipun saya tidak akan menyebutnya solusi karena gagal dalam berbagai cara:
sumber
Saya mencari solusi teks-stroke lintas-browser yang berfungsi ketika overlay pada gambar latar belakang. pikir saya punya solusi untuk ini yang tidak melibatkan mark-up tambahan, js dan bekerja di IE7-9 (saya belum menguji 6), dan tidak menyebabkan masalah alias.
Ini adalah kombinasi dari menggunakan CSS3 text-shadow, yang memiliki dukungan baik kecuali IE ( http://caniuse.com/#search=text-shadow ), kemudian menggunakan kombinasi filter untuk IE. Dukungan teks-stroke CSS3 saat ini buruk.
Filter IE
Filter cahaya ( http://www.impressivewebs.com/css3-text-shadow-ie/ ) tampak mengerikan, jadi saya tidak menggunakannya.
Jawaban David Hewitt melibatkan penambahan filter dropshadow dalam kombinasi arah. Sayangnya ClearType dihapus jadi kami berakhir dengan teks dengan alias buruk.
Saya kemudian menggabungkan beberapa elemen yang disarankan useragentman dengan filter dropshadow.
Menyatukannya
Contoh ini akan menjadi teks hitam dengan goresan putih. Saya menggunakan kelas html bersyarat dengan cara menargetkan IE ( http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ ).
sumber
filter: glow(color=white,strength=1);
Hanya menambahkan jawaban ini. "Membelai" teks tidak sama dengan "Menguraikan"
Garis besar tampak hebat. Membelai terlihat mengerikan.
Solusi SVG yang terdaftar di tempat lain memiliki masalah yang sama. Tentu Anda ingin garis besar Anda perlu menempatkan teks dua kali. Sekali dielus dan lagi tidak dielus.
Membelai BUKAN menguraikan
PS: Saya ingin tahu bagaimana membuat SVG menjadi ukuran yang benar dari sembarang teks. Saya merasa cukup rumit melibatkan pembuatan svg, menanyakannya dengan javascript untuk mendapatkan luasan kemudian menerapkan hasilnya. Jika ada cara non-js mudah saya ingin tahu.
sumber
Saya mendapat hasil yang lebih baik dengan 6 bayangan berbeda:
sumber
sumber
Mixin ini untuk SASS akan memberikan hasil yang halus, menggunakan 8-axis:
Dan CSS normal:
sumber
Bekerja dengan sapuan yang lebih tebal menjadi sedikit berantakan, jika Anda senang mencoba ini, tidak cocok dan tergantung pada berat stroke menghasilkan css yang cukup banyak.
sumber
Beberapa bayangan teks ..
Sesuatu seperti ini:
Demo: http://jsfiddle.net/punosound/gv6zs58m/
sumber
Text Shadow Generator
Ada banyak jawaban bagus di sini. Akan muncul text-shadow mungkin cara yang paling dapat diandalkan untuk melakukan ini. Saya tidak akan menjelaskan secara terperinci tentang cara melakukan ini dengan text-shadow karena yang lain sudah melakukannya, tetapi ide dasarnya adalah Anda membuat beberapa bayangan teks di sekitar elemen teks. Semakin besar garis teks, semakin banyak bayangan teks yang Anda butuhkan.
Semua jawaban yang dikirimkan (pada posting ini) memberikan solusi statis untuk bayangan teks. Saya telah mengambil pendekatan yang berbeda dan telah menulis JSFiddle ini yang menerima nilai warna garis, kabur, dan lebar sebagai input dan menghasilkan properti bayangan teks yang sesuai untuk elemen Anda. Cukup isi bagian yang kosong, periksa pratinjau, dan klik untuk menyalin css dan rekatkan ke lembar gaya Anda.
Lampiran yang tidak perlu
Rupanya, jawaban yang menyertakan tautan ke JSFiddle tidak dapat diposkan kecuali mereka juga mengandung kode. Anda dapat sepenuhnya mengabaikan lampiran ini jika Anda mau. Ini adalah JavaScript dari biola saya yang menghasilkan properti teks-bayangan. Harap dicatat bahwa Anda tidak perlu menerapkan kode ini dalam karya Anda sendiri:
sumber
Saya memiliki masalah ini juga, dan
text-shadow
itu bukan pilihan karena sudut akan terlihat buruk (kecuali saya memiliki banyak bayangan), dan saya tidak ingin ada blur, oleh karena itu satu-satunya pilihan saya adalah melakukan hal berikut: 2 div, dan untuk div latar belakang, letakkan-webkit-text-stroke
di atasnya, yang kemudian memungkinkan untuk garis besar yang Anda inginkan.Dengan menggunakan ini, saya dapat mencapai garis keluar , karena
stroke-width
metode itu bukan pilihan jika Anda ingin teks Anda tetap terbaca dengan garis besar yang sangat besar (karena denganstroke-width
garis besar akan mulai di dalam huruf yang membuatnya tidak terbaca ketika lebar menjadi lebih besar dari surat-surat.Catatan: alasan saya membutuhkan garis besar seperti itu adalah saya meniru label jalan di "google maps" dan saya ingin lingkaran putih tebal di sekitar teks. Solusi ini bekerja dengan sempurna untuk saya.
Berikut ini biola yang menunjukkan solusi ini
sumber
Ini adalah file CSS harap Anda akan mendapatkan apa yang Anda inginkan
sumber