CSS3 flex và lưới mặt hàng có nghĩa vụ phải giải quyết những vấn đề này, nhưng hỗ trợ tiêu chuẩn vẫn còn đốm như của năm 2013.
Trở lại với thế giới thực. Tôi không nghĩ rằng nó có thể làm điều này hoàn toàn trong CSS2.1 (IE8 +) không có hacks pixel. Vấn đề là, sự liên kết văn bản được điều khiển bởi phần tử cha, và vì hai neo chia sẻ cha mẹ của chúng, cả hai đều liên kết với bên trái hoặc bên phải. Và biện minh không hoạt động trên dòng cuối cùng.
Nếu bạn có thể chịu đựng một chút HTML bổ sung, có hai phương pháp:
1) Thêm một inline được đảm bảo để quấn dây chuyền, và sau đó cố gắng để ẩn dòng trống. Điều này cho phép bạn sử dụng text-align hợp lý trên parent.
<p>
<a href="#" class="link">link</a>
<a href="#" class="link link-alt">link alt</a>
<span class="boom"></span>
</p>
<style type="text/css">
p {
padding: 20px;
background: #eee;
text-align: justify
}
.link {
display: inline-block;
padding: 10px;
background: #ddd;
}
.link-alt {
padding: 20px;
}
span {
display: inline-block;
height: 0;
width: 100%
}
</style>
Ưu điểm: hoạt động trên bất kỳ số khối nội tuyến nào, không chỉ hai. Chỉ cần thêm một chút HTML.
Nhược điểm: cần nỗ lực để ẩn dòng văn bản cuối cùng (trống) (đặt khối nội tuyến bên trong nó thành 0 độ cao sẽ không giúp bạn), và bạn sẽ phải khéo léo với lề hoặc thứ gì đó để làm cho nó thực sự hiệu quả. Thảo luận thêm: How do I *really* justify a horizontal menu in HTML+CSS?
2) Thêm một lớp khối nội tuyến khác lên trên các thẻ neo của bạn và định kích thước chúng thành 50%. Sau đó, bạn có thể áp dụng căn chỉnh văn bản riêng biệt để có bố cục cuối cùng mà bạn yêu cầu. Điều quan trọng là không có khoảng trắng nào được phép giữa hai khối nội tuyến có kích thước đến 50% hoặc bạn sẽ bao bọc dòng.
<p>
<span class="left">
<a href="#" class="link">link</a>
</span><span class="right">
<a href="#" class="link link-alt">link alt</a>
</span>
</p>
<style type="text/css">
p {
padding: 20px;
background: #eee;
}
.link {
display: inline-block;
padding: 10px;
background: #ddd;
}
.link-alt {
padding: 20px;
}
span {
display: inline-block;
width: 50%
}
.left {
text-align: left
}
.right {
text-align: right
}
</style>
Ưu điểm: tạo bố cục chính xác mà bạn yêu cầu mà không làm ô nhiễm mô hình hộp bên ngoài.
Nhược điểm: chỉ hoạt động cho hai khối nội tuyến (bạn có thể thử mở rộng nó, nhưng nó nhanh chóng trở nên thực sự phức tạp). Dựa vào không có khoảng trống thừa, điều này có thể gây nguy hiểm cho việc đánh dấu được định dạng độc đáo của bạn.
tại sao bạn buộc phải tính toán bất kỳ thứ gì? Float bên phải và cung cấp cho họ cùng một padding. – thenetimp
quá dễ dàng, một hạn chế mà tôi đã không đề cập trước đó là tôi muốn giữ sự sắp xếp theo chiều dọc mặc định (ở giữa) ngay cả khi các liên kết của tôi không có cùng một đệm. – inwpitrust
Bạn có hài lòng khi sử dụng CSS3 hay bạn cần hỗ trợ IE cũ? – Petah