Showing posts with label html. Show all posts
Showing posts with label html. Show all posts

Tuesday, May 19, 2020

Belajar Apa Itu Web Storage

Apa itu Web Storage?

Web storage adalah salah satu Web API yang dapat menyimpan data secara lokal pada sisi client. Berbeda dengan objek atau array, data yang disimpan pada objek atau array JavaScript bersifat sementara, dan akan hilang jika terjadi reload atau pergantian URL pada browser. Sedangkan data yang disimpan pada Web Storage akan bertahan lebih lama karena data akan disimpan pada storage browser.

Sebelum HTML5, kita melakukan hal ini dengan menggunakan cookies, namun penyimpanan cookies terbatas. Dengan hadirnya Web Storage kita dapat menampung data lebih besar dan tentunya lebih aman. 
Data yang disimpan web storage tersedia berdasarkan domain. Artinya, data pada suatu domain web hanya dapat diakses oleh domainnya itu sendiri. Web storage dapat menampung sebesar 10MB untuk satu domain.

Tipe Web Storage

Web API menyediakan dua tipe Web Storage untuk kita gunakan, yakni sessionStorage dan localStorage.
Sebelum menggunakan Web Storage baik sessionStorage atau localStorage, kita perlu memastikan browser support terhadap fitur tersebut, dengan cara:

  1. if (typeof(Storage) !== "undefined") {

  2.   // Browser mendukung sessionStorage/localStorage.

  3. } else {

  4.   // Browser tidak mendukung sessionStorage/LocalStorage

  5. }


Seharusnya browser yang ada pada saat ini sudah mendukung kedua fitur tersebut. Google Chrome dan Mozilla Firefox tentu memilikinya.
Pada sessionStorage atau localStorage data yang disimpan adalah nilai primitif seperti numberboolean, atau string. Namun kita juga dapat menyimpan data berbentuk objek dengan mengubahnya dalam bentuk string, begitu pula sebaliknya ketika kita ingin menggunakan datanya kembali.
Untuk menyimpan dan mengakses data pada storage, metode yang digunakan adalah key-value. Di sini key menjadi sebuah kunci untuk mengakses data pada storage.
Data yang disimpan pada Web Storage dapat kita lihat menggunakan DevTools pada tab Application (Google Chrome) atau tab Storage (Mozilla Firefox).
2019120621470931ce9fbcd91f709b1faf8417eabd6532.jpeg
Data Local Storage pada Google Chrome

201912062147258a1dc4e07edf3529c068bca0127328a7.jpeg
Data Local Storage pada Mozilla Firefox


Session Storage

Tipe storage yang pertama adalah Session Storage yang mana digunakan untuk menyimpan data sementara pada browser. Data akan hilang ketika browser atau tab browser ditutup.
Untuk menggunakan Session Storage kita gunakan object sessionStorage, kemudian untuk menyimpan datanya gunakan method setItem(), method ini membutuhkan dua argumen yakni key dan nilai yang akan dimasukkan. Kemudian untuk mengakses data yang sudah dimasukkan kita gunakan method getItem() dan gunakan key sebagai argumen methodnya.
Berikut contoh penerapan dari session storage:

  1. <!DOCTYPE html>

  2. <html>

  3.  

  4. <head>

  5.    <title>Session Storage</title>

  6. </head>

  7.  

  8. <body>

  9.    <p>Anda sudah menekan tombol sebanyak <span id="count"></span> kali</p>

  10.    <button id="button">Click Disini!</button>

  11.  

  12.    <script>

  13.        const cacheKey = "NUMBER";

  14.        if (typeof(Storage) !== "undefined") {

  15.  

  16.            // pengecekkan apakah data sessionStorage dengan key NUMBER tersedia atau belum

  17.            if (sessionStorage.getItem(cacheKey) === "undefined") {

  18.                // Jika belum maka akan atur dengan nilai awal yakni 0

  19.                sessionStorage.setItem(cacheKey, 0);

  20.            }

  21.  

  22.            const button = document.querySelector("#button");

  23.            const count = document.querySelector("#count");

  24.            button.addEventListener('click', function(event) {

  25.                let number = sessionStorage.getItem(cacheKey);

  26.                number++;

  27.                sessionStorage.setItem(cacheKey, number);

  28.                count.innerText = sessionStorage.getItem(cacheKey);

  29.            })

  30.        } else {

  31.            alert("Browser tidak mendukung Web Storage")

  32.        }

  33.    </script>

  34. </body>

  35.  

  36. </html>








