首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文本区域宽度受字体类型影响。如何解决这个问题?

文本区域宽度受字体类型影响。如何解决这个问题?
EN

Stack Overflow用户
提问于 2012-07-21 03:31:56
回答 2查看 850关注 0票数 2

我有一个基本上是一个文本区的注释框。我将cols属性设置为113个cols,它在火狐中看起来很好,但在chrome或IE9中就不行了。

然后我将字体更改为固定宽度的字体,3个浏览器都可以正确显示它。关于它的事情是,它就是丑陋。

你知道为什么它只会计算firefox中列的宽度,而不会计算其他列的宽度吗?

谢谢。

下面是CSS:

代码语言:javascript
复制
#wrap_mid #nav_body .entry_container .comment_new_container .ta_new_comment
{
    border: 1px solid #d5d5d5;
    border-radius: 3px;
    color: #999;
    font-family: Arial, Helvetica, sans-serif;
    font-size: small;
    padding: 3px 4px;
    width: 795px;
    resize: none;

}

下面是HTML:

代码语言:javascript
复制
<div class="comment_new_container">
<img src="img/avatar45.png" />
<textarea class="ta_new_comment" cols="113" rows="0">Write a comment...</textarea>
<!-- Float fix --> 
<div class="clear">&nbsp;</div>
</div> <!-- END comment_new_container -->

下面是JQuery:

代码语言:javascript
复制
<script type="text/javascript">

$(function(){

  $(".ta_new_comment").autoGrow();

});

</script>

这是JQuery插件:

代码语言:javascript
复制
/*!
 * ----------------------------------------------------------------------------
 * "THE BEER-WARE LICENSE" (Revision 42):
 * <jevin9@gmail.com> wrote this file. As long as you retain this notice you
 * can do whatever you want with this stuff. If we meet some day, and you think
 * this stuff is worth it, you can buy me a beer in return. Jevin O. Sewaruth
 * ----------------------------------------------------------------------------
 *
 * Autogrow Textarea Plugin Version v2.0
 * http://www.technoreply.com/autogrow-textarea-plugin-version-2-0
 *
 * Date: March 13, 2011
 */
jQuery.fn.autoGrow = function(){

    return this.each(function(){
        // Variables
        var colsDefault = this.cols;
        var rowsDefault = this.rows;

        //Functions

        var grow = function() {
            growByRef(this);
        }



        var onFocus = function(obj) {

      if ($(this).val() != 'Write a comment...') {
        return;
      } else {
        $(this).parents(".comment_new_container").children("img").show();
        //$(this).height(34);
        $(this).width(745);
        $(this).val(''); 
      }

        }

        var onBlur = function(obj) {

      if ($(this).val().length == 0) { 
        $(this).parents(".comment_new_container").children("img").hide();
        //$(this).height(16);
        $(this).width(795);
        $(this).val('Write a comment...');
      } 

        }


        var growByRef = function(obj) {

        var new_comment = '';

      if (!obj.shiftKey && obj.keyCode == 13) {

        obj.preventDefault();

        new_comment += '<div class="comment_container" id="001">';
        new_comment += '<a href="#"><i class="comment_delete">&nbsp;</i></a>';
        new_comment += '<img src="img/avatar45.png" />';
        new_comment += '<a href="/">Mickey Mouse</a>';
        new_comment += '<br/>';
        new_comment += '<div class="comment_content">' + $(this).val().replace(/\n/g, '<br />'); + '</div> <!-- End comment_content -->';
        new_comment += '<div class="comment_timestamp">13 minutes ago</div> <!-- End comment_timestamp -->';
        new_comment += '</div> <!-- End comment_container -->';

        $(new_comment).insertBefore($(this).parents(".comment_new_container"));

            var comment_total = parseInt($('.social_menu_right li a').children('.meta.comment_total').text(), 10) + 1;
          $('.social_menu_right li a').children('.meta.comment_total').text(comment_total);


        $(this).val('Write a comment...');
        $(this).blur();
        growByRef(this);



      } else {

        var linesCount = 0;
        var lines = obj.value.split('\n');

        for (var i=lines.length-1; i>=0; --i)
        {
          linesCount += Math.floor((lines[i].length / colsDefault) + 1);
        }

        if (linesCount >= rowsDefault) {
          obj.rows = linesCount + 1;
        } else {
          obj.rows = rowsDefault;           
        }

            }

    }

        var characterWidth = function (obj){
            var characterWidth = 0;
            var temp1 = 0;
            var temp2 = 0;
            var tempCols = obj.cols;

            obj.cols = 1;
            temp1 = obj.offsetWidth;
            obj.cols = 2;
            temp2 = obj.offsetWidth;
            characterWidth = temp2 - temp1;
            obj.cols = tempCols;

            return characterWidth;
        }

        // Manipulations

        $(this).css("width","795");
        $(this).css("height","auto");
        $(this).css("overflow","hidden");

        this.style.width = ((characterWidth(this) * this.cols) + 6) + "px";

        $(this).bind("focus", onFocus);
        $(this).bind("blur", onBlur);
        $(this).bind("keypress", growByRef);
        $(this).bind("keyup", grow);

    });
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-21 03:38:23

顾名思义,等宽字体对于每个字母、数字等都是相同的宽度(按字符)。这意味着113个字符的长度总是相同的,而大多数字体的“M”比“I”更宽,这使得文本的总宽度有所不同。

请尝试使用CSS width属性指定宽度。另外,不要忘记你在互联网上找到的几乎所有的输入域都是等宽字体的。

票数 3
EN

Stack Overflow用户

发布于 2012-07-21 03:33:42

使用CSS并定义文本区的宽度/高度

去掉cols和rows标签并使用CSS

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11585841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档