通过<div>或<span> </span> </div>的对角线

时间:2013-07-11 19:56:29

标签: html css

我想要从<div><span>的右上角到左下角绘制一条对角线。问题是内容有时会更长或更短。所以,像静态图像这样的东西是行不通的。基本上我想要这里描述的内容(How to create a diagonal line within a table cell?),但需要<div><span>

这有一些有趣的想法:http://jsfiddle.net/zw3Ve/11/

这样做:http://css-tricks.com/forums/discussion/13384/diagonal-line/p1

这是在这篇文章中的重试:How to strike through obliquely with css

我似乎无法解决任何问题。看起来纯CSS解决方案应该在这里工作,但我只是没有技能来实现这一点。 jQuery也是我的选择。

5 个答案:

答案 0 :(得分:22)

您可以使用内联SVG背景,仅使用CSS而不使用javascript。

.background {
   // Draw an SVG top left to bottom right 
   background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' preserveAspectRatio='none' viewBox='0 0 10 10'> <path d='M0 0 L0 10 L10 10' fill='red' /></svg>");
   background-repeat:no-repeat;
   background-position:center center;
   //scale it 
   background-size: 100% 100%, auto;
}

看我的小提琴:

http://jsfiddle.net/3GWw2/

答案 1 :(得分:10)

第一个小提琴作为背景中的图像而不是很好吗?

http://jsfiddle.net/zw3Ve/410/

.line {
    display:inline-block;
    border: 1px solid #ccc;
    margin: 10px;
    padding: 10px;
    background:url(http://i.piccy.info/i7/c7a432fe0beb98a3a66f5b423b430423/1-5-1789/1066503/lol.png);
    background-size:100% 100%;
}

答案 2 :(得分:4)

实际上这更像是关于几何的问题而不是编码问题。使用正方形这很容易,但是对于矩形,您必须自己进行数学计算。还记得那些孩子抱怨他们永远不必在“现实生活”中计算对角线的长度吗? :P 这是我做的:

div.container /*makes a square container (300x300)*/
{
width: 300px;
height: 150px;
background-color: #aaa;
padding-top: 150px;
}
div.line
{
position: relative;
z-index: 1;
left: -61px; /*this is something I don't understand but apparently is required*/
width: 423px; /*since container is a square this equals to its diagonal: 300*1.41*/
height: 1px;
background-color: #000;
transform: rotate(45deg); /*again, this is easy since its a square. In rectangle you'll have to find a tangent*/
-ms-transform: rotate(45deg);
-webkit-transform: rotate(45deg);
}

HTML:
<div class="container">
<div class="line"></div>
</div>

和jsfiddle:http://jsfiddle.net/LWAKn/

答案 3 :(得分:4)

您可以像这样使用SVG图像:

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
<svg version="1.1" baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
 x="0px" y="0px" width="200px" height="50px" viewBox="0 0 200 50">
    <line fill="none" stroke="#000" x1="0" y1="0" x2="200" y2="50"/>
</svg>

将其设置为span或div的背景

.class-of-div-or-span { background: url("line.svg") no-repeat scroll 0 0 / 100% 100% transparent; }

注意:您必须提供范围display:blockdisplay:inline-block才能发挥作用。

您还可以内联svg,在对象标记中使用它或将其嵌入到CSS中。

答案 4 :(得分:3)

您可以使用线性渐变来完成此操作。例如,如果我想要一个从左下角到右上角对角切割的绿色和白色方块,我给它这个背景属性:

background: linear-gradient(to bottom right, white, white 50%, green 50%, green);

这意味着它在左上角以白色开始,一直是白色,一直到对角线。转换立即从白色变为绿色,没有实际渐变,因为两者都设置为50%。如果你想要一条灰线,你可以试试这个:

background: linear-gradient(to bottom right, white, white 48%, gray 48%, gray 52%, green 52%, green);