20191206214918049c9ee8ea00b53b8180b744e9862493.gif

Bisa kita lihat bahwa data yang disimpan pada sessionStorage akan bertahan jika terjadi reload pada browser, namun data tersebut akan hilang apabila tab browser atau browser itu sendiri ditutup.

Local Storage

Tipe storage yang kedua adalah Local Storage yang serupa dengan session storage, namun data yang disimpan tidak akan hilang bila browser atau tabs browser ditutup. Kita bisa menghapus data pada local storage dengan method removeItem().
Untuk penggunaan localStorage identik dengan sessionStorage, perbedaanya storage ini diakses melalui object localStorage.
Berikut contoh penerapan dari local storage:
  1. <!DOCTYPE html>
  2. <html>
  3.  
  4. <head>
  5.    <title>Local Storage</title>
  6. </head>
  7.  
  8. <body>
  9.    <p>Anda sudah menekan tombol sebanyak <span id="count"></span> kali</p>
  10.    <button id="button">Click Disini!</button>
  11.    <button id="clear">Hapus Storage</button>
  12.  
  13.    <script>
  14.        const cacheKey = "NUMBER";
  15.        if (typeof(Storage) !== "undefined") {
  16.  
  17.            // pengecekkan apakah data sessionStorage dengan key NUMBER tersedia atau belum
  18.            if (localStorage.getItem(cacheKey) === "undefined") {
  19.                // Jika belum maka akan atur dengan nilai awal yakni 0
  20.                localStorage.setItem(cacheKey, 0);
  21.            }
  22.  
  23.            const button = document.querySelector("#button");
  24.            const clearButton = document.querySelector("#clear")
  25.            const count = document.querySelector("#count");
  26.            button.addEventListener('click', function(event) {
  27.                let number = localStorage.getItem(cacheKey);
  28.                number++;
  29.                localStorage.setItem(cacheKey, number);
  30.                count.innerText = localStorage.getItem(cacheKey);
  31.            });
  32.  
  33.            clearButton.addEventListener('click', function(event) {
  34.                localStorage.removeItem(cacheKey);
  35.            });
  36.        } else {
  37.            alert("Browser tidak mendukung Web Storage")
  38.        }
  39.    </script>
  40. </body>
  41.  
  42. </html>

20191206215045100580da075718404cc777290b0cbc7d.gif
Pada gif di atas kita bisa mengetahui bahwa data yang disimpan pada localStorage akan bertahan walaupun jendela browser atau tab browser ditutup, untuk menghapus datanya bisa dengan tombol “Hapus Storage” dimana tombol tersebut akan memanggil method localStorage.removeItem().
Bagaimana? Cukup mudah kan untuk menggunakan Web Storage? Selanjutnya kita akan coba terapkan localStorage pada Web Kalkulator yang kita buat untuk menampung riwayat kalkulasi yang pengguna lakukan

Perbedaan Static Flow dan Non-Static Flow.

Sebenarnya CSS memiliki dua buah flow yang bisa digunakan untuk menampilkan elemen, yakni static dan non-static. Agar mudah memahami perbedaan antar keduanya, kita gambarkan sebuah halaman website dengan tampilan tiga dimensi.

Bayangkan kita memiliki tiga buat elemen div berukuran 200px x 200px yang masing-masing memiliki warna yang berbeda.

  1. .box {

  2.    width: 200px;

  3.    height: 200px;

  4. }

  5.  

  6. .first {

  7.    background-color: #60d0a8;

  8. }

  9.  

  10. .second {

  11.    background-color: #6495ed;

  12. }

  13.  

  14. .third {

  15.    background-color: #ffa500;

  16. }


Karena kita tidak mengatur properti position dari ketiga elemen tersebut, maka tiap elemen akan ditampilkan dengan static flow seperti ini:
20191206221017eed63307e1d442bf305a00d7012e83fe.jpeg
Ketika kita ingin mengubah letak kotak biru (kotak kedua) dengan menggunakan margin-top: 20px; tentu akan berpengaruh pada posisi elemen di bawahnya.

  1. .second {

  2.    background-color: #6495ed;

  3.    margin-top: 20px;

  4. }


201912062212001fdb59982b39e930a26e6a07fcb5e6c9.png
Pada ilustrasi di atas kita bisa lihat bahwa kotak yang berwarna oranye ikut bergeser ke bawah. Berbeda ketika kita menerapkan properti position yang dapat membuat elemen keluar dari static flow. Contohnya kita menerapkan properti position dengan nilai relatif.

  1. .second {

  2.    background-color: #6495ed;

  3.    position: relative;

  4. }


201912062214046584bac9ac55ab9c3ac2aba6cf7bf15b.png
Pada tampilan browser mungkin tidak terdapat perbedaan apapun setelah menerapkan nilai relative pada atribut position. Namun sebenarnya elemen yang menerapkannya akan diangkat dari luar static flow seperti yang ditampilkan pada ilustrasi 3D. Sehingga elemen tersebut dapat leluasa berpindah posisi tanpa mempengaruhi elemen yang berada pada static flow.
Untuk mengubah posisi elemen yang berada di non-static flow, kita dapat menggunakan properti toprightbottom, maupun left.

  1. .second {

  2.    background-color: #6495ed;

  3.    position: relative;

  4.    top: 30px;

  5.    left: 10px;

  6. }


201912062214376f42b33fe7daba6acb7680217e48b80d.png
Perlu kita ingat ya, bahwa properti topleftright dan bottom pada CSS hanya akan berpengaruh pada elemen yang menerapkan non-static flow (elemen yang menerapkan nilai relativeabsolute, dan fixed pada properti position)

Monday, May 18, 2020

Dasar dari Positioning

Kita sudah mengetahui cara mengubah posisi dari sebuah elemen dengan menggunakan margin. Namun ketika melakukannya, posisi elemen lain di sekitarnya akan terpengaruh. Lantas bagaimana jika kita ingin memindahkan tanpa mengganggu posisi elemen lainnya? Solusinya kita perlu mengubah positioning schema dengan menggunakan properti position dalam mengontrol letak elemen tersebut. Berikut nilai dari properti position yang ada pada CSS:
  • Normal Flow / Static Flow : Merupakan default behaviour yang dimiliki elemen, di mana setiap elemen block akan ditampilkan dalam baris baru ketika dibuat. Sehingga setiap elemen block selalu muncul di bawah dari elemen block sebelumnya. Bahkan jika masih terdapat ruang kosong pada samping elemennya, mereka tidak akan nampak bersebelahan.
  • Relative Positioning : Membuat elemen bisa berpindah posisi ke atas, kanan, bawah, maupun kiri dari posisi semula atau posisi seharusnya elemen tersebut berada. Perpindahan posisi ini tidak akan berpengaruh terhadap posisi elemen di sekitarnya karena ketika menggunakan relative positioning, elemen tersebut akan dipindahkan dari normal flow.
  • Absolute Positioning : Sama seperti relative, elemen akan dipindahkan keluar dari normal flow sehingga kita dapat memindahkan posisi elemen ke atas, kanan, bawah, maupun kiri secara leluasa tanpa mengganggu elemen di sekitarnya. Namun posisinya relatif pada jendela browser dan induk elemen selama induk elemen juga berada di luar dari normal flow.
  • Fixed Positioning : Merupakan absolute position namun posisinya selalu relatif pada jendela browser. Bahkan ketika pengguna scrolling pun, posisinya di layar akan tetap tak berubah. 
Sebelum kita membahas satu persatu skema tersebut, mungkin kita perlu memahami lebih detail lagi apa sebenarnya normal flow atau biasa disebut “static flow” itu, dan mengapa untuk memindahkan posisi elemen kita perlu mengeluarkannya dari static flow

Belajar Border, Padding dan Margin

Border

Border merupakan sebuah garis yang mengelilingi area konten dan padding (opsional). Kita bisa mengatur tipe, ketebalan, serta warna garis yang ditampilkan sesuai dengan yang kita inginkan. Kita juga bisa mengatur dalam menampilkan sebagian atau keseluruhan garis pada elemen. Mari kita eksplorasi apa saja properties yang dapat mengatur border.

Border Width

Properti border-width digunakan untuk mengatur ketebalan dari border. Nilai dari properti ini dapat berupa pixel atau menggunakan predefined names value seperti thinmedium, dan thick. Kita tidak bisa menggunakan nilai persentase (%) pada properti ini.
Kita dapat mengatur ukuran garis secara individual dengan menggunakan empat properti terpisah seperti ini:

  1. .box {

  2.    border-top-width: 2px;

  3.    border-right-width: 1px;

  4.    border-bottom-width: 1px;

  5.    border-left-width: 2px;

  6. }


