What HTML/CSS would you use to create a text input with a background?

前端 未结 7 727
甜味超标
甜味超标 2021-02-03 10:28

I have a website design that includes text input fields that look like this:

Input Field http://img401.imageshack.us/img401/4453/picture1ts2.png

I\'m wondering w

相关标签:
7条回答
  • 2021-02-03 10:36

    AFAIK, the background scrolling problem can be solved either in Firefox and friends, OR Internet Exploder; but not make everyone happy at once.

    I would normally have said to style the input directly, but now that I think of it that div example doesn't sound too bad and should take care of your background image scrolling problem.

    In that case you'd set a div as position:relative, and put the input inside it with proper padding and width (or 100% width if padding is 0), background transparent, and put an image on the div.

    0 讨论(0)
  • 2021-02-03 10:38

    Have you evaluated using background image like this:

    <style type="text/css"> 
      input{ 
      background-color: #AAAAAA; 
      background-image: url('http://mysite.com/input.gif'); 
      border: 0px; 
      font-family: verdana; 
      font-size: 10px; 
      color: #0000FF; 
    } 
    

    0 讨论(0)
  • 2021-02-03 10:39

    The easiest way to get rid of the overflow without JavaScript is simple:

    1. Create a 3 spans, and set their heights to the height of the image.
    2. Cut the image into 3 parts, ensuring you cut the image such that the left and right round parts will be on the 1st and 3rd images respectively.
    3. Set the background of the 1st span to the image with the left border, and set it to no-repeat.
    4. Set the background of the third span to the image with the right border and set it to no-repeat.
    5. Put the input inside the middle span, remembering to set its height to the height of the spans, and its background to the 2nd image, and repeat-x only.
    6. That will ensure that the input will seem to expand horizontally once the input is being filled. No overlapping, and no JS needed.

    HTML Assuming the image height is 60px, the width of the first and third span is 30px,

    <span id="first">nbsp;</span><br />
    <span id="second"><input type="text" /></span><br />
    <span id="third">nbsp;</span>
    

    CSS

    span#first{background:url('firstimage') no-repeat; height:60px; width:30px;}
    span#third{background:url('thirdimage') no-repeat; height:60px; width:30px;}
    span#second input{background:url('second image') repeat-x; height:60px;}
    

    That should resolve your issue.

    0 讨论(0)
  • 2021-02-03 10:42

    I have done this a few times. I have the background image inside a div and use css to position the input field accordingly.

    Have a peek at the following site I created that used this technique and use the code: http://www.ukoffer.com/ (Right hand side Newsletter)

    0 讨论(0)
  • 2021-02-03 10:43

    I'd do it this way:

    <style type="text/css">
    div.custom {
        background:url(/images/input-bkg-w173.gif) no-repeat;
        padding:8px 5px 4px 5px;
    }
    div.custom input {
        background-color: #fff;
        border:none;
        font-size:10px;
    }
    </style>
    <div class="custom"><input type="text" class="custom" size="12" /></div>
    

    You just have to adjust the padding values so everything fits correctly. It is - in my eyes- definitely the best solution since in any other case you're working with a whole input field. And the whole input field is - by definition - a box where users can enter text.

    If you can rely on JavaScript you could wrap such div-Elements around your input fields programatically.

    Edit: With jQuery you could do it this way:

    $( 'input.custom' ).wrap( '<div class="custom"></div>' );
    

    CSS:

    div.custom {
        background:url(/images/input-bkg-w173.gif) no-repeat;
        padding:8px 5px 4px 5px;
    }
    input.custom {
        background-color: #fff;
        border:none;
        font-size:10px;
    }
    

    And your HTML:

    <input class="custom" ... />
    
    0 讨论(0)
  • 2021-02-03 10:43

    You don't need the div element, you can assign a background to the input directly.

    Edit: Here is the working code. I tested it, but you'll have to adjust it for your needs. As far as I can tell, everything here is needed.

    input {
        background: #FFF url(test.png) no-repeat bottom right;
        width: 120px;
        height: 20px;
        line-height:20px;
        padding:0;
        text-indent:3px;
        margin:0;
        border: none;
        overflow:hidden;
    }
    

    Edit2: I'm not quite sure why I'm getting downvoted, but this method should work unless you need an image bigger than the input element itself. In that case, you should use the extra div element. However, if the image is the same size as the input, there is no need for the extra markup.

    Edit3: Ok, after bobince pointed out a problem, I'm getting a little closer. This will be work in IE6&7 and it's close in FF, but I'm still working on that part.

    input {
        background: #FFF url(test.png) no-repeat 0px 0px;
        background-attachment:fixed;
        width: 120px;
        height: 20px;
        line-height:20px;
        padding:0px;
        text-indent:3px;
        margin:0;
        border: none;
    }
    body>input {
        background-position:13px 16px;
    }
    

    Edit4: Ok, I think I got it this time, but it requires use of a CSS3 selector, so it won't validate as CSS 2.1.

    input { 
        background: #FFF url(test.png) no-repeat 0px 0px;
        background-attachment:fixed;
        width: 120px;
        height: 20px;
        line-height:20px;
        padding:0px;
        text-indent:3px;
        margin:0;
        border: none;
    }
    body>input { 
        background-position:13px 16px;
    }
    body>input:enabled { 
        background-position:9px 10px;
    }
    

    body>input will target everything except for IE6, body>input:enabled will target any form elements that aren't disabled for all browsers except for IE 6, 7, & 8. However, because :enabled is a CSS3 selector, it doesn't validate as CSS2.1. I wasn't able to find an appropriate CSS2 selector that would allow me to separate IE7 from the other browsers. If not validating (yet, until the validator switches to CSS3) is a problem for you, then I think your only option is the extra div element.

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