สร้าง UI บัตรประชาชนด้วย HTML, CSS, และ Angular

Nov. 22, 2024 · boychawin

บทความนี้ผมจะพามาสร้าง UI บัตรประชาชน ที่แสดงผลข้อมูลคราวๆ ใช้โครงสร้าง HTML, การออกแบบด้วย CSS, และการจัดการข้อมูลด้วย Angular(เอาไปปรับใช้กับ JS ก็ได้)

1. โครงสร้าง HTML

HTML นี้ประกอบด้วยโครงสร้างบัตรประชาชน พร้อมภาพพื้นหลังและข้อมูลต่างๆ เช่น หมายเลขบัตร, ชื่อ-นามสกุล, ที่อยู่ และวันเกิด โหลดรูป ปปช ที่นี่

<div class="row">
  <div class="col-6">
    <div class="card bg">
      <div class="id-card-container">
        <div class="position-relative">
          <!-- รูปพื้นหลังบัตรประชาชน -->
          <img src="/assets/images/id_card.png" class="id-card-image" data-testid="idCardImage" width="100%"
            height="100%" />
          <!-- หมายเลขบัตร -->
          <div class="position-absolute id-card-no">
            {{ customer.idCardNo }}
          </div>
          <!-- ชื่อ-นามสกุลภาษาไทย -->
          <div class="position-absolute id-card-name">
            {{ customer.titleName }} {{ customer.firstName }}
            {{ customer.lastName }}
          </div>
          <!-- ชื่อภาษาอังกฤษ -->
          <div class="position-absolute id-card-name-en">
            {{ customer.firstNameEn }}
          </div>
          <!-- นามสกุลภาษาอังกฤษ -->
          <div class="position-absolute id-card-lastname-en">
            {{ customer.lastNameEn }}
          </div>
          <!-- วันเกิด -->
          <div class="position-absolute id-card-birthdate">
            {{ customer.birthdate }}
          </div>
          <div class="position-absolute id-card-birthdate-en">
            {{ customer.birthdate }}
          </div>
          <!-- สัญชาติ -->
          <div class="position-absolute id-card-citizenship">xxxx</div>
          <!-- ที่อยู่ -->
          <div class="position-absolute id-card-address">
            {{ customer.homeNo }} {{ customer.moo }}
            {{ customer.soi ? "ซอย" + customer.soi : "" }}
            {{ customer.street ? "ถนน" + customer.street : "" }}
            {{ customer.tumbol }} {{ customer.amphur }}
            {{ customer.province }}
          </div>
          <!-- รูปเล็ก (สำหรับการอ่านบัตร) -->
          <img [src]="'https://www.boychawin.com/images/og-image.png'" class="position-absolute image-read-card"
            width="20%" height="40%" />
        </div>
      </div>
    </div>
  </div>
</div>

2. การออกแบบด้วย CSS

CSS ที่ใช้ในบทความนี้ออกแบบให้บัตรประชาชนดูสมจริงและใช้งานได้ทุกหน้าจอเอาไปปรับแต่งเพิ่มเติมกันนะครับ

/* การตั้งค่าโครงสร้างหลัก */
.row {
    display: flex;
    flex-wrap: wrap;
    margin-right: -15px;
    margin-left: -15px;
}

.col-6 {
    flex: 0 0 50%;
    max-width: 50%;
}

/* การจัดตำแหน่งของข้อมูล */
.position-relative {
    position: relative;
}

.position-absolute {
    position: absolute;
}

/* การออกแบบส่วนของบัตรประชาชน */
.id-card-container {
    width: 100%;
    height: 100%;
    position: relative;
}

.id-card-image {
    object-fit: contain;
}

/* ฟอนต์สำหรับข้อมูล */
.id-card-no,
.id-card-name {
    font-size: 2vw;
}

.id-card-name-en,
.id-card-lastname-en,
.id-card-birthdate,
.id-card-birthdate-en,
.id-card-citizenship {
    font-size: 1.25vw;
}

/* การจัดตำแหน่งข้อมูล */
.id-card-no {
    top: 10%;
    left: 46%;
}

.id-card-name {
    top: 20%;
    left: 32%;
}

.id-card-name-en {
    top: 29%;
    left: 42%;
}

.id-card-lastname-en {
    top: 36%;
    left: 46%;
}

.id-card-birthdate {
    top: 42%;
    left: 47%;
}

.id-card-birthdate-en {
    top: 49%;
    left: 52%;
}

.id-card-citizenship {
    top: 56%;
    left: 45%;
}

.id-card-address {
    font-size: 1.5vw;
    bottom: 21%;
    left: 22%;
    width: 50%;
}

/* การออกแบบรูปเล็ก */
.image-read-card {
    bottom: 16px;
    right: 3%;
}

/* การตั้งค่าการ์ด */
.card {
    border: none;
}

3. การสร้าง Interface ใน TypeScript

เพื่อจัดการข้อมูลผู้ใช้ เราจะใช้ interface เพื่อกำหนดโครงสร้างของข้อมูล:

export interface ICustomer {
  idCardNo: string;
  titleName: string;
  firstName: string;
  firstNameEn: string;
  lastName: string;
  lastNameEn: string;
  birthdate: string;
  homeNo: string;
  moo: string;
  soi: string;
  street: string;
  tumbol: string;
  amphur: string;
  province: string;
}

4. ตัวอย่างการดึงข้อมูลผ่าน Angular Component

ข้อมูลที่เราต้องการแสดงจะถูกจัดการผ่าน Angular Component

import { Component } from '@angular/core';
import { ICustomer } from './customer.interface';

@Component({
  selector: 'app-id-card',
  templateUrl: './id-card.component.html',
  styleUrls: ['./id-card.component.css']
})
export class IdCardComponent {
  customer: ICustomer = {
    idCardNo: "1234567890123",
    titleName: "นาย",
    firstName: "สมชาย",
    firstNameEn: "Somchai",
    lastName: "ใจดี",
    lastNameEn: "Jai Dee",
    birthdate: "01/01/1990",
    homeNo: "123",
    moo: "5",
    soi: "สุขใจ",
    street: "พหลโยธิน",
    tumbol: "ลาดพร้าว",
    amphur: "บางกะปิ",
    province: "กรุงเทพมหานคร"
  };
}

สรุป

บทความนี้อธิบายขั้นตอนการสร้าง UI บัตรประชาชน ตั้งแต่การใช้ HTML สำหรับโครงสร้าง, CSS สำหรับการจัดตำแหน่งและออกแบบ, ไปจนถึงการใช้ TypeScript และ Angular สำหรับดึงข้อมูลลูกค้าและแสดงผล เหมาะสำหรับนักพัฒนาที่ต้องการสร้าง UI ที่สมจริง ปรับแต่งได้ง่าย และสามารถใช้งานร่วมกับระบบได้