How do I resize a div automatically to the size of its contents when the contents of the div have changed?

后端 未结 3 714
庸人自扰
庸人自扰 2021-01-06 02:58

At the moment, I have this DIV with a registration form centered over the page. The contents of the DIV come from an ascx-page. This is done nicely. Now, if the user tries t

相关标签:
3条回答
  • 2021-01-06 03:26

    I've never used SimpleModal, but from the examples on their site it looks like you can set the container CSS. If you want the height to adjust, try setting the height to auto

    $("#sample").modal({
      containerCss:{
        backgroundColor:"#fff",
        borderColor:"#0063dc",
        height:450,
        padding:0,
        width:830
      }
    });
    

    Although the example doesn't have it, I'd think you need to add px after the height and width in quotes (e.g. "450px").


    Ok here is another idea. Maybe this is too much, but add a hidden input field:

    <div id="myDiv">
      <form ...>
        Enter your name: <input id="txtYourName" type="text" name="YourName" value="" />
        <span id="errorYourName"></span>
        <input type="submit" ... />
        <input id="updated" type="hidden" />
      </form>
    </div>
    

    then attach a change event which is triggered at the same time you update the error message.

    $(document).ready(function() {
      $("#txtYourName").live("blur", function() {
        if (validateInput($("#txtYourName").val())) {
          $("#errorYourName").html("");
          // entry 1
        } else {
          // entry 2
          $("#errorYourName").html("This name is not valid.");
          $("#updated").trigger('change');
        }
      });
      $("#updated").change(function(){
        // resize the modal window & reposition it
      })
    });
    

    This is untested and it may be going overboard, but I don't see an update function in SimpleModal.


    Update : Sorry I figured out that blur isn't supported with live event. So I did some further testing and came up with a working demo. I posted it in this pastebin (ignore the included simpleModal code at the bottom). Here is the essential code

    CSS

    #myDiv { line-Height: 25px; }
    #simplemodal-container { background-color:#444; border:8px solid #777; padding: 12px; }
    .simplemodal-wrap { overflow: hidden !important; }
    .error { color: #f00; display: none; }
    input { float: right; }
    

    HTML

    <div id="myDiv">
      <form>
        What is your name: <input id="txtYourName" type="text" name="YourName" value="" /><br>
        <div id="errorYourName" class="error">This name isn't Arthur.</div>
    
        What is your quest: <input id="txtYourQuest" type="text" name="YourQuest" value="" /><br>
        <div id="errorYourQuest" class="error">This quest must be for the Grail.</div>
    
        What is your favorite color: <input id="txtYourColor" type="text" name="YourColor" value="" /><br>
        <div id="errorYourColor" class="error">Sorry, you must like red or blue.</div>
    
        What is the air speed velocity of an unladen swallow:<br>
        Type:
        <select>
         <option>African</option>
         <option>European</option>
        </select>
        <input id="txtYourGuess" type="text" name="YourGuess" value="" /><br>
        <div id="errorYourGuess" class="error">This guess stinks.</div>
        <hr>
        <input id="submitMe" type="submit" />
      </form>
    </div>
    

    Script

    $(document).ready(function(){
      $("#myDiv").modal({
       containerCss:{
        height: '165px',
        width: '350px'
       }
     })
     $("#txtYourName").focus();
    
     addValidate('#txtYourName','Arthur','#errorYourName');
     addValidate('#txtYourQuest','Grail|grail','#errorYourQuest');
     addValidate('#txtYourColor','red|blue','#errorYourColor');
     addValidate('#txtYourGuess','11|24','#errorYourGuess'); // See http://www.style.org/unladenswallow/ ;)
    
      $("#myDiv form").change(function() {
       // This is called if there are any changes to the form... added here for an example
       // alert('Form change detected');
      });
    })
    
    function addValidate(el,valid,err){
     $(el).blur(function() {
      if ( $(el).val().length > 0 && !$(el).val().match(valid) ) {
       if ($(err).is(':hidden')) {
        $('#simplemodal-container').animate({'height': ($('#simplemodal-container').height() + 25) + 'px'},1000);
        $(err).slideDown(1000);
       }
      } else {
       // entry 2
       if ($(err).is(':visible')) {
        $('#simplemodal-container').animate({'height': ($('#simplemodal-container').height() - 25) + 'px'},1000);
        $(err).slideUp(1000);
       }
      }
     });
    }
    
    0 讨论(0)
  • 2021-01-06 03:28

    Old fashioned tables are (still) great at centering things, fast, fluid and code free.

    <table width=100% height=100%><tr><td align=center valign=center>
        <table><tr><td style="yourStyle">
            your Content
        </td></tr></table>
    </td></tr></tabĺe>
    
    CSS: HTML,BODY {height:100%; width:100%}
    
    0 讨论(0)
  • 2021-01-06 03:37

    Jquery:

    $(document).ready(function() {
    
    var originalFontSize = 12;
    
    var sectionWidth = $('#sidebar').width();
    
    
    
    $('#sidebar span').each(function(){
    
        var spanWidth = $(this).width();
    
        var newFontSize = (sectionWidth/spanWidth) * originalFontSize;
    
        $(this).css({"font-size" : newFontSize, "line-height" : newFontSize/1.2 + "px"});
    
    });
    
    });
    
    </script>
    

    div:

    <div id="sidebar">
    
    <span>fits the width of the parent</span><br />
    
    <span>Hello</span><br />
    
    <span>my</span><br />
    
    <span>name</span><br />
    
    <span>is</span><br />
    
    <span>john</span><br />
    
    <span>1</span><br />
    
    <span>23</span><br />
    
    <span>456</span><br />
    
    <span>12345678910</span><br />
    
    <span>the font size in the span adjusts to the width</span><br />
    
    </id>
    

    preview http://jbdes.net/dev/js/fontsize.html

    0 讨论(0)
提交回复
热议问题