控制使用CSS列属性的文本样式 [英] Take control of text styled with css columns attribute

查看:91
本文介绍了控制使用CSS列属性的文本样式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

成分:包含一些我们不知道长度的文字的 div 。我们对文本的了解仅仅是它包含了一些关键字,例如'mango',而且这些关键字必须放在新列的开始处(例如那些关键字字幕)。



问题:有没有一种方法可以通过HTML5 + CSS3实现此目标不使用JS,jQuery或一些基于脚本的补丁)?

实际情况(DEMO):

div {columns:2;宽度:100%; height:auto;}

 < div> Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmodtempor incididunt ut labore et dolore magna aliqua。请将您的信息发送给我们,我们会尽快处理。MANGO ullamco laboris nisi ut aliquip ex ea commodoconsequat。 Duis aute irure dolor in renhenderit in voluptate velit essecillum dolore eu fugiat nulla pariatur。 Excepteur sint occaecat cupidatat nonproident,sunt in culpa qui officia deserunt mollit anim id est laborum。< / div>  

b
$ b

编辑:为了更好地理解这个问题,我添加了一个注释,即我们不知道任何关于将显示的文本。因此,可能包含关键字(在本例中为 mango )或不包含。这个问题的目的是如何控制将显示的文本。

解决方案

这是一种方法,其中一个替换大写的单词,以便将它们与其下面的文本一起包裹在元素中。



有了这个,你还可以处理2个单词并获得3列等。


$ b

window.addEventListener( load(){var div = document.querySelector('div'); div.innerHTML ='< span>'+ div.innerHTML.replace(/(\ b [AZ] + \ b)/ g)'< / span>< span> $ 1')+'< / span>});

  div {-webkit-columns:2; -moz-columns:2;栏目:2;宽度:100%; height:auto;} div span {display:block; -webkit-column-break-inside:avoid; page-break-inside:avoid; break-inside:avoid;}  

< div> Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。 Ut enim ad minim veniam,quis nostrud MANGO ullamco laboris nisi ut aliquip ex ea commodo consequat。 Duis aute irure dolor in renhenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。 Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum。< / div>






如果您在浏览器支持方面遇到问题,请点击此处Flexbox版本



div {display:flex;};}};

 <宽度:100%; height:auto;} div span + span {margin-left:10px;}  

 < DIV> Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。 Ut enim ad minim veniam,quis nostrud MANGO ullamco laboris nisi ut aliquip ex ea commodo consequat。 Duis aute irure dolor in renhenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。 Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum。< / div>  






这里是一个表格版本



  window.addEventListener(load,function(){var div = document.querySelector('div'); div.innerHTML ='< span> ;'+ div.innerHTML.replace(/(\ b [AZ] + \ b)/ g,'< / span>< span> $ 1')+'< / span>});  

div {display:table;宽度:100%; height:auto;} div span {display:table-cell;}

< DIV> Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。 Ut enim ad minim veniam,quis nostrud MANGO ullamco laboris nisi ut aliquip ex ea commodo consequat。 Duis aute irure dolor in renhenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。 Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum。< / div>






如果您想要自行设置样式和/或大写字母,只需将其包含一个额外元素'< / span>< span>< span> $ 1< / span>' snippetdata-lang =jsdata-hide =falsedata-console =truedata-babel =false>

  window.addEventListener(load,function(){var div = document.querySelector('div'); div.innerHTML ='< span>' + div.innerHTML.replace(/(\ b [AZ] + \ b)/ g,'< / span>< span>< span> $ 1< / span>')+'<   

div {-webkit-columns :2; -moz-columns:2;栏目:2;宽度:100%; height:auto;} div span {display:block; -webkit-column-break-inside:avoid; page-break-inside:avoid; break-inside:avoid;} div span span {/ * display:inline-block;取消注释以避免换行* / color:orange; font-weight:bold; font-style:italic;}

< div> Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。 Ut enim ad minim veniam,quis nostrud MANGO ullamco laboris nisi ut aliquip ex ea commodo consequat。 Duis aute irure dolor in renhenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。 Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum。< / div>


Ingredients: a div containing some text which we don't know the length of. What we know about the text is just it contains some keywords, 'mango' for example, and those keyword must placed at the start of a new column (like those keyword are subtitles).

Question: Is there a way to achieve this goal with HTML5 + CSS3 (preferably without using JS, jQuery or some script-based-patches)?

Actual situation (DEMO):

div {
  columns: 2;
  width: 100%;
  height: auto;
}

<div>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud MANGO ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>

EDIT: To understand better the question, I add the note that we don't know anything about the text that will be shown. So it may contain the keyword (in this case mango) or not. The aim of the question is how to take control over the text that will be shown.

解决方案

Here is one way, where one replace the capitalized words so the will be wrapped in an element along with their following text.

With this you can also deal with 2 words and get 3 columns etc.

window.addEventListener("load", function() {
  var div = document.querySelector('div');
  div.innerHTML = '<span>' + div.innerHTML.replace(/(\b[A-Z]+\b)/g, '</span><span>$1') + '</span>'
});

div {
  -webkit-columns: 2;
  -moz-columns: 2;
  columns: 2;
  width: 100%;
  height: auto;
}

div span {
  display: block;
  -webkit-column-break-inside: avoid;
  page-break-inside: avoid;
  break-inside: avoid;
}

<div>
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud MANGO ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
  reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>


If you get issues with browser support, here is a Flexbox version

window.addEventListener("load", function() {
  var div = document.querySelector('div');
  div.innerHTML = '<span>' + div.innerHTML.replace(/(\b[A-Z]+\b)/g, '</span><span>$1') + '</span>'
});

div {
  display: flex;
  width: 100%;
  height: auto;
}

div span + span {
  margin-left: 10px;
}

<div>
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud MANGO ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>


And here is a Table version

window.addEventListener("load", function() {
  var div = document.querySelector('div');
  div.innerHTML = '<span>' + div.innerHTML.replace(/(\b[A-Z]+\b)/g, '</span><span>$1') + '</span>'
});

div {
  display: table;
  width: 100%;
  height: auto;
}
div span {
  display: table-cell;
}

<div>
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud MANGO ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>


If you want to style and/or have the capitalized word on a line by itself, you simply wrap it an extra element '</span><span><span>$1</span>'

window.addEventListener("load", function() {
  var div = document.querySelector('div');
  div.innerHTML = '<span>' + div.innerHTML.replace(/(\b[A-Z]+\b)/g, '</span><span><span>$1</span>') + '</span>'
});

div {
  -webkit-columns: 2;
  -moz-columns: 2;
  columns: 2;
  width: 100%;
  height: auto;
}

div span {
  display: block;
  -webkit-column-break-inside: avoid;
  page-break-inside: avoid;
  break-inside: avoid;
}

div span span {
  /* display: inline-block;       uncomment this to avoid new line  */
  color: orange;
  font-weight: bold;
  font-style: italic;
}

<div>
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud MANGO ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
  reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>

这篇关于控制使用CSS列属性的文本样式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