Ответ 1
Я не знаю, лучший ли это, но я не могу сделать это с помощью CSS. Мой ответ в jQuery:
$(function(){
$('.crossOut').each(function(i){
var jTemp = $(this),
nWidth = jTemp.innerWidth(),
nHeight = jTemp.innerHeight(),
sDomTemp = '<div style="position:absolute; border-color: transparent black white white; border-style:solid; border-width:'+nHeight +'px '+nWidth +'px 0px 0px; width:0; height:0; margin-top:-'+nHeight+'px; z-index:-2"></div>';
sDomTemp += '<div style="position:absolute; border-color: transparent white white white; border-style:solid; border-width:'+nHeight +'px '+nWidth +'px 0px 0px; width:0; height:0; margin-top:-'+(nHeight-1)+'px; z-index:-1"></div>';
jTemp.append(sDomTemp);
});
});
или
http://jsfiddle.net/zw3Ve/16/ (с очистителем класса CSS)
Часть CSS:
.crossOut .child{
position:absolute;
width:0;
height:0;
border-style:solid;
}
.crossOut .black-triangle{
z-index:-2;
border-color: transparent black white white;
}
.crossOut .white-triangle{
border-color: transparent white white white;
z-index:-1;
}
Код jQuery:
$(function(){
$('.crossOut').each(function(i){
var jTemp = $(this),
nWidth = jTemp.innerWidth(),
nHeight = jTemp.innerHeight(),
sDomTemp = '<div class="child black-triangle" style="border-width:'+nHeight +'px '+nWidth +'px 0px 0px; margin-top:-'+nHeight+'px; "></div>';
sDomTemp += '<div class="child white-triangle" style="border-width:'+nHeight +'px '+nWidth +'px 0px 0px; margin-top:-'+(nHeight-1)+'px;"></div>';
jTemp.append(sDomTemp);
});
});
Хорошо, что он работает с любой шириной и высотой ячейки таблицы.
Edit:
Я был недоволен качеством рендеринга треугольников с границами CSS, поэтому я использовал css-rotation. Я думаю, что это лучшая работа (и линии оказываются лучше):
(Использование -sand-transform для IE6, поэтому использование необязательно.)
Edit2: Последняя версия не получила поддержки IE7-IE8 (кажется, что -sand-transform работает только в стилях CSS, а не в стилях, написанных JavaScript). Я сделал версию с совместимостью со старыми браузерами: