✍️
cssadvand
  • [BEM] Exploring SMACSS: Scalable and Modular Architecture for CSS
  • 😀CSS-only infinite scrolling carousel animation (ok)
  • css carousel
  • 🤡 Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 1)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 2)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 3)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 4)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 5)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 6)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 7)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 8)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 9)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 10)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 11)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 12) [Phần đặc biệt]
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 13)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 14)
  • 😘Thuộc tính tabindex="-1" không ngờ lại nguy hiểm vậy đọc bài dưới 😌
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 15)
  • 🥸CSS tạo theme cho dark mode đọc bài (Phần 16)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 16)
  • Mẹo để optimize Google Fonts API mà ít dev để ý đọc (Phần 17)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 17)
  • Thật may nhờ có white-space: pre-line đọc (Phần 18)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 18)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 19)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 20)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 21)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 22)
  • Thuộc tính image-rendering nhờ bài (Phần 23) mà phát hiện ra cách làm bức ảnh mờ trở nên rõ nét
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 23)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết 🤡
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 24)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 25)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 26)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 27)
  • 😘mix-blend-mode pha trộn giữa 1 đối tượng với đối tượng bên dưới đó (Phần 28)
    • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 28)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 29)
  • 🥸aspect-ratio (Phần 30)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 30)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 31)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 32)
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 33)
  • 😘CSS Scroll Triggered Animations Full (ok)
  • 🥹Difference between animation and transition in CSS
  • 😄animation-timeline có phải nó làm việc với thanh cuộn (ok)
  • 😍Từ bài animation-timeline làm việc với thanh cuộn tìm ra cách sử dụng background-clip: text;
  • background-clip: text;
  • 😅Sử dụng list-style-type để tạo icon đẹp (ok)
  • 😁Convert css to scss good (ok)
  • 😁CSS - Hướng dẫn: Tạo ảnh động với hàm steps()
  • 😆Multiple image cross fading in CSS - without (java) khá đẹp script (ok)
  • 😇Function css full 🤩
  • 😅[SVG] SVG viewBox Attribute (ok)
  • 😅Tailwind CSS (ok)
  • 😍Thật không thể tin được sử dụng filter: brightness(0) invert(1); để chuyển màu ảnh 🤣
  • 😅Background text matter.vn (ok)
  • 😆Chọn màu, color, color contrast ratio (ok)
  • 😁Tổng hợp Animating SVG text cực đẹp (ok)
  • 😂Chuyển động tròn :(
  • 😆MOVE-BG mepop.vn (ok)
  • 😆Counter Increment list, number xuongkhopbacninh.com (ok)
  • Boxes That Fill Height, full Height(Or More) (and Don’t Squish) (ok)
  • Equal Height (chiều cao bằng nhau) (oK)
  • 😅Sử dụng nodejs và scss cấu trúc thư mục tốt P.1(ok)
  • 🥲Sử dụng nodejs và js cấu trúc thư mục tốt P.2 (ok)
  • === START STUDY P.1 && P.2 SỬ DỤNG NODEJS VÀ CẤU TRÚC ===
  • 😉1 Giao diện sử dụng thuộc tính data-coreui-toggle="dropdown" (ok)
  • === END STUDY P.1 && P.2 SỬ DỤNG NODEJS VÀ CẤU TRÚC ===
  • 😆Css box-shadow đẹp (ok)
  • === START Tutorials Classical BEM stack ===
  • 😀HTML with BEM (ok)
  • 😀CSS with BEM (ok)
  • === END Tutorials Classical BEM stack ===
  • === START SMACSS ===
  • Categorizing CSS Rules
  • Base Rules
  • Layout Rules
  • Module Rules
  • State Rules
  • Theme Rules
  • Changing State
  • === END SMACSS ===
  • All CSS Grid Properties (ok)
  • 😇Column Grid full example(Responsive)
  • === Start Điều quan trọng nhất cách chia cột và thay đổi vị trí ===
  • CSS Grid căn bản - Phần 1
  • CSS Grid căn bản - Phần 2
  • CSS Grid: Holy Grail Layout
  • Sử dụng CSS Grid để xây dựng web layout
  • Luyện tập CSS Grid qua bài tập tạo layout Airbnb, youtube, Pinterest
  • === End Điều quan trọng nhất cách chia cột và thay đổi vị trí ===
  • Overflow:hidden dots at the end full (ok)
  • Gulp để viết Sass && cai dat
  • Cách nhúng font vào svg (ok)
  • font-face Hướng dẫn conver font và nhúng sử dụng online (ok)
  • 😇Create CSS Animations on Scroll (ok)
  • Hiệu ứng hover bằng js hiện phần description (ok)
  • Text Link on Hover phần 1 (ok)
  • Kết hợp transition & transform-origin phần 2 (ok)
  • Text Hover Phần 3 (ok)
  • Social Media Icons hover effect (ok)
  • css rotate a pseudo :after or :before content:""
  • Hiệu ứng ảnh tự zoom, animation, scale phần 1 full (ok)
  • CodePen Home Image zoom on hover - auto run - view (ok)
  • scroll-padding (ok)
  • Tạo vòm giống styleathome (ok)
  • Tổng hợp những css đẹp để làm trang trí (ok)
  • Cách thay đổi màu svg full (ok_)
  • Disable Auto Zoom in Input “Text” tag - Safari on iPhone (ok)
  • function calc css (ok)
  • Get the scroll distance from bottom to scroll, var distanceFromBottom (ok) vinmec.com (ok)
  • ---------- Start CSSscan không sử dụng ----------------------
  • Unused CSSscan your website for unused CSS selectors (ok)
  • PurifyCSS OnlineRemove unused CSS code from your stylesheets (ok)
  • Remove unused CSS styles from Bootstrap using PurgeCSS (ok)
  • 😆Thêm column, media bootstrap, custom bootstrap (ok)
  • ---------- End CSSscan không sử dụng ----------------------
  • Xây dựng blog đơn giản (Node + React)
  • Các tham số của Gulp
  • File đã thực hành với Gulp (ok
  • gulp-livereload (chưa đọc)
  • Tối ưu hiệu năng Google Fonts (ok)
  • Học CSS GRID thông qua những layout phức tạp
  • [GRID] sử dụng grid xây dựng layout giống Masonry (ok)
  • PageSpeed Insights Chrome Extension (ok)
  • Tăng tốc website bằng cách cải thiện front-end
  • Code chuẩn SEO là gì
  • 10 CSS3 Animation Tools phổ biến
  • Trang check SEO OKE
  • Làm sao để SEO từ khóa?
  • Kiểm soát web typography với việc hiển thị CSS font (ok)
  • Các mẫu phông chữ hiển thị và thuộc tính hiển thị phông chữ của CSS
  • Một số mẹo tối ưu hóa HTML/CSS/JS đúng chuẩn
  • Web Performance
  • Preload, Prefetch, Preconnect (ok)
  • Tối ưu hóa phần Front end cho trình duyệt (part 1)
  • Tối ưu hóa phần Front end cho trình duyệt (part 2)
  • Sử dụng thuộc tính attr html && css (ok)
  • Disable Auto Zoom in Input “Text” tag - Safari on iPhone (ok)
  • CSS submit button weird rendering on iPad/iPhone submit color (ok)
  • Turn off iPhone/Safari input element rounding (ok)
  • scroll bongda.com.vn (ok)
  • Làm chiếc xe ô tô chuyển động giống 2020.yp.vn (ok)
  • Sự khác biệt giữa :empty và :blank trong CSS (ok)
  • Is there a CSS parent selector? (ok)
Powered by GitBook
On this page
  • Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 21)
  • Tổng kết

Was this helpful?

Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 21)

https://viblo.asia/p/mot-vai-thu-thuat-css-ma-chinh-frontend-co-the-con-chua-biet-phan-21-djeZ1ooJ5Wz

PreviousMột vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 20)NextMột vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 22)

Last updated 7 months ago

Was this helpful?

Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 21)

Bài đăng này đã không được cập nhật trong 4 năm

Hello xin chào mọi người, mình đã trở lại và tiếp tục với phần 21 của series về

Bắt đầu thôi nào!

1. Là một trick hay đến từ Flexbox

Đã bao giờ bạn gặp kiểu divider trong thiết kế như này chưa nhỉ?

Trước đây chưa có Flexbox xuất hiện, mình đã CSS cho kiểu thiết kế trên cực kỳ tốn nhiều code, cồng kềnh lắm. Vận dụng nào là absolute, left, right, dùng calc() để tính % - px, rồi thêm overflow: hidden để cắt đi đường line thừa tràn ra khỏi viewport.

Nhưng với Flexbox nó lại xử lý vô cùng dễ dàng, ít code CSS và chỉ cần 1 thẻ HTML thôi là đủ (single div).

Single div: Hay có cách gọi khác là one div là 1 dạng xu hướng rộ lên trong cộng đồng CSS. Tức là chỉ với 1 div ở HTML, người ta cố gắng tận dụng tối đa các thuộc tính CSS cung cấp + với 2 pseudo elements là :before, :after để làm ra nhiều thứ hay ho như lá cờ (flag), icons. Bạn có thể thử search google về css flag, css icons + với từ khóa one div để tìm hiểu thêm nhé.

Quay trở lại với trick của chúng ta hôm nay, trước tiên là code HTML chỉ cần 1 div như thế này:

<div class="divider">Or</div>

CSS

.divider {
   display: flex;
   align-items: center; // Căn giữa đường line với text theo chiều dọc

   &:before,
   &:after {
      content: '';
      height: 1px;
      background-color: gray;
      flex: 1; // Tự động lấy width của khoảng trống còn dư (chỗ này với cách làm cũ của mình tốn nhiều code để xử lý lắm)
   }

   &:before {
      margin-right: 10px; // Tạo khoảng cách giữa line vs text
   }

   &:after {
      margin-left: 10px; // Tạo khoảng cách giữa line vs text
   }
}

Cái chỗ khoảng cách đó mình auto thêm 1 chút bằng CSS variables nha.

.divider {
   display: flex;
   align-items: center; // Căn giữa đường line với text theo chiều dọc
   --gap: 10px;

   &:before,
   &:after {
      content: '';
      height: 1px;
      background-color: gray;
      flex: 1; // Tự động lấy width của khoảng trống còn dư (chỗ này với cách làm cũ mình tốn nhiều code để xử lý lắm)
   }

   &:before {
      margin-right: var(--gap); // Tạo khoảng cách giữa line vs text
   }

   &:after {
      margin-left: var(--gap); // Tạo khoảng cách giữa line vs text
   }
}

Browser Support: ỔN ĐỊNH

Đọc hiểu thêm

2. Giờ thì là một pha bị lỗi do Flexbox =))

Flexbox thì giúp ích cho chúng ta xử lý nhiều design trở nên dễ dàng vậy đó, nhưng đôi khi nó cũng đem đến cho 1 vài rắc rối, phải nói là KHÓ HIỂU ?!?

white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;

Nhưng hắn lại không ăn các bạn ạ?!? Đoạn text không được truncate, không thấy dấu 3 chấm xuất hiện, mà còn bị kéo dài ra bởi thuộc tính white-space: nowrap được set ở trên.

Chi tiết thì code của mình như sau:

HTML

<div class="media">
    <img class="media__image" src="https://picsum.photos/50/50" alt="Lorem Picsum" />
    <div class="media__body">
        <h3 class="media__title">This is title</h3>
        <p class="media__desc">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ac nisl quis massa vulputate adipiscing</p>
    </div>
</div>

CSS

.media {
   width: 300px;
   padding: 10px;
   background-color: #F7964A;
   border: 2px solid black;
   display: flex;
   align-items: center;

   &__image {
      display: block;
      width: 50px;
      height: 50px;
      background-color: silver;
   }

   &__body {
      margin-left: 15px;
      flex: 1;
   }

   &__title {
      font-size: 18px;
   }

   &__desc {
      font-size: 14px;
      margin-top: 10px;
      white-space: nowrap; // CSS áp dụng để truncate 1 dòng
      overflow: hidden; // CSS áp dụng để truncate 1 dòng
      text-overflow: ellipsis; // CSS áp dụng để truncate 1 dòng
   }
}

Và mình tìm được 2 cách giải quyết như sau:

Cách 1: Thêm thuộc tính overflow: hidden cho .media__body

Cách 2: Cũng ở .media__body thêm thuộc tính min-width: 0

Đọc hiểu thêm

