2013-09-06 44 views
5

Tôi vừa xem http://csswizardry.com/2013/02/introducing-csswizardry-grids/ và bản trình diễn cho nó (http://csswizardry.com/csswizardry-grids/). Tôi nghĩ rằng đây là một cách tiếp cận khá tốt để giải quyết lưới trong CSS. Vì vậy, tôi đã kiểm tra mã nguồn để xem, làm thế nào nó được thực hiện và tôi thấy một điều nhỏ, mà tôi không thể thực sự tìm ra cách nó đã được thực hiện.Hệ thống lưới và khoảng cách khối nội tuyến

Hệ thống lưới này không sử dụng phao nhưng các phần tử chặn nội tuyến, là một điều tốt. Nhưng mỗi lần tôi đang sử dụng các khối nội tuyến cho các cột có chiều rộng phần trăm/lưới vv, tôi có khoảng cách khối nội dòng này. Tôi biết có một số cách (hầu hết chỉ là những thay đổi trong HTML của bạn) để loại bỏ khoảng cách này: http://css-tricks.com/fighting-the-space-between-inline-block-elements/

Nhưng trong hệ thống lưới tôi đã cho bạn thấy không có bản sửa lỗi nào (như tôi có thể thấy) và vẫn không có khoảng cách chặn nội dòng nào cả nếu bạn kiểm tra mã nguồn. Chỉ cần để cho bạn thấy những vấn đề tôi chủ yếu có ở đây là một fiddle nhanh: http://jsfiddle.net/nN8mV/

HTML

<p>Floating columns (width 33.3%)</p> 
<div class="grid cf"> 
    <div class="grid__item">Test</div> 
    <div class="grid__item">Test</div> 
    <div class="grid__item">Test</div> 
</div> 
<p>Inline Block columns (width 33.3%)</p> 
<div class="grid grid--inlineblock"> 
    <div class="grid__item">Test</div> 
    <div class="grid__item">Test</div> 
    <div class="grid__item">Test</div> 
</div> 

CSS

.grid { 
    margin-bottom: 20px; 
} 
    .grid__item { 
     float: left; 
     width: 33.3%; 
     background: red; 
    } 
    .grid--inlineblock .grid__item { 
     float: none; 
     display: inline-block; 
    } 

Bạn có thể biết rằng, nhưng chiều rộng 33,3% không hoạt động , vì khoảng cách này. Hệ thống lưới điện dường như không có vấn đề này, mặc dù nó đang sử dụng "display: inline-block". Vì vậy, câu hỏi của tôi: CSS Wizardy đã giải quyết vấn đề này như thế nào? Tôi không thể tìm ra và thay đổi HTML (xem liên kết CSS Tricks ở trên) không thực sự hoạt động thường xuyên, vì nội dung do CMS tạo ra hoặc các nội dung khác, nơi bạn không thể điều chỉnh HTML của mình.

Cảm ơn trước sự giúp đỡ của bạn.

Trả lời

4

Demo từ Csswizardry bạn liên kết sử dụng comment html hack:

<div class="grid__item"></div><!-- 
--><div class="grid__item"></div> 

Kiểm tra nguồn bản demo của họ.

Cũng cập nhật của bạn jsfiddle

+0

Ồ, xấu, hoàn toàn giám sát các nhận xét bên trong nguồn. Tôi đã quá tập trung vào CSS thay vì :) Cảm ơn, điều đó trả lời câu hỏi của tôi. – Daniel

1

Nếu bạn không thể thay đổi HTML của bạn, bạn sẽ phải cung cấp cho các thùng chứa font-size: 0 và đặt lại font-size trong các cột hoặc cung cấp cho các cột lợi nhuận tiêu cực (có thể rắc rối).

Thông tin chi tiết: http://css-tricks.com/fighting-the-space-between-inline-block-elements/

+0

Bạn nói đúng, nhưng phương pháp này có rất nhiều nhược điểm (Safari 5 + Công cụ tìm kiếm + Android cũ). Theo như tôi đỏ, chưa có bản sửa lỗi CSS tốt, vì vậy chúng tôi sẽ phải tuân theo các nhận xét HTML ngay bây giờ ... – Daniel

+0

Vâng, tôi biết. Tôi đã chỉ ra "cào" css vì poster được trích dẫn anh không thể thay đổi HTML. –

0

Bạn có thể làm như sau:

.grid--inlineblock { 
    word-spacing: -4px; 
} 

Và vào mục con reset word-khoảng cách

.grid--inlineblock .grid__item { 
    float: none; 
    display: inline-block; 
    word-spacing: normal; 
} 

Bạn có thể kiểm this fiddle.

Tôi không chắc liệu đây có phải là kỹ thuật tốt nhất hay không nhưng dường như nó hoạt động khá tốt.

+0

Cảm ơn, nhưng tiếc là nó luôn phụ thuộc vào phông chữ bạn đang sử dụng. Theo như tôi biết không có tin cậy CSS hack nào được nêu ra. Bạn cần xóa khoảng trống trong HTML của mình ngay bây giờ. Nhưng điều đó hoạt động khá tốt. – Daniel

+0

Ahh yeah xấu của tôi nhưng tôi đoán đó là một công việc xung quanh cho đến khi ai đó tìm thấy một cái gì đó tốt hơn nếu bạn không thích bằng cách sử dụng các ý kiến. –

+0

Ai đó cần phải đưa ra một giải pháp trước khi Flexbox có một sự hỗ trợ tốt. Sau đó chúng ta có thể sẽ không cần inline-block/float cho hệ thống lưới :) – Daniel

0

Flexbox giải quyết vấn đề này hiện nay.

Bạn có thể làm như sau thay vì:

.grid--inlineblock .grid__item { 
     display: flex; 
} 

Và đó sẽ giải quyết các vấn đề khoảng cách.

Các vấn đề liên quan