Menata elemen tombol tua yang baik

Tombol adalah salah satu elemen yang paling sering digunakan pada halaman web. Tag <button></button>dapat digunakan untuk memulai proses seperti output data, membuka jendela modal, mengirimkan formulir, dan sebagainya. Dalam materi, terjemahan yang kami terbitkan, kami akan berbicara tentang seluk-beluk penataan elemen buttondan cara mendesain tombol sehingga mereka bekerja dengan baik di browser apa pun. Selain itu, gaya tombol yang paling umum digunakan akan dibahas di sini. Kami akan berbicara di sini tentang beberapa kesulitan yang muncul saat bekerja dengan tombol.



Gaya diterapkan ke tombol default


Mungkin berbicara tentang "gaya standar" tampaknya bagi seseorang untuk menjadi diskusi tentang beberapa hal mendasar, tetapi, sebenarnya, membicarakannya cukup menarik. Ini adalah lembar gaya standar untuk tombol dari agen pengguna Google Chrome.

.c-button {
    -webkit-writing-mode: horizontal-tb !important;
    -webkit-appearance: button;
    border-color: rgb(216, 216, 216) rgb(209, 209, 209) rgb(186, 186, 186);
    border-style: solid;
    border-width: 1px;
    padding: 1px 7px 2px;
    text-rendering: auto;
    color: initial;
    display: inline-block;
    text-align: start;
    margin: 0em;
    font: 400 11px system-ui;
}

Dan inilah tampilan tombol standar ketika output yang tidak mengubah gaya default.


Tombol sederhana yang menerapkan gaya standar.

Pertama, definisikan ulang propertiappearance. Ini digunakan untuk styling khusus untuk platform tertentu. Tampilan tombol dengan pendekatan ini didasarkan pada gaya yang digunakan dalam sistem operasi pengguna.

.c-button {
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
}

Sekarang, setelah mengatur ulang properti appearance, lihat bagaimana tombol terlihat di browser yang berbeda.


Properti tampilan dari tombol-tombol ini tidak diatur.

Selanjutnya, sebelum kita beralih ke gaya, kita perlu mengatur ulang beberapa properti lainnya. Ini -border,border-radius,background.

.c-button {
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  border: 0;
  border-radius: 0;
  background: #ccc;
}


Tombol setelah mengatur ulang properti

Sekarang setelah kami mengatur ulang gaya tombol standar, saatnya untuk melanjutkan. Yaitu, saya ingin berbicara tentang cara mendesain tombol berdasarkan persyaratan untuk desain mereka.

Menata tombol biasa


Mari kita mulai dengan contoh dasar, berbicara tentang menata tombol biasa yang hanya menampilkan teks. Gambar berikut menunjukkan "anatomi" tombol biasa.


Warna teks (Warna Teks), ukuran font (Ukuran Font), latar belakang (Background), sudut pembulatan (Kebulatan), indent (Padding)

.c-button {
  appearance: none;
  border: 0;
  border-radius: 5px;
  background: #4676D7;
  color: #fff;
  padding: 8px 16px;
  font-size: 16px;
}

Memiliki kode CSS di atas, kita bisa mendapatkan tombol yang mirip dengan yang ditunjukkan pada gambar sebelumnya. Setelah gaya dasar tombol diatur, Anda perlu menjaga tampilan tombol di berbagai negara.


Keadaan normal tombol (Normal), mendapatkan fokus (Fokus), mengarahkan mouse di atas tombol (Melayang), menonaktifkan tombol (Dinonaktifkan)

▍Gaya diterapkan pada tombol saat Anda mengarahkan mouse ke atasnya dan saat fokus


Untuk menunjukkan kepada pengguna bahwa penunjuk tetikus berada di atas tombol, penting untuk melengkapi tombol dengan gaya yang dirancang untuk acara ini. Hal yang sama berlaku untuk mengubah tampilan tombol ketika menerima fokus dalam situasi di mana pengguna menggunakan keyboard bekerja dengan halaman. Bahan

ini menunjukkan bahwa penting untuk menambahkan gaya yang diterapkan pada tombol ketika Anda mengarahkan kursor ke atasnya ( hover) dan ketika menerima fokus ( focus).