3. CSS Selector không phân biệt chữ hoa, chữ thường

Giả sử bạn có 1 đoạn HTML <input type="submit" value="Search" />. Ở trong CSS bạn style cho nó theo kiểu attribute selector input[value='Search'] thì sẽ match đúng, nhưng hãy thử input[value='search'] thì sao? À nó không match đâu bạn nhé. Mặc định trong CSS nó là như vậy rồi.

Nhưng thật may mắn vì CSS Selector Level 4 đã cho ra đời Selector mà resolve được vấn đề gặp trên.

Nói 1 chút về CSS Selector Level 4 nhé. Bạn có thể hình dung dễ hiểu như này:

Lúc xưa thiệt là xưa, khi mình tiếp xúc với CSS thì mình được dùng các Selector dạng :hover, .A > .B, :first-child, :last-child. Thì đây là những CSS Selector Level 2 và mới chớm của Level 3.

Sau đó CSS Selector Level 3 còn bổ sung thêm các Selector hay ho khác như: :not, :target, :checked, :empty, :only-child...

Và cho đến thời điểm hiện tại, CSS Selector Level 4 đã xuất hiện và giới thiệu thêm nhiều BỘ CHỌN còn hay hơn nữa như:

  • :placeholder-shown: Dùng để style hiệu ứng cho input cho chưa có value, bắt đầu nhập value..

  • :focus-within: Mình từng có bài viết trong series này đã giới thiệu về nó.

  • :required, :optional: Bạn hoàn toàn có thể dùng Selector này kết hợp với các thuộc tính của HTML5 để mà validate form chỉ bằng CSS.

  • Và còn nhiều Selector nữa...nhưng có 1 số vẫn đang phát triển và chưa được nhiều browser support.

Quay trở lại với tip của chúng ta, thì cái CSS Selector Level 4 mà giúp bỏ qua việc phân biệt chữ hoa, chữ thường kia đó là [attribute='value' i]. Trong trường hợp cần override lại tính năng này, thì mình vẫn có [attribute='value' s] buộc phải phân biệt chữ hoa thường => trở lại với cách xử lý mặc định của trình duyệt.

Browser Support: LẠI LÀ IE KHÔNG HIỂU

Đọc hiểu thêm

Tổng kết

Hi vọng mọi người sẽ tăng thêm skill CSS với 3 tips trên.

Nếu thấy thích thì Upvote, thấy hay thì Clip bài này của mình nhé! ^^

P/s: Tiêu đề câu view thôi nhé! Anh em Frontend pro rồi đừng chém em ạ!

Flexbox thì bây giờ đã được sử dụng rộng rãi và hầu như ở tất cả các dự án mình đang làm rồi. Cũng lâu rồi mình chưa đụng đến float và clear, thậm chí cũng ít dùng display: inline-block hơn

Mình biết được tip này qua 1 tweet của

Hãy đến với 1 layout có tên là , bây giờ mình muốn , tưởng là đơn giản vài dòng CSS như dưới đây thôi.

Và kết quả thì không như mong đợi

Mình cũng thử set .media { overflow: hidden } nhưng cũng không nhằm nhò gì...

Thế là đi search thử với từ khóa css flexbox truncate, nó ra cho 1 loạt bài viết đưa ra cách giải quyết, cũng như là link đến StackOverflow cũng có người hỏi về vấn đề này

Trong khi các version mới nhất của Browsers như Firefox, Chrome, Safari, Edge đều đã phát triển để hiểu được Selector kia, thì IE vẫn cứng đầu không chịu chơi

https://caniuse.com/#feat=flexbox
@CodyHouse
Media Object
truncate text thành 1 dòng
https://css-tricks.com/flexbox-truncated-text/
https://stackoverflow.com/questions/45922167/css-bootstrap-media-wrapping-ellipsis
https://caniuse.com/#feat=css-case-insensitive
https://stackoverflow.com/questions/27506735/what-does-i-mean-in-a-css-attribute-selector/28050505#28050505
https://caniuse.com/#feat=css-case-insensitive
https://css4-selectors.com/selectors/
https://www.sitepoint.com/future-generation-css-selectors-level-4/
https://stackoverflow.com/questions/5671238/css-selector-case-insensitive-for-attributes/26721521#26721521
Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết