Hướng dẫn css data attribute - thuộc tính dữ liệu css

Hướng dẫn css data attribute - thuộc tính dữ liệu css

Đã đăng vào thg 1 22, 2018 2:35 SA 0 phút đọc 0 phút đọc

Hàm attr(), bên cạnh ứng dụng vào tootips, ta còn có thể xây dựng thumbnail có tittle và description để kết hợp với data attributes. Bạn chỉ cần viết đoạn code HTML theo cấu trúc sau:


  
Hướng dẫn css data attribute - thuộc tính dữ liệu css

Và đến đây bạn có thể dùng hàm attr() để hiển thị tittle và description:

.caption::after {
  content: attr(data-title);
    ...
}

Dưới đây mình làm một ví dụ thumbnail với captions động hiển thị khi hover:

HTML:



	
Hướng dẫn css data attribute - thuộc tính dữ liệu css

CSS:

/* DEMO HNV */
*, *:after, *:before {
	box-sizing: border-box;
}
html {
	height: 100%;
}
body {
	height: 100%;
	display: flex;
	align-items: center;
	justify-content: center;
	background: #f5f5f5;
	user-select: none;
}
#container {
	width: 800px;
	margin: 0 auto;
}
.thumbnail {
	-webkit-backface-visibility: hidden;
	display: inline-block;
	position: relative;
	margin: 0 auto;
	overflow: hidden;
	background: #000;
	box-shadow: 0 15px 50px rgba(0,0,0,.5);
}
.thumbnail img {
	display: block;
    width: 100%;
	transition: opacity .2s ease-in-out;
}
.thumbnail:hover img {
	opacity: .5;
}
.thumbnail::after,
.thumbnail::before {
	position: absolute;
	z-index: 1;
	width: 100%;
	height: 50%;
	transition: transform .4s ease-out;
	color: #fff;
}
.thumbnail::after {
	content: attr(data-title);
	top: 0;
	padding-top: 55px;
	transform: translateY(-100%) scale(.8);
	background: rgba(0,0,0,.4);
	font-size: 36px;
	font-weight: 300;
	font-family: Merriweather, serif;
	text-align: center;
}
.thumbnail::before {
	content: attr(data-description) "…";
	top: 50%;
	padding: 20px;
	transform: translateY(100%) scale(.8);
	background: rgba(107,38,68,.6);
	-webkit-backdrop-filter: blur(10px);
	backdrop-filter: blur(10px);
	color: #f1f1f1;
	font-size: 16px;
}
.thumbnail:hover::after,
.thumbnail:hover::before {
	transform: translateY(0%) scale(1);
}

Kết quả + Demo

Như vậy, chỉ với CSS ta cũng có thể giải được vấn đề và đồng thời có thêm sự tự do trong sáng tạo của mình. Mình hi vọng bài viết trên sẽ hữu ích với bạn, Cảm ơn bạn đã theo dõi !!

All rights reserved

Giới thiệu

Phần tử HTML có thể được gán thêm các thuộc tính để phục vụ cho nhiều mục đích khác nhau.

Tuy nhiên không nên tạo ra các thuộc tính của riêng bạn cũng như gán cho những thuộc tính sẵn có giá trị không hợp lý. Nó sẽ không lỗi, chỉ là cũng không chạy.


Chúng ta có thể tạo ra thuộc tính của riêng mình bằng 1 cách khác, khá là đơn giản, chỉ cần thêm

.caption::after {
  content: attr(data-title);
    ...
}
9 làm tiền tố, và bạn có thể muốn làm gì thì làm. Đó cũng chính là data attribute mà mình muốn nói đến trong bài viết này.

Cú pháp

Cách này khá là hữu dụng khi bạn muốn lưu thông tin vào trong thẻ HTML như sau


Data attribute cũng hay được gọi là thuộc tính

.caption::after {
  content: attr(data-title);
    ...
}
9 vì cú pháp của nó lúc nào cũng như vậy.

Có thể chỉ viết mỗi
Hướng dẫn css data attribute - thuộc tính dữ liệu css
1 không?

Cũng không ảnh hưởng gì, những sẽ không dùng được, giống như trong đầu bài viết mình có nói, bạn đang cố gắng tạo ra 1 thuộc tính của riêng mình mà không hợp lệ.

Điều không nên làm với data attribute

Không nên dùng data attribute để lưu trữ những giá trị không truy cập được, nếu chỉ đơn giản là muốn ẩn đi không cho người dùng thấy, bạn có thể để nó trong 1 thẻ HTML và sử dụng class



	
Hướng dẫn css data attribute - thuộc tính dữ liệu css
2.


Chris Coyier

Style với data attribute

Ta có thể viết CSS cho phần tử HTML dựa vào thuộc tính và giá trị của chúng.

/* chọn bất cứ phần tử vào với data attribute và giá trị */
[data-size="large"] {
  padding: 2rem;
  font-size: 125%;
}

/* hoặc là thu hẹp phạm vi với phần tử hoặc class cụ thể */
button[data-type="download"] { }
.card[data-pad="extra"] { }

/* chọn tất cả các phần tử có thuộc tính này */
[data-size] { }

/* chọn phần tử có thuộc tính với giá trị cụ thể nào đó */
[data-state="open"],
[aria-expanded="true"] { }

/* giá trị của thuộc tính bắt đầu với 3, có thể là 3 hoặc 3.14,... */
[data-version^="3"] { }

/* giá trị của thuộc tính "có chứa" chữ "google" ở bất cứ đâu  */
[data-company*="google"] { }

Giá trị thuộc tính không phân biệt chữ hoa, chữ thường

Trong trường hợp bạn cần lấy tất cả text đó không phân biệt chữ hoa, chữ thường, thì có thể chọn bằng cách

.caption::after {
  content: attr(data-title);
    ...
}
0

Sử dụng data attribute trực quan

CSS cho phép bạn lấy giá trị trong data attribute ra và hiển thị nó nếu cần

.caption::after {
  content: attr(data-title);
    ...
}
1

Ví dụ về 1 cách style sử dụng data attribute

Bạn có thể dùng data attribute để chỉ định số lượng cột trong grid

Truy cập data attribute trong JavaScript

Giống như bất kì attribute nào khác, bạn có thể lấy giá trị của attribute thông qua phương thức



	
Hướng dẫn css data attribute - thuộc tính dữ liệu css
3

.caption::after {
  content: attr(data-title);
    ...
}
2

Tuy nhiên, data attribute còn có API riêng của chúng. Giả sự bạn có 1 phần tử có nhiều data attribute

.caption::after {
  content: attr(data-title);
    ...
}
3

Bạn có thể lấy hoặc set giá trị cho nó bằng cách

.caption::after {
  content: attr(data-title);
    ...
}
4

Lưu ý là với những data attribute dài, thì ta sẽ viết kiểu camelCase thay cho dấu gạch dưới, giống như



	
Hướng dẫn css data attribute - thuộc tính dữ liệu css
4 thì viết là


	
Hướng dẫn css data attribute - thuộc tính dữ liệu css
5.

Bạn cũng có thể lấy giá trị data attribute ngay trong HTML

.caption::after {
  content: attr(data-title);
    ...
}
5

Dữ liệu Json trong data attribute

.caption::after {
  content: attr(data-title);
    ...
}
6

Tại sao ko nhỉ? Chỉ cần lưu ý đúng cú phát của Json là được. Tương tự bạn cũng có thể lấy dữ liệu từ nó.

.caption::after {
  content: attr(data-title);
    ...
}
7

Ví dụ trường hợp sử dụng JS

Ví dụ bạn có 1 button Like

.caption::after {
  content: attr(data-title);
    ...
}
8

Button đó sẽ bắt sự kiện click để gọi Ajax tới server tăng lượt thích trong database. Nó sẽ rất đơn giản vì ta có sẵn id trong data attribute.

Tất nhiên là còn nhiều trường hợp khác nữa, mà bạn hãy tự khám phá thêm nhé!

Nguồn: https://css-tricks.com/a-complete-guide-to-data-attributes/