Ketika gaya hoverditambahkan sebelum gaya focus, semua gaya bekerja dengan benar. Masalahnya muncul ketika gaya focusditambahkan sebelum gaya hover. Ketika sebuah elemen diklik dengan mouse, style focustidak memanifestasikan dirinya dengan cara apa pun, hanya representasi tombol yang ditentukan oleh style yang terlihat hover.


Nah, jika pertama kali datang gaya hover, dan kemudian gaya fokus.

Beginilah uraian gaya yang benar:

.c-button:hover {
  background: #1d49aa;
}

.c-button:focus {
  outline: none;
  box-shadow: 0 0 0 4px #cbd6ee;
}

▍ Lebar Tombol Minimum


Agar tombol terlihat bagus, itu harus memiliki lebar tertentu. Penting untuk memikirkan hal ini terlebih dahulu dan memperhitungkan label panjang dan pendek yang mungkin muncul pada tombol. Karena properti, min-widthAnda dapat mengatur lebar minimum tombol. Inilah artikel saya di mana ini dan properti serupa lainnya dibahas secara rinci.

Lihatlah gambar berikut. Di sana Anda dapat melihat beberapa tombol yang berisi label dengan panjang yang berbeda dalam bahasa Inggris dan Arab. Jika Anda tidak menetapkan lebar minimum tombol, tombol, ketika tulisan di atasnya pendek, akan terlalu kecil. Lebih baik tidak mengizinkan ini dan menggunakan properti min-width.


Layak mengatur properti tombol min-width

.c-button {
    min-width: 100px;
    /*  */
}

▍ Indent


Suatu ide mungkin terlihat menarik dimana tombol tidak diberi lekukan horisontal. Setelah semua, tombol memiliki lebar tertentu, yang berarti bahwa akan ada ruang yang cukup antara tepi tombol dan tulisan yang terkandung di dalamnya. Begitu? Tidak tidak seperti ini. Implementasi ide ini dapat memiliki konsekuensi negatif jika prasasti pada tombol berubah.

Lihatlah gambar berikut.


Dianjurkan untuk menempatkan inden internal ke tombol.

Perhatikan bahwa jika tombol tidak ditetapkan inden internal, prasasti yang berada di situ dapat mendekati tepi. Bahkan jika tombol memiliki propertimin-width. Di bagian bawah gambar, baik propertipaddingdan properti digunakanmin-width. Ini memberi lebih percaya diri bahwa tombol akan terlihat bagus dalam situasi di mana panjang tulisan yang ditampilkan tidak diketahui sebelumnya.

▍Keluarga tidak digunakan untuk tulisan yang terletak pada tombol


Elemen formulir, secara default, tidak mewarisi keluarga font yang ditugaskan <html>atau <body>. Sangat menarik untuk dicatat bahwa saya menulis 70% dari artikel ini dan menyadari bahwa, pertama, saya tidak mengubah font tombol yang digunakan untuk tujuan demonstrasi, dan kedua, saya tidak menulis apa-apa tentang itu.

Untuk mengatasi masalah ini, properti font-familyharus disetel ke inherit.

.c-button {
    font-family: inherit;
    /*   */
}

▍ Tombol styling dinonaktifkan


Untuk menunjukkan kepada pengguna bahwa tombol dinonaktifkan, Anda dapat menambahkan atribut padanya disableddan memberi gaya tombol menggunakan CSS.

Berikut ini adalah HTML yang menjelaskan tombol yang dinonaktifkan:

<button disabled></button>

Berikut adalah kode CSS untuk menata tombol seperti itu:

.c-button[disabled] {
    color: #d2d5db;
    background: #6c7589;
    cursor: not-allowed;
}

Ketika tombol dinonaktifkan, itu tidak bisa mendapatkan fokus dari keyboard dan dihapus dari pohon aksesibilitas elemen halaman.

▍ Tampilan eksternal kursor mouse saat Anda mengarahkan kursor ke tombol


Pointer mouse standar di atas tombol terlihat seperti panah. Saya suka jawaban ini di StackOverflow: “Tombol adalah kontrol desktop tradisional. Ini adalah lingkungan di mana penunjuk tangan tidak pernah digunakan sampai munculnya era Internet. Ketika kontrol yang sama mulai digunakan pada halaman web, para pengembang hanya mencoba membuat tombolnya terlihat sama seperti pada aplikasi desktop. ”

Untuk mengesampingkan perilaku pointer yang biasa, disarankan untuk mengubah panah-kursor standar ke kursor berbentuk tangan.


Kursor panah standar dan kursor tangan yang ditingkatkan.

Sekarang kita telah membahas masalah dasar penataan tombol, inilah kode CSS lengkap yang mencakup semua yang kami sentuh di atas:

.c-button {
  min-width: 100px;
  font-family: inherit;
  appearance: none;
  border: 0;
  border-radius: 5px;
  background: #4676d7;
  color: #fff;
  padding: 8px 16px;
  font-size: 1rem;
  cursor: pointer;
}

.c-button:hover {
  background: #1d49aa;
}

.c-button:focus {
  outline: none;
  box-shadow: 0 0 0 4px #cbd6ee;
}

Di bagian berikut, kita akan berbicara tentang berbagai gaya dan jenis tombol yang dapat Anda gunakan dalam proyek Anda.

Tombol Ikon


Terkadang Anda membutuhkan tombol untuk memiliki ikon tertentu. Ini mungkin diperlukan untuk menyorot tombol, atau untuk memberi tahu pengguna lebih baik tentang peran tombol. Penting bahwa tombol ikon dapat diakses oleh pengguna penyandang cacat.


Contoh

tombol ikon Pada gambar sebelumnya, ada tombol ikon. Kode di bawah ini menunjukkan atribut yang ditambahkan ke ikonaria-hidden, yang memungkinkan Anda untuk menghapusnya dari pohon aksesibilitas. Saya juga menambahkan atributfocusable="false"untuk mencegah ikon mendapatkan fokus di IE.

Harap dicatat bahwa saya menggunakan stylevertical-align: middleuntuk menyelaraskan isi ikon dan tombol secara vertikal.

Berikut adalah kode HTML untuk tombol yang dimaksud:

<button class="c-button">
    <svg aria-hidden="true" focusable="false" width="24" height="24" viewBox="0 0 24 24"><!--    --></svg>
    Add to fav
  </button>

Berikut adalah kode gaya:

.c-button svg {
    display: inline-block;
    vertical-align: middle;
    fill: #fff;
    width: 20px;
    height: 20px;
    margin-right: 0.25rem;
}

Apa yang baru saja kita periksa dapat bekerja sampai kita memutuskan untuk menyembunyikan teks tombol dan menjadikannya tombol di mana hanya ikon yang berada. Bagaimana cara melakukannya? Pertama, Anda perlu membungkus teks, misalnya, dalam suatu elemen span. Kemudian Anda dapat melakukan peningkatan lebih lanjut dalam penampilan tombol. Berikut adalah deskripsi tombol HTML:

<button class="c-button c-button--icon">
    <svg aria-hidden="true" focusable="false" width="24" height="24" viewBox="0 0 24 24"><!--    --></svg>
    <span>Add to fav</span>
  </button>

Tampaknya sekarang cukup untuk menyembunyikan elemen spandan pekerjaan akan selesai:

.c-button--icon span {
    display: none;
}

Meskipun dengan pendekatan ini, teksnya hilang dan ikonnya tetap ada, ini sangat buruk dalam hal aksesibilitas konten. Tombol tidak lagi "terlihat" oleh pembaca layar. Misalnya, VoiceOver pada macOS melaporkan bahwa tombol semacam itu hanyalah "Tombol", tanpa rincian tentangnya. Ada beberapa solusi untuk masalah ini.

▍Menggunakan Ikon SVG


Saya lebih suka menggunakan ikon SVG. Disarankan untuk mengumpulkan semua deskripsi SVG dari elemen grafis ke dalam satu file dan memasukkan setiap ikon dalam tag <svg>menggunakan elemen <use>. Berikut ini sebuah contoh:

<svg class="c-icon" width="32" height="32" viewBox="0 0 20 20">
    <use xlink:href="icons.svg#facebook"></use>
</svg>