Tetapi kita juga dapat menetapkan nilai keempatnya sekaligus dalam satu properti seperti ini

  1. .box {

  2.   border-width: 2px 1px 1px 2px; /*top right bottom left*/

  3. }


Properti border-width dapat ditentukan dengan menggunakan satu, dua, tiga, atau empat nilai. Berikut penjelasannya: 
  • Ketika satu nilai ditentukan, maka nilai berlaku untuk empat sisi.
  • Ketika dua nilai ditentukan, nilai pertama berlaku untuk sisi atas dan bawah, nilai kedua untuk sisi kiri dan kanan.
  • Ketika tiga nilai ditentukan, nilai pertama berlaku untuk sisi atas, nilai yang kedua untuk sisi kiri dan kanan, nilai ketiga untuk sisi bawah.
  • Ketika empat nilai ditentukan, nilai pertama berlaku untuk sisi atas, nilai yang kedua untuk sisi kanan, nilai yang ketiga untuk sisi bawah, dan nilai yang keempat untuk sisi kiri. Urutan tersebut berdasarkan arah jarum jam (clockwise).

Border Style

Kita bisa menetapkan tipe border dengan menggunakan properti border-style. Berikut nilai - nilai yang dapat digunakan pada properti ini:
Nilai Properti
Penjelasan
Gambar
solid
Tipe garis padat (tidak terputus - putus)
20191206204816e7483d3ecd351a5644f8a526f2810172.jpeg
dotted
Garis yang dibentuk dari serangkaian titik-titik (jika ketebalan garis 2px, maka titik-titik akan berukuran 2px dan memiliki jarak 2px antar titiknya).
20191206204816f96ab67ccc666b583503e1a1db1d3987.jpeg
dashed
Garis yang dibentuk dari serangkaian garis pendek.
2019120620481623f0be2be576dfc2b19b5d31be0cf5c3.jpeg
double
Garis yang dibentuk dari dua buah garis padat.
2019120620481697c877ae1ced4cdf81ff39f488d66724.jpeg
groove
Tipe garis yang berbentuk seperti frame
20191206204816d8c7f524bb8cb38b7e50b11ff383f242.jpeg
hidden
Digunakan untuk menyembunyikan garis pada elemen.

Kita juga bisa menetapkan tipe garis secara individual pada sisi elemen dengan menggunakan empat properti terpisah. Contohnya seperti ini:

  1. .box {

  2.    border-top-style: solid;

  3.    border-right-style: dotted;

  4.    border-bottom-style: groove;

  5.    border-left-style: double;

  6.  

  7.    border-width: 4px;

  8.    border-color: red;

  9.    width: 200px;

  10.    height: 50px;

  11. }


Jika kita menerapkan rule seperti di atas, maka hasilnya akan tampak seperti ini:
20191206205000419a870a20940e06c56a2ac904d6ca86.png

Border Color

Properti terakhir adalah border-color. Properti ini digunakan untuk menentukan warna pada garis dengan menggunakan nilai RGB, Hex, atau nama warna pada CSS.

  1. /* menggunakan rgb format */

  2. border-color: rgb(80, 138, 212);

  3.  

  4. /* menggunakan format hex */

  5. border-color: #4ee717;

  6.  

  7. /* menggunakan nama warna */

  8. border-color: red;


Sama seperti properti border yang lain, kita dapat menentukan warna pada individual sisi pada elemen dengan menggunakan properti yang terpisah.

  1. border-top-color: #919191;

  2. border-right-color: #111111;

  3. border-bottom-color: #4ee717;

  4. border-left-color: #00c8eb;


Tetapi kita juga dapat menetapkan nilai keempatnya sekaligus dalam satu properti seperti ini:

  1. border-color: #919191 #111111 #4ee717 #00c8eb;


Hasilnya seperti ini:
20191206205149fdbb63be5a5355399385f510496190ae.png

Shorthand

Untuk menerapkan border pada elemen kita harus mendefinisikan seluruh properti border yang ada. Dimulai dari menetapkan ketebalan (border-width), tipe (border-type), dan warna (border-color). Jika kita lupa menetapkan salah satu properti tersebut, maka garis tidak akan nampak pada elemen.
Dengan begitu tentu untuk menetapkan border pada elemen, kita perlu menuliskan properti yang banyak bukan? Ya memang, tetapi CSS menyediakan jalan pintas (shorthand) untuk membuat border dengan satu properti saja. Properti border memiliki tiga buah nilai yang digunakan untuk menentukan ketebalan, tipe dan warna pada border. Berikut contoh penerapannya:

  1. .box {

  2.    border: 4px dashed #00a2c6;

  3.    width: 200px;

  4. }


