2017-07-19 43 views
0

我试图实现基于this PhD thesis以下布局:A4论文般的CSS:从主塔以引文和它们放置到其他

enter image description here

但有一个纯CSS方式从一列中取出HTML引文并将它们排列在另一列中?

.Grid { 
 
    display: flex; 
 
} 
 

 
.Grid-cell { 
 
    border: 1px solid black; 
 
} 
 

 
.Grid-cell:nth-of-type(1) { 
 
    flex: 1 1 70%; 
 
} 
 

 
.Grid-cell:nth-of-type(2) { 
 
    flex: 1 1 30%; 
 
    padding-left: 20px; 
 
} 
 

 
q { 
 
    /* Insert here */ 
 
}
<div class="Grid"> 
 
    <div class="Grid-cell"> 
 
    <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia 
 
     voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi <q cite="http://www.mashable.com/">nesciunt</q>. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci 
 
     velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis 
 
     autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</p> 
 
    </div> 
 
    <div class="Grid-cell"><!-- Insert here --></div> 
 
</div>

+0

在你的榜样,会出现什么在最右边的列? – showdev

回答

1

我想你可能会得太多这一个位。您不需要将其设置为弹性布局,也不需要将元素从一个位置复制到另一个位置。所有你真正需要的是打破q元素流出,并显示在预定义的边界。我们只能使用padding-rightposition: absolute

这里举例:

.Grid { 
 
    padding-right: 30%; 
 
} 
 

 
.Grid-cell { 
 
    border: 1px solid black; 
 
} 
 

 
q[cite] { 
 
    position: absolute; 
 
    left: 75%; 
 
    max-width: 20%; 
 
} 
 

 
q[cite]:before { 
 
    content: attr(data-index); 
 
}
<div class="Grid"> 
 
    <div class="Grid-cell"> 
 
    <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia 
 
     voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi<sup>1</sup> <q data-index="1. " cite="http://www.mashable.com/">nesciunt</q>. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci 
 
     velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis 
 
     autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</p> 
 
    </div> 
 
</div>

如果没有定义的绝对定位的元素topbottom财产,他们决定在那里他们的土地基础上,他们会出现在文档流。因此,只设置position: absoluteleft: 75%我们已经打破了您的引用,保持其来源,并使用data-index财产结合content: attr(data-index);,即使您有能力给您的引文编号以匹配其内联源。

+0

嗨,flexbox的好消息!然而,有一个问题 - 当有多个引用靠近彼此时该怎么办? https://jsfiddle.net/m1zhvmss/ –

+1

在这种情况下,您需要提供1个'q'元素,然后将所有引用放在那里,如下所示:' Blah Bleh'然后添加一个CSS规则,比如'q [cite]> q {position:static;显示:inline-block; margin-right:20px; }' –

+0

辉煌!谢谢! –

1

不使用flexbox。

但是使用内部跨度和定位可以实现。

顺便提一句,我用cite标签代替q标签,因为q呈现自动报价。有可能使用CSS删除它们,但我没有考虑到这一点。

.Grid { 
 
    display: flex; 
 
} 
 

 
.Grid-cell { 
 
    border: 1px solid black; 
 
} 
 

 
.Grid-cell:nth-of-type(1) { 
 
    flex: 1 1 70%; 
 
    position: relative; 
 
    
 
} 
 

 
.Grid-cell:nth-of-type(2) { 
 
    flex: 1 1 30%; 
 
    padding-left: 20px; 
 
} 
 

 
sup { 
 
    font-weight:bold; 
 
    color: red; 
 
    font-size:.6em; 
 
} 
 

 
cite span { 
 
    position: absolute; 
 
    right:0; 
 
    margin-right: -8em; 
 
    
 
}
<div class="Grid"> 
 
    <div class="Grid-cell"> 
 
    <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia 
 
     voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi<sup>1</sup><cite cite="http://www.mashable.com/"><span>1. My Citation</span></cite>. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci 
 
     velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis 
 
     autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</p> 
 
    </div> 
 
    <div class="Grid-cell"><!-- Insert here --></div> 
 
</div>

+0

你好,就像Josh的回答一样,当有多个引用彼此靠近时,我很困难:https://jsfiddle.net/dtL2x61L/ - 你能想到什么吗? –

+1

仅用HTML和CSS就可以做到这一点。有时需要javascript的帮助。 –

相关问题