Berikut adalah kode untuk ikon SVG, deskripsi yang disimpan dalam file icons.svgdan memiliki pengenal #facebook. Pendekatan ini mengurangi duplikasi kode.

▍Ukuran tombol dengan ikon


Karena teks tombol tidak lagi terlihat, dan properti CSS diatur untuk tombol min-width, lebar tombol tidak akan sesuai dengan ukuran ikon. Untuk mempertimbangkan fitur ini, lebih baik mengatur lebar tombol ikon secara eksplisit.


Tombol yang memiliki set properti CSS min-width dan tombol yang tidak memiliki set properti ini

.c-button--icon {
  min-width: initial;
  text-align: center;
  padding: 10px 14px;
}

▍Sembunyikan teks tersembunyi


Sebuah elemen, menggunakan kelas populer .sr-only, dapat disembunyikan secara visual dengan menghapusnya dari layar, tetapi membuatnya dapat diakses oleh pembaca layar.

Ini adalah kode HTML:

<button class="c-button c-button--icon">
    <svg aria-hidden="true" focusable="false" width="24" height="24" viewBox="0 0 24 24"><!--    --></svg>
    <span class="sr-only">Add to fav</span>
  </button>

Berikut adalah gaya-gayanya:

.sr-only {
  border: 0; 
  clip: rect(0 0 0 0); 
  -webkit-clip-path: polygon(0px 0px, 0px 0px, 0px 0px);
  clip-path: polygon(0px 0px, 0px 0px, 0px 0px);
  height: 1px; 
  margin: -1px;
  overflow: hidden;
  padding: 0;
  position: absolute;
  width: 1px;
  white-space: nowrap;
}

▍ Atur ukuran font menjadi 0


Jika Anda menyetel properti font-sizeke nilai 0, elemen spantidak akan menempati ruang layar sama sekali. Artinya, itu akan disembunyikan.

.c-button--icon span {
    font-size: 0;
}

Tapi di sini saya cenderung ke solusi yang melibatkan penggunaan kelas .sr-only. Dari sudut pandang saya, itu terlihat lebih logis. Metode menyembunyikan teks dengan mengatur ukuran font ke 0, menurut saya, terlihat seperti semacam peretasan.

▍Gunakan atribut aria-label


Jika tidak ada elemen di tombol <span>, maka harus ada cara untuk melakukannya tanpa itu. Salah satu caranya adalah dengan menggunakan atribut aria-label. Atribut ditugaskan ke elemen itu sendiri <button>, atau ke elemen <svg>.

<button class="c-button c-button--icon" aria-label="Add to fav">
    <svg aria-hidden="true" focusable="false" width="24" height="24" viewBox="0 0 24 24"><!--    --></svg>
  </button>

Jika Anda ingin tahu lebih banyak tentang tombol dengan ikon - lihat materi ini .

Tombol yang berisi banyak baris teks


Dalam beberapa kasus, tombol mungkin perlu berisi dua baris teks. Contoh tombol seperti itu ditunjukkan di bawah ini.


Tombol yang berisi dua baris teks

Berikut ini adalah tombol untuk formulir berlangganan yang berisi teks utama dan tambahan. Bagaimana cara membuat tombol seperti itu dan pada saat yang sama tidak melupakan aksesibilitasnya bagi para penyandang cacat? Inilah HTML yang relevan:

<button class="c-button">
    <span>Subscribe to our newsletter</span>
    <span>240K+ subscribers</span>
</button>

Pembaca layar akan "menyuarakan" tombol ini sebagai "Berlangganan buletin 240K + pelanggan kami". Ketika pengguna mendengar ini, itu dapat membingungkannya, karena tidak ada yang akan memisahkan dua baris teks yang ditampilkan pada tombol. Lihatlah tangkapan layar alat Chrome untuk memeriksa ketersediaan item.


Menjelajahi ketersediaan elemen di Chrome

Agar tidak membingungkan pengguna, saya lebih suka menyembunyikan teks baris kedua dari pembaca layar. Anda dapat melakukan ini dengan menggunakan atributaria-hiddendi elemen yang sesuai<span>:

<button class="c-button">
    <span>Subscribe to our newsletter</span>
    <span aria-hidden="true">240K+ subscribers</span>
</button>

Jika karena alasan tertentu Anda tidak dapat mengubah markup HTML, ada cara lain untuk menambahkan teks tambahan ke tombol. Saya menemukan solusi menarik untuk masalah ini di situs web Majalah Smashing. Ini terdiri dari menempatkan konten menggunakan elemen semu. Dengan pendekatan ini, pembaca layar tidak akan melihat sesuatu yang berlebihan. Berikut ini adalah CSS untuk solusi ini:

.c-button--multiple span:after {
    content: "240K+ subscribers";
    display: block;
    font-weight: 400;
    margin-top: 0.25rem;
}

Tautan (<a>) atau tombol (<tombol>)?


Kapan menggunakan tautan, dan kapan - menggunakan tombol? Untuk memulai, mari kita bicara tentang bagaimana mereka berbeda satu sama lain.

InkLinks


Tag <a>adalah hyperlink yang memungkinkan Anda untuk pergi ke halaman lain dari situs web atau pergi ke bagian tertentu dari halaman yang dilihat oleh pengguna. Bersama-sama dengan tag <a>, Anda dapat menggunakan empat pseudo: :hover, :focus, :activedan :visited. Jika kami mempertimbangkan tautan dari sudut pandang aksesibilitas, maka kami harus mengatakan bahwa Anda dapat berinteraksi dengan mereka menggunakan tombol Enterpada keyboard. Tautan disuarakan dan pembaca layar.

UttTombol


Suatu elemen <button type="button">dengan sendirinya, tanpa menghubungkan kode JavaScript ke dalamnya, tidak melakukan tindakan apa pun. Anda bisa menggunakan pseudo-class dengannya :hover, :focusdan :active. Jika kita berbicara tentang aksesibilitas, maka Anda dapat berinteraksi dengan tombol menggunakan tombol keyboard Enterdan . Pembaca layar "membaca" isi tombol.

Jika kita mengingat desainnya, kebetulan sebuah halaman web berisi tombol-tombol dengan gaya yang sama, berbeda dalam hal kode HTML yang digunakan untuk menggambarkannya. Dengan mengingat hal ini, kode CSS untuk penataan kelas .c-buttonharus ditulis sehingga dapat digunakan untuk elemen <button>dan elemen <a>. Perhatikan contoh berikut.


Menggunakan tautan dan tombol

Perhatikan bahwa "tombol" pada halaman ditata dengan cara yang sama. Namun, yang pertama adalah, sebenarnya, elemen<a>, dan yang kedua adalah elemen<button>. Ini berarti bahwa tombol tidak selalu terlihat seperti elemen dalam HTML<button>.

Ada dua tambahan gaya.c-button. Ini adalah propertitext-decoration: none;dantext-align: center;. Secara default, teks tautan digarisbawahi, jadi kami ingin mengubahnya dengan menyesuaikan kelas yang digunakan. Selain itu, penting bagi kami untuk memusatkan isi tombol jika ada elemen HTML yang berbeda digunakan untuk menggambarkan tombol<button>.

.c-button {
    /*   */
    /*     */
    text-decoration: none;
    text-align: center;
}

▍ Elemen <button> tidak harus terlihat seperti tombol


Saya suka contoh ini , di mana, dengan mempertimbangkan persyaratan aksesibilitas konten, panel "akordeon" diimplementasikan. Awalnya, dengan asumsi JavaScript tidak tersedia, hasil rendering markup terlihat seperti di bawah ini.


Materi Halaman

Ketika JavaScript Tidak Tersedia Berikut adalah kode HTML untuk sebuah fragmen dari markup tersebut:

<div class="accordion" data-aria-accordion>
  <h2 data-aria-accordion-heading>Heading of my panel</font></h2>
  <div data-aria-accordion-panel>
    <p>Content goes here</p>
  </div>
</div>

Jika JavaScript tersedia, markup di atas akan menjelaskan elemen yang dapat diciutkan dan diperluas. Ini dicapai dengan membuat tombol dan menambahkannya ke elemen <h2>.


Materi halaman dalam kondisi saat fungsionalitas JavaScript tersedia.

Dalam kasus ini, kita dapat mengatakan bahwa menggunakan elemen<button>adalah pilihan yang tepat, karena tombol menyelesaikan masalah memperluas dan menciutkan blok teks.

▍Tombol boot


Misalkan kita punya dokumen. Kita perlu menggambarkan tautan untuk mengunduhnya. Elemen mana yang harus digunakan untuk menyelesaikan masalah ini? Di sini tautan akan datang ke bantuan kami! Jika Anda menambahkan atribut ke tautan download, mengkliknya akan memulai pengunduhan materi yang relevan.


Tautan untuk mengunduh dokumen, dirancang sebagai tombol.

Berikut ini kode untuk tautan ini:

<a href="rtl-101.pdf" download>Download PDF</a>

Dengan pendekatan ini, kami memiliki tautan, bergaya sebagai tombol, yang melakukan tugasnya hanya menggunakan struktur HTML semantik.

Tombol Stroke



Tombol biasa ketika Anda mengarahkan kursor ke tombol dengan stroke.Gambar

sebelumnya menunjukkan tombol yang menjadi tombol dengan stroke ketika Anda mengarahkan mouse ke atasnya. Metode mana yang paling baik digunakan untuk mengimplementasikan perubahan serupa dalam penampilan tombol? Sebagai permulaan, gaya tombol harus menyertakan propertiborderyang, secara default, menggunakan warna transparan. Dengan menyediakan properti seperti itu, kami memastikan bahwa tepi tombol, ketika Anda mengarahkan mouse ke sana, jangan menggambar ulang.

.c-button {
    border: 2px solid transparent;
    /*   */
}

.c-button:hover {
    background: transparent;
    color: #222;
    border-color: #4676d7;
}

Berkat pendekatan ini, kami memiliki tombol yang dapat digunakan, ketika Anda mengarahkan mouse ke atasnya, perbatasannya ditampilkan. Dalam hal ini, latar belakang tombol menjadi transparan.

Tombol Gradient


Ketika saya sedang mengerjakan sebuah artikel tentang elemen-elemen penentuan posisi, saya membutuhkan tombol dengan isian gradien.

Saya membutuhkan sesuatu yang mirip dengan gambar berikut.


Tombol gradien dan variannya dengan stroke

Ada dua opsi untuk tombol - tombol gradien dan tombol dengan stroke. Untuk mencapai tampilan tombol seperti itu, saya membutuhkan tombol dasar (gradien) untuk memiliki batas transparan. Perbatasan ini hanya akan ditampilkan untuk tombol dengan stroke.

.c-button {
      display: inline-block;
      color: #fff;
      background: linear-gradient(to bottom, #00acee, #0072e0);
      font-size: 18px;
      font-weight: 500;
      padding: 12px 26px;
      border-radius: 100px;
      /*  ,          */
      border: 3px solid transparent;
      text-decoration: none;
}

.c-button--outline {
  background: transparent;
  color: var(--color-brand-primary);
  border-color: var(--color-brand-primary);
}

Segala sesuatu tampaknya masuk akal di sini, tetapi dalam pekerjaan saya mengalami masalah aneh. Saya bahkan mencoba menyelesaikannya dengan meminta bantuan pengguna Twitter. Masalah ini disajikan pada gambar berikut.


Tombol biasa, tombol dengan gradien (perbatasan sebenarnya transparan; hanya diperlihatkan untuk tujuan warna), tombol dengan tepi aneh

Sekarang kita sudah tahu seperti apa bentuk gradien dengan perbatasan transparan, izinkan saya memberi tahu Anda alasan untuk keanehan di atas. .

Setiap elemen memiliki propertibackground-originyang menentukan area penentuan posisi wallpaper, yang diatur ke nilai defaultpadding-box. Dengan pendekatan ini, ukuran gradien dipilih sehingga cocok dengan ukuran elemen, dengan mempertimbangkan ketebalan perbatasan.

Saya mencoba menambahkan batas lebar ke tombol untuk mengamati apa yang terjadi. Perhatikan bagaimana gradien berulang, dan ukurannya cocok dengan propertipaddingtombol.


Tombol dengan batas dan gradien yang lebar.

Untuk mengatasi masalah ini, area posisi gambar latar harus diatur menggunakan gayabackground-origin: border-box;, mengubah nilai defaultpadding-boxkeborder-box:

.c-button {
      /*   */
      background-origin: border-box;
}

Sekarang , jika Anda ingin bereksperimen, sebuah contoh di CodePen.

Mana yang lebih baik - tinggi atau bantalan?


Setiap tombol memiliki ketinggian. Anda dapat mengontrol ketinggian tombol baik dengan mengatur propertinya secara eksplisit heightatau dengan mengatur properti paddinguntuk sisi atas dan bawah tombol. Harap dicatat bahwa masalah yang akan kita bahas di bawah ini adalah tipikal terutama untuk elemen <a>.

Height Tinggi tetap


Misalkan kita memiliki tombol yang ditata sebagai berikut:

.c-button {
    /*   */
    min-width: 120px;
    height: 45px;
}

Dengan pendekatan ini, teks tidak terpusat. Semuanya terlihat seperti di bawah ini.


Tombol, teks yang tidak selaras di tengah

Untuk memperbaiki ini dan menyelaraskan teks, Anda bisa menggunakan propertipadding, atau propertiline-height. Dengan mengaturnyaline-heightke nilai yang sama dengan atau dekat dengan ketinggian tombol, kita dapat menyelaraskan teks di tengah.

.c-button {
    /*   */
    min-width: 120px;
    height: 45px;
    line-height: 45px;
}

Tetapi metode ini memiliki kelemahan:

  • Tidak dijamin bahwa teks tombol akan selalu berada di tengah dengan benar. Jika Anda mengubah font, perataannya mungkin rusak.
  • Saat meningkatkan nilai yang ditentukan oleh properti font-size, Anda perlu memilih nilai baru untuk properti line-height.
  • Properti line-height dapat bekerja secara berbeda untuk teks yang ditampilkan dalam bahasa yang berbeda. Ini berlaku untuk situs multibahasa.
  • Jika ada tombol dengan dua baris teks, metode ini tidak cocok untuk menyelaraskan isi tombol.

▍ Indentasi Vertikal


Jika Anda menetapkan nilai yang sama untuk padding-topdan properti padding-bottom, maka harapkan konten tombol menjadi terpusat. Bagaimana itu? Bahkan, itu tergantung pada situasi spesifik.

Ada font yang berpusat sangat baik. Dan ada orang yang berperilaku berbeda. Terkadang, untuk mencapai tujuan, salah satu nilai indentasi vertikal perlu sedikit diubah. Lihatlah tombol selanjutnya.


Mencoba memusatkan teks tombol

Berikut adalah kode CSS untuk menata tombol ini:

.c-button {
    /*   */
    min-width: 120px;
    padding: 16px 14px;
}

Dalam hal ini, konten tombol terlihat sedikit bias. Nilai indentasi atas harus sedikit dikurangi:

.c-button {
    /*   */
    min-width: 120px;
    padding: 14px 14px 16px 14px; /* ,  , ,   */
}

Membungkus konten tombol dalam tag <span>


Selama percobaan, saya menemukan bahwa penjajaran teks tombol Adobe agak merobohkan. Ini tampilannya.


Pemusatan agak merobohkan,

saya memeriksa tombol-tombol ini dan melihat pola yang menarik. Konten dibungkus elemen yang<span>menunjukkan ketinggian tetap untuk tombol.

<button class="c-button-adobe">
    <span>Save Changes</span>
</button>

Untuk <button>elemen <span>, elemen , secara default, terpusat. Ketika ketinggian berubah, konten dipusatkan secara otomatis, tanpa perlu properti paddingatau apa pun. Berikut ini adalah demonstrasi animasi dari perilaku ini.


Mengubah ketinggian tombol dan memusatkan isinya secara otomatis

Benar, jika kita berbicara tentang tautan yang terlihat seperti tombol, maka elemen tersebut<span>harus dipusatkan. Untuk mempertimbangkan fitur ini, seseorang dapat menggunakan metode mengatur elemenflexbox.

.c-button {
    /*   */
    display: inline-flex; *To keep the button inline, and flex container at the same time*
    align-items: center;
    justify-content: center;
}

Itu saja. Saya ingin mencatat bahwa artikel ini membantu saya ketika menulis bagian ini .

Tombol di dalam flexbox atau wadah kotak


Di sini Anda mungkin memiliki pertanyaan tentang apa yang harus dilakukan tombol dengan tata letak fleksibel dan kisi. Izinkan saya mengklarifikasi pertanyaan ini.

Saya mengerjakan satu bagian dari satu proyek. Saya perlu memusatkan isinya secara vertikal. Jadi saya menggunakan tata letak flex:

.c-hero {
    display: flex;
    flex-direction: column;
    justify-content: center;
}

Apa yang saya lakukan agak mengejutkan.


Hasil penggunaan tata letak flex

Secara default, setiap elemen flex direntangkan dalam lebar elemen induk. Inilah yang terjadi dengan tombol yang ditunjukkan pada gambar sebelumnya. Untuk menghindari masalah ini, Anda perlu mengonfigurasi propertialign-self:

.c-button {
    /*   */
    align-self: flex-start;
}

Ini adalah bagaimana tombol akan terlihat setelah itu.


Sebuah tombol terlihat jauh lebih baik

Masalah umum lainnya terjadi ketika sebuah tombol ditempatkan dalam wadah fleksibel, di mana, secara default, properti diaturflex-direction: row. Ketinggian tombol akan disesuaikan dengan ketinggian elemen induk. Untuk memperbaiki masalah ini, Anda perlu menggunakanalign-selfpropertitombolatau properti wadah fleksibelalign-items.


Tombol membentang tinggi

Berikut adalah CSS:

.c-button {
    align-self: center;
}

Dengan mengatur penyelarasan tombol relatif ke tengah wadah, kami memecahkan masalah. Beginilah contoh yang sama akan terlihat sekarang.


Memecahkan masalah tombol yang diregangkan

Menggunakan unit em


Unit ukuran emdapat digunakan untuk mengonfigurasi ukuran tombol dengan benar. Unit ukuran ini sangat berguna dalam situasi seperti itu. Unit emsama dengan font-sizeelemen ( pxatau rem). Lihatlah contoh berikut:

.element {
    font-size: 16px;
    padding: 0.5em;
}

Dalam hal ini, nilai padding sama 16 * 0.5 px.

Asumsikan bahwa proyek menggunakan tombol tiga ukuran: biasa, sedang, dan besar. Ketika untuk menentukan nilai-nilai padding, width, height, marginsatuan yang digunakan pengukuran em, memungkinkan Anda untuk membuat tombol, dimensi yang sangat mudah untuk perubahan. Ini tampilannya.


Tombol ukuran berbeda

Tapi di sini ada fragmen kode CSS yang menggunakan satuan ukuranem:

.c-button {
  /*   */
  font-size: 1rem;
  min-width: 6.25em;
  border-radius: 0.3125em;
  padding: 0.625em 1em;
}

.c-button svg {
  width: 1.25em;
  height: 1.25em;
  margin-right: 0.25em;
}

Untuk tombol dengan tipe berbeda, Anda perlu membuat kelas yang menentukan ukuran font yang berbeda:

.c-button--md {
  font-size: 22px;
}

.c-button--lg {
  font-size: 30px;
}

Ini adalah contoh penggunaan tombol serupa pada CodePen

Inilah artikel saya tentang topik ini. Saya sarankan Anda membacanya

Animasi dan Transisi


Agar lebih menyenangkan bagi pengguna untuk bekerja dengan halaman, penting untuk berpikir tentang menggunakan transisi ketika Anda mengarahkan kursor ke tombol. Cara termudah untuk melakukan ini adalah dengan mengatur perubahan warna latar belakang. Berikut adalah contoh tentang CodePen di mana Anda dapat melihat implementasi ide ini.

Ringkasan


Saya sangat senang mengerjakan materi ini. Butuh waktu lebih dari setahun untuk menulisnya. Saya senang akhirnya diterbitkan. Saya harap Anda menemukan sesuatu di sini yang bermanfaat bagi Anda.

Pembaca yang budiman! Apakah Anda tahu ada cara yang berguna untuk bekerja dengan tombol yang berada di luar cakupan artikel ini?


All Articles