我有一个div,随着用户键入文本区域而扩展,该文本区域将其文本复制到div中。我希望该div在碰到另一个div的外边缘(即其祖父母)的外部边缘时停止扩展其宽度,但是我在网上找不到解决方法。当前,当div击中外边缘时,它仅将自身移动到下面的下一行,直到它是该行上的唯一元素(我不希望这样做)。我希望它的高度向下扩展。

See this jsfiddle完全符合我的意思,然后输入第一个文本区域

我也不想对任何像素值(例如max-width: 16px;或其他)进行硬编码。我想让此动态足够动态,以使div可以扩展到多少空间都可以使用。



 function copyText(callingName, receivingName){
      var significantDiv = $('[name=' + callingName +']');
      var significantSpan = $("#" + receivingName);
      significantSpan.text(significantDiv.val());
    }//end copyText()

body{
	background-color: rgb(90, 90, 96);
	font-family: "Lucida Sans Unicode";
  font-weight:bold;
  font-size:30px
}

input[type=text]{
	border-radius:30px;
	background-color:rgb(128, 128, 137);
	border-style:none;
	padding:15px;
	outline:none;
	margin-bottom:10px;
	vertical-align: middle;
}

input[type=text]:focus{
	background-color:rgb(149, 149, 160);
}

div.addP{
	float:left;
	min-width:50%;
	max-width:50%;
}

.textAreaColumn{
	display:inline-block;
	vertical-align: top;
	outline: solid 1px lime;
}

#someText0Span{
	display: inline-block;

	outline: solid 1px orange;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<div class="addP" style= "outline:solid 1px blue;">space</div>
  <div class="addP" style="outline:solid 1px red"><!--Everything in this div is in the right column of info.-->
    <div class="inputRow">
      Type some text:
      <div class="textAreaColumn" id="someTextColumn">
        <div class="singleTextAreaContainer">
          <input type="text" name="someText0" onkeyup="copyText('someText0','someText0Span')">
        </div>
      </div>
    </div>
    <div class="inputRow">
      Some text:
      <div class="textAreaColumn" id="moreTextColumn">
        <div class="singleTextAreaContainer">
          <input type="text" name="moreText0"> <div id="someText0Span"></div>
        </div>
      </div>
    </div>
  </div>

最佳答案

由于您使用选择器的方式,我的代码有点难以理解,因此我从头开始,但是您应该能够在自己的代码中使用下面的操作



function copyText(callingName, receivingName){
      var significantDiv = $('[name=' + callingName +']');
      var significantSpan = $("#" + receivingName);
      significantSpan.text(significantDiv.val());
    }

body {
  padding: 20px
}

input {
  padding: 10px 15px;
  border: 2px solid;
}

input:focus {
  outline: none;
 }

[name] {
  margin-bottom: 20px;

 }

.container {
  width: 300px;
  border: 3px solid;
  margin: 20px auto;
  padding: 20px 10px;
  overflow: auto;
}


/*Code that you should pay attention to is below*/

input {
  float: left;

}

span {
  display: block;
  overflow: auto; /*turn element to block formatting context*/
  word-wrap: break-word;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" name='input'

onkeyup="copyText('input','output')">

<div class="container">
  <input type="text">
  <span id='output'></span>
</div>





这种工作方式是将输入浮动到左侧以使其脱离正常流,然后将输出范围变成一个块。通常,在浮动之前位于其下方的块元素将忽略该浮动元素,与它们位于同一行并在其下方滑动。

但是,随着跨度,我添加了一个属性:

overflow: auto;


这变成了block formatting context,这些元素的特征之一是它们尊重旁边的浮动元素的宽度,并且会紧挨着它们,占据浮动,增长和随着浮动大小的变化而动态缩小。

最后,我添加了:

word-wrap: break-word;


span的位置,以使长字跨多行。

请注意,使用浮动元素时,如果没有其他元素比容器中的浮动元素大,则父元素的高度将折叠。您可以使用clearfix解决方案来解决此问题

07-25 21:25
查看更多