Hasilnya seperti ini:
2019120620541196ec08fb33e415ae49bc6c7c1d561e23.png
Perlu kita perhatikan bahwa penulisan urutan harus benar. Nilai pertama digunakan untuk ketebalan, yang kedua untuk tipe, dan yang ketiga untuk warna garis.
2019120620543648015e2677b35c2082d1e4e2983803c2.png

Padding

Padding merupakan jarak antara area konten dan border. Padding banyak diterapkan pada elemen jika elemen tersebut menerapkan warna latar atau pun border. Padding memberikan sedikit ruang sehingga konten di dalam elemen dapat lebih nyaman untuk ditampilkan. Contohnya:

  1. <!doctype html>

  2. <html lang="en">

  3. <head>

  4.    <style>

  5.        p {

  6.            border: 4px solid #00a2c6;

  7.            width: 275px;

  8.        }

  9.  

  10.        p.example {

  11.            padding: 10px;

  12.        }

  13.    </style>

  14. </head>

  15. <body>

  16. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aspernatur beatae commodi dignissimos eaque fugiat inventore maiores neque nisi sint. A dolore eaque fuga, iste minus porro provident sit tempore ullam.</p>

  17. <p class="example">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Amet assumenda blanditiis cum dignissimos enim esse excepturi illum inventore maiores minima, nemo nisi obcaecati officia pariatur qui quibusdam sed. Ab, dolorum?</p>

  18. </body>

  19. </html>


Jika berkas di atas dijalankan pada browser, maka akan tampak seperti ini:
2019120620574568fffb49379df2cdd0a14a20fe3e4008.png
Seperti yang kita lihat, paragraf kedua jauh lebih nyaman dibaca karena terdapat jarak antara teks dan border dari kotak. Kotak pun menjadi sedikit lebar karena adanya padding.
Pixel merupakan satuan yang sering digunakan dalam menetapkan nilai properti ini (meskipun kita bisa juga menggunakan persentase atau ems). Jika menetapkan menggunakan persentase, maka nilai akan menjadi relatif pada elemen induk atau jendela browser (jika tidak memiliki induk elemen).
Kita dapat menentukan nilai padding yang berbeda untuk masing-masing sisi elemen dengan menggunakan:

  1. padding-top: 10px;

  2. padding-right: 15px;

  3. padding-bottom: 10px;

  4. padding-left: 15px;


Atau dengan menggunakan shorthand seperti berikut:

  1. padding: 10px 15px 10px 15px;


Sehingga padding akan diterapkan seperti gambar di bawah ini.
2019120620593859ac0e3661cd1d14f69a19aa3621a9da.png

Margin

Seperti halnya padding, margin merupakan ruang atau jarak pada sebuah elemen. Namun jarak tersebut terletak di luar dari konten dan border elemen. Margin digunakan untuk menjaga elemen agar tidak bertabrakan satu sama lain atau dari tepi jendela browser.
20191206210141ce820f9d08c34ad72fc7bba057d18cc4.png
Sebelum menerapkan margin

2019120621023166ba8e1d60ab813e047cb14a7fe7d209.png
Setelah menerapkan margin 20px.

Margin ini bersifat collapsed, yang artinya dapat menumpuk jika terdapat dua margin yang saling bertumpukan. Anda bisa melihat pada margin bawah dan margin atas pada kedua elemen tersebut. Hal itu menjelaskan mengapa jarak vertikal antar elemen tersebut tidak 40px melainkan 20px. Jika terjadi pertumpukan margin, maka nilai yang paling besar yang akan diterapkan.
Kita dapat menentukan nilai margin yang berbeda untuk masing-masing sisi elemen dengan menggunakan:

  1. margin-top: 10px;

  2. margin-right: 15px;

  3. margin-bottom: 20px;

  4. margin-left: 25px;


Tapi kita juga dapat menggunakan shorthand untuk menetapkan keempat nilai tersebut dalam satu properti

  1. margin: 10px 15px 20px 25px;


Kita juga bisa menggunakan dua nilai saja untuk menentukan nilai margin vertikal dan horizontal.

  1. margin: 10px 15px; /* top dan bottom bernilai 10px, left dan right bernilai 15px */