2015-09-05 112 views

回答

9

为什么我的textarea的上涨比它的邻居?

不是。

让我解释一下。

首先,有点背景:

spantextarea元素(默认)inline elements

浏览器通常在内联元素下面为下行者提供一点空白。

要了解伸...

看这行文字。请注意,没有违反基准的字母。

现在来看看下面的句子:

通过刚刚越过他可能逃走的桥梁。

请注意字母“y”,“j”,“p”和“g”。这些字母违反了baseline,在排版中被称为“descenders”。

[enter image description here

来源:Wikipedia.org

你看到的差距不是保证金或填充,而只是提供空间来容纳这些小写字母浏览器。总之,这叫做baseline alignment

baseline

在大多数字母“坐”而在其下面伸延长线。

[enter image description here

来源:Wikipedia.org

那么,为什么,有人可能会问,是否该浏览器textarea提供这个空间,imginput和其他内联元素,不需要下行者的空间?

因为浏览器会调整您在同一行中的某个元素之前或之后可能有文本的可能性。现在

,你的形象和代码...

乍一看它清楚地看到,textarea达比span元素较高。但是,如果你仔细看看...

enter image description here

...你会看到他们是完全对齐。 spantextarea都为下行提供了空间。

enter image description here

您添加,因为textarea边境线明确描述的箱子,同时排除伸空间有助于错位外观的边界,但span边框环绕文字和下降装置空间 。如果删除红色边框,则不对齐不明显。

在解决方案方面,这里有两种选择:

  1. 添加vertical-align: bottomtextarea规则或
  2. 添加display: blocktextarea规则。
+1

梦幻般的答案- 谢谢! –

+1

OMG最佳答案我已阅读...但是,这里有一个问题..如果你有一个div ..和文本是“新”...没有下行...但是,你可以清楚地看到一个区别下降者的空间......有没有一种方法可以对文本进行“缩小包装”。顺便说一句,这是一个只有文本的div ......不是内部跨度或任何东西。 – carinlynchin

+0

@carinlynchin,尝试使用'行高'属性... https://stackoverflow.com/q/45112764/3597276 –

2

亚当,

如果你添加以下到您现有的CSS,你应该得到你想要的结果。

.left{ 
    display:inline-block; 
    vertical-align: text-bottom; 
} 

textarea{ 
    margin:0px; 
    vertical-align: text-bottom; 
} 

您可以在以下网址看到一个工作示例:https://jsfiddle.net/YOOOEE/z8pwpms6/

+1

1)这是有效的,但唯一必要的改变是'textarea {vertical-align:text-bottom; }'。其余是无关的。特别是'textarea'的默认边距是'0px'。 2)我认为一个完整的答案将解决“为什么”,而不仅仅是“修复”。 IE浏览器。 user1843159在关于基线的评论中说了些什么。 –

+0

@AdamZerner在我看来,需要在Firefox上使用'margin:0'来对齐两个边框,而不是在Chrome中。 – Zimmi

+2

@AdamZerner每个浏览器都有自己的元素默认样式,这些样式对于不同的HTML元素并不总是相同的。与用户“Zimmi”一样,你可能只需要某些特定浏览器的样式。这就是为什么它也建议使用像[normalize.css](https://necolas.github.io/normalize.css/)在大多数浏览器中具有相同的基本风格... –

0

如果你有两个span元素,高将是相同的。跨度显示:内联;默认。

<span class="left"> 
    <span>one</span> 
    <span>two</span> 
    </span> 
<span class="right"> 
    <span>one</span> 
    <span>two</span> 
</span> 

所有的浏览器有文字区域的默认样式:

textarea { 
    -webkit-appearance: textarea; 
    background-color: white; 
    border: 1px solid; 
    border-image-source: initial; 
    border-image-slice: initial; 
    border-image-width: initial; 
    border-image-outset: initial; 
    border-image-repeat: initial; 
    -webkit-rtl-ordering: logical; 
    -webkit-user-select: text; 
    flex-direction: column; 
    resize: auto; 
    cursor: auto; 
    padding: 2px; 
    white-space: pre-wrap; 
    word-wrap: break-word; 
} 
input, textarea, keygen, select, button { 
    margin: 0em; 
    font: 13.3333px Arial; 
    text-rendering: auto; 
    color: initial; 
    letter-spacing: normal; 
    word-spacing: normal; 
    text-transform: none; 
    text-indent: 0px; 
    text-shadow: none; 
    display: inline-block; 
    text-align: start; 
} 

我的解决办法:

.parent { 
    border: 1px solid green; 
    display: flex; 
}