我在Firefox上遇到了一个非常具体的图形实现问题。
我认为你可以通过测试这个fiddle来理解这个问题:在firefox上你会看到问题,在任何其他浏览器上你都会看到预期的结果(包括IE9)。
我需要的设计:
HTML代码:
<div class="main-wrapper">
<div class="container">
<div class="content upper">
<div class="right-block"><!-- This block is optionnal -->
<div class="icon"></div>
</div>
<div class="left-block">
<div class="vertically-centered">
<p>
Some dynamic text
</p>
</div>
</div>
</div>
<div class="content lower">
<div class="right-block"><!-- This block is optionnal -->
<div class="vertically-centered">
<span>
21,5°
</span>
</div>
</div>
<div class="left-block">
<div class="vertically-centered">
<p>
Some other dynamic text
</p>
</div>
</div>
</div>
</div>
</div>
CSS代码:
/* utilities */
.vertically-centered {
display: table;
height: 100%;
width: 100%;
}
.vertically-centered > * {
display: table-cell;
vertical-align: middle;
}
/* custom styles */
.container {
display: inline-block;
float: right;
max-width: 100%;
}
.content {
width: 100%;
margin: 5px 0px;
height: 85px;
}
.right-block, .left-block {
height: 100%;
}
.right-block {
float: right;
font-size: 42px;
margin-left: 5px;
background-color: lightblue;
}
.left-block {
font-size: 25px;
line-height: 25px;
overflow: hidden;
padding: 0 20px;
text-align: left;
background-color: lightgray;
}
.upper .right-block {
width: 85px;
}
.lower .right-block {
padding: 0 15px;
}
.icon {
position: relative;
top: 20%;
left: 20%;
width: 60%;
height: 60%;
background-color: orange;
}
我已尝试过的内容:
display: inline-block
div上放置一个.left-block
,但它不能满足两条线路上相同宽度的需要。display: inline-block
div上加.content
;在其他浏览器上使该行100%宽度,并在firefox上的.left-block
内创建一个很大的权利差距。white-space: nowrap
上使用.left-block
;没有帮助。.left-block
div浮动(向右或向左),但如果文本对于主容器来说太大,则它不起作用还有很多其他东西,但没有一个兼容所有浏览器(Chrome,Firefox,Safari,IE9 +,Edge)......
精确度,虽然我认为它不会改变任何东西:它是响应性的。
我正在尝试使用flexbox,但...... IE9 ......如果有人有建议的话。
答案 0 :(得分:0)
您可以使用CSS word-break属性在长词中间允许换行:
.content {
width: 100%;
margin: 5px 0px;
height: 85px;
word-break: break-all;
}
答案 1 :(得分:0)
我发现了一个带有flexbox的解决方案!
我使用display: flex
向.content
div添加了flex-direction: row-reserve
以保持元素的顺序,并且仍然可以将float: right
用于IE9。
此外,flex: auto
div上有一个.left-block
属性可以占用尽可能多的空间(注意:IE11需要 flex-basis
设置为能够计算 flex-grow
属性所需的空间。这就是为什么我在flex属性上使用auto
而不是0
的原因。See details )
已完成的CSS代码
.content {
width: 100%;
margin: 5px 0px;
height: 85px;
display: flex; /* Initialize flexbox */
flex-direction: row-reverse; /* keep the order of the element */
border: 1px dashed gray;
}
.left-block {
font-size: 25px;
line-height: 25px;
overflow: hidden;
padding: 0 20px;
text-align: left;
background-color: lightgray;
flex: auto; /* the text blocks take all the available space */
}
Here's the fiddle纠正。有时IE9需要2行文本而不是1行(文本比容器大2px,我不知道为什么......)但至少它是可读的!