如何修改jquery-token-Input css文件以创建更大的文本区域和令牌,如下所述?

时间:2016-08-18 21:42:39

标签: css jquery-tokeninput

我正在使用jqueryInputToken和act-as-taggable-on gem。我能够使后端工作。但是,作为使用jqueryTokenInput插件的一部分,我的text_area变得如此纤薄,看起来更像是一个很小的text_field。 下面是我的text_area看起来像jQueryInput插件而没有悬停的图片: enter image description here

当您将“X”符号悬停以删除标签时,如下图所示:

enter image description here

我想修改css,以便text_area变大,令牌看起来如下所示:

enter image description here

我应该如何修改下面的css以达到text_field和标记所需的外观?

这是css:

/* Example tokeninput style #2: Mac Style */
fieldset.token-input-mac {
  position: relative;
  padding: 0;
  margin: 5px 0;
  background: #fff;
  width: 400px;
  border: 1px solid #A4BDEC;
  border-radius: 10px;
  -moz-border-radius: 10px;
  -webkit-border-radius: 10px;
}

fieldset.token-input-mac.token-input-dropdown-mac {
  border-radius: 10px 10px 0 0;
  -moz-border-radius: 10px 10px 0 0;
  -webkit-border-radius: 10px 10px 0 0;
  box-shadow: 0 5px 20px 0 rgba(0,0,0,0.25);
  -moz-box-shadow: 0 5px 20px 0 rgba(0,0,0,0.25);
  -webkit-box-shadow: 0 5px 20px 0 rgba(0,0,0,0.25);
}

ul.token-input-list-mac {
    position: relative;
    overflow: hidden;
    height: auto !important;
    cursor: text;
    font-size: 12px;
    min-height: 1px;
    z-index: 999;
    margin: 0;
    padding: 0;
    background: transparent;
}

ul.token-input-list-mac.error {
  border: 1px solid #C52020;
}

ul.token-input-list-mac li {
list-style-type: none;
}

li.token-input-token-mac p {
    display: inline;
    padding: 0;
    margin: 0;
}

li.token-input-token-mac span {
    color: #231C34;
    margin-left: 5px;
    font-weight: bold;
    cursor: pointer;
}

/* TOKENS */

li.token-input-token-mac {
    position: relative;
    display: inline-block;
    width: auto !important;
    font-size: 8pt;
    line-height: 12pt;
    margin: 0px 3px 3px 0px;
    padding: 4px 10px;
    background: none;
    background-color: #0F004E;
    color: #fefefe;
    cursor: default;
    float: left;
    font-weight: bold;
}

li.token-input-highlighted-token-mac {
    background-color: #231C34;
    color: #fefefe;
    font-weight: bold;
}

li.token-input-selected-token-mac {
    background-color: #231C34;
    color: #fefefe;
    font-weight: bold;
 }

li.token-input-highlighted-token-mac span.token-input-delete-token-mac {
    color: #fefefe;
    font-weight: bold;
}

li.token-input-selected-token-mac span.token-input-delete-token-mac {
    color: #fefefe;
    font-weight: bold;
}

li.token-input-input-token-mac {
    border: none;
    background: transparent;
    float: left;
    padding: 0;
    margin: 0;
}

li.token-input-input-token-mac input {
  width: 100px;
  padding: 3px;
  margin: 0;
}

div.token-input-dropdown-mac {
    position: absolute;
    border-top: none;
    left: -1px;
    right: -1px;
    background-color: #fefefe;
    overflow: hidden;
    cursor: default;
    font-size: 10pt;
}

div.token-input-dropdown-mac p {
    font-size: 8pt;
    margin: 0;
    padding: 0 10px;
    color: #fff;
}

div.token-input-dropdown-mac h3.token-input-dropdown-category-mac {
  font-size: 10pt;
  font-weight: bold;
  border: none;
  padding: 0 5px;
  margin: 0;
}

div.token-input-dropdown-mac ul {
    margin: 0;
    padding: 0;
}

div.token-input-dropdown-mac ul li {
    list-style-type: none;
    cursor: pointer;
    background: none;
    background-color: #fefefe;
    margin: 0;
    padding: 0 0 0 10px;
    color: #999;
    text-transform: uppercase;
}

div.token-input-dropdown-mac ul li.token-input-dropdown-item-mac span.token-input-dropdown-item-description-mac {
    float: right;
    font-size: 8pt;
    font-style: italic;
    padding: 0 10px 0 0;
    color: #999;
    text-transform: uppercase;;
}

div.token-input-dropdown-mac ul li strong {
    font-weight: bold;
    text-decoration: underline;
    color: #999;
    text-transform: uppercase;
}

div.token-input-dropdown-mac ul li.token-input-selected-dropdown-item-mac,
div.token-input-dropdown-mac ul li.token-input-selected-dropdown-item-mac.odd {
    background: #0F004E;
    color: #bb8322; //Official Red
    text-transform: uppercase;
    font-weight: bold;
}

div.token-input-dropdown-mac ul li.token-input-selected-dropdown-item-mac:hover,
div.token-input-dropdown-mac ul li.token-input-selected-dropdown-item-mac.odd:hover,
div.token-input-dropdown-mac ul li.token-input-selected-dropdown-item-mac:focus,
div.token-input-dropdown-mac ul li.token-input-selected-dropdown-item-mac.odd:focus {
    color: #fff;
 }

div.token-input-dropdown-mac ul li.token-input-selected-dropdown-item-mac span.token-input-dropdown-item-description-mac,
 div.token-input-dropdown-mac ul li.token-input-selected-dropdown-item-mac.odd span.token-input-dropdown-item-description-mac {
    color: #fff;
}

1 个答案:

答案 0 :(得分:0)

我一直在努力做这样的事情并且至少有一个粗略的版本,所以我会把它放在这里,以防它有用。我使用了Facebook主题 - 看起来你使用了不同的主题。我提到这一点,因为这会影响我的答案中的类名。另外我认为Facebook可能更像是你所追求的(见下面的化妆品)。

我将它分成两部分:首先是结构部分,然后是化妆品部分。

结构

我的部分问题是由于令牌输入代码用自己的一些代替了HTML。我写了这个HTML



<div id="searchBar">
<input type="text" id="bigTextInput" />
</div>
&#13;
&#13;
&#13;

以及insert-token-input-here调用的组合:

$("#bigTextInput").tokenInput(token_url, {
    theme: 'facebook',...

并且用户输入了一些内容,使其看起来像这样(带有我的评论):

&#13;
&#13;
<div id="searchBar">
    <ul class="token-input-list-facebook">
      <li class="token-input-token-facebook"> <!-- one of these per user input -->
        <p>first thing the user entered
          <span class="token-input-delete-token-facebook">X</span></p></li>
      <li class="token-input-token-facebook">
        <p>second thing the user entered
          <span class="token-input-delete-token-facebook">X</span></p></li>
      <li class="token-input-input-token-facebook"> <!-- 1 on the end for entering the next selection -->
        <input id="token-input-Y"> <!-- Y = whatever Id you gave to the original input (bigTextInput in my case) -->
      </li>
    </ul>
    <input id=Y display:none /> <!--	the thing you created, but then is hidden and replaced by the ul etc. -->
</div>
&#13;
&#13;
&#13;

我创建的input已被隐藏起来,取而代之的是ul,用户输入的每件li额外li 1}}让用户添加更多东西。

要成功更改高度,我必须在ul上设置我想要的高度:

$("ul.token-input-list-facebook").height(newHeight + "px"); 

奖金结构内容 - 自动调整大小

我从一个大盒子开始,但如果用户只输入少量东西,这看起来并不好。所以我想我会尝试从小开始(单线高)然后按需增长。

为此,我确保ul不会创建滚动条:

&#13;
&#13;
ul.token-input-list-facebook {
	overflow-x: hidden;
	overflow-y: hidden;
}
&#13;
&#13;
&#13;

然后如果内容溢出,我会重新调整大小。我通过在令牌输入的添加和删除事件中添加处理程序来检查溢出:

&#13;
&#13;
$("#bigTextInput").tokenInput(token_url, {
    theme: 'facebook',
    onAdd: function(){
                growSearchBoxSizes();
           },
    onDelete: function(){
                shrinkSearchBoxSizes();
              }
});
&#13;
&#13;
&#13;

我发现在growSearchBoxSizes中检测到溢出的最佳方法是比较封闭div的offsetHeightscrollHeight属性:

&#13;
&#13;
var heightA = parseFloat($("#searchBar")[0].offsetHeight);
var heightB = parseFloat($("#searchBar")[0].scrollHeight);
&#13;
&#13;
&#13;

我建议您将这些内容写入console.log,尝试输入时显示的内容并且不会溢出,并且当它们显示存在溢出时,需要添加1行高度的代码

我无法想出一个很好的方法来检测何时缩小(例如在用户删除了一行的东西之后),所以在删除处理程序中我缩小了框降低到它的起始大小,然后将其恢复到所需的任何高度,即直到没有溢出。 (一个黑客,但它似乎工作。)

实际上,由于wanting to prevent what the user had already entered from showing up in the auto-completion list for later inputs,我已经在使用处理程序来添加和删除事件,您可能还需要考虑这些事件。

化妆品

我之所以建议您可能想要切换到Facebook主题的原因是它始终根据您的需要提供X.颜色和形状不是你想要的,但我希望这应该只是在CSS中定义覆盖的问题。