[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 361
  • Last Modified:

stack (zindex?) a custom form element behind a select box

i have a custom for element that i want to stack behind a select box.

how can i do that? i am doing this because i want the mouseover to work on the custom form, thus i need the custom form text sizes and locations be exact match to the select box..can you help make sure they are the same size.





0
finnstone
Asked:
finnstone
  • 25
  • 7
  • 6
2 Solutions
 
finnstoneAuthor Commented:
here is my custom element code also can be seen at englishtrunkshowco.com/test6.htm

<div id="Layer1" style="position:absolute; left:541px; top:137px; width:55px; height:64px; z-index:1"><img id="Image" src="blank.gif"></div>
<style type="text/css">
 
body{
       margin-left:0;
       margin-right:0;
       margin-top:0;
       margin-bottom:0;
       padding-left:0;
       padding-right:0;
       padding-top:0;
       padding-bottom:0;
       background:white;}
 
/* Displays Menu Links */
#menu{position:relative;
                   left:25px;
       top:100px;
                   width:200px;
                   background:white;}
/* Loads First Image At Page Load, and Positions Flipped Images */
#theimage{position:relative;
                         top:25px;
                         left:300px;}
 
 
.menu{font-family: times new roman;
                   font-size: 12pt;}
.menu a:link {color: blue;
       text-decoration: none;}
.menu a:visited {color: blue;
      text-decoration: none;}
.menu a:hover {color: green;
            text-decoration: underline;
            background-color: ;}
.menu a:active {color: orange;
             text-decoration: none;}
</style>
<div id="menu">
 
<ul>
<li><a href="linkone.html"
       class="menu" onMouseOver="document.getElementById('Image').src='images/mom0010q.jpg';"
       onMouseOut="document.getElementById('Image').src='blank.gif';" >Link One</a></li>
<li><a href="linktwo.html"
       class="menu" onMouseOver="document.getElementById('Image').src='images/mom0312q.jpg';"
       onMouseOut="document.getElementById('Image').src='blank.gif';" >Link Two</a></li>
</ul>
</div>
0
 
finnstoneAuthor Commented:
here is my select box code can be seen at englishsomething.com/category.cfm/categoryoid=5


<div id="Layer1" style="position:absolute; left:544px; top:206; width:124px; height:148px; z-index:1">
              <cfif isDefined("url.categoryoid")>
                <!--- categoy list --->
            <div style="position: absolute; left: 30px; top: 233px; width: 0px; height:0px; padding:0px;">
              <form name="selectForm" action="#cgi.script_name#" method="get">
                <table border="0" cellpadding="0" cellspacing="0" bgcolor="black" width="230">
                  <tr>
                    <td><table border="0" cellpadding="0" cellspacing="1" width="100%">
                        <tr bgcolor="#request.category.color#">
                          <td><font face="Arial,geneva,helvetica,sans-serif"><b>&nbsp; more
                                #request.category.displayname#</b></font></td>
                        </tr>
                      </table>
                    </td>
                  </tr>
                  <tr>
                    <td>
                      <table border="0" cellpadding="0" cellspacing="1" width="230">
                        <tr bgcolor="#request.category.color#">
                          <td align="center" height="115">
                            <select name="productoid" size="6" class="label" onChange="submit()" style="font-family:arial,geneva,helvetica,sans-serif;font-size:70%;width:230px;">
                              <cfloop query="request.category.productList">
                                <cfif mid(barcode1,1,1) neq "2">
                                  <option value="#productoid#"style="color:red;"  >#name#</option>
                                  <cfelseif mid(barcode1,1,4) eq "2222">
                                            <option value="#productoid#"style="color:green;">#name#</option>
                                <cfelse>
                                                  <option value="#productoid#" >#name#</option>
                                </cfif>
                              </cfloop>
                            </select>
                            <input type="hidden" name="categoryoid" value="#url.categoryoid#">
                          </td>
                        </tr>
                      </table>
                    </td>
                  </tr>
                </table>
              </form>
            </div>
            <br />
          </cfif>
         
            </div>
0
 
COBOLdinosaurCommented:
If you put thw select on top of th ecustome element not of the effects are going to work becaus the mouse can only interact with the top element on the stack.  As for the sizing use css to give the same dimenisions and some of the time the browser and setting s the user has set will make them the same size.

Cd&
0
Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

 
finnstoneAuthor Commented:
then can i put the custom element on top of the seelct and just hide the text?

i am having trouble making the text line up, can you please show me :)

-rob
0
 
finnstoneAuthor Commented:
line up and be the same size
0
 
finnstoneAuthor Commented:
id also like to get rid of the links, how can i do that but keep the functionality?

thanks experts!
0
 
finnstoneAuthor Commented:
summarY:

i cant get spacing between the text the same as on the category page, see how it is bigger spacing on this page. i am still confused on what i need to specify on z valus and how i can get rid of links
0
 
finnstoneAuthor Commented:
this page is englishtrunkshowco.com/test6.htm
0
 
finnstoneAuthor Commented:
here is my latest and greatest test page..you can see the problem...the text in custom element does not match up to select box
0
 
COBOLdinosaurCommented:
You can't put the custom element on top of a select because it has a z-index of infinity.  If there is so much of the select behaviour that you don't want; why use it at all?  All you are doing is tying up the page in knots and creating accessibility issues.  

Just use a custom control, and when yu are ready to submit, just populate hidden form fields to give the server side script what it needs to process.  Having been down this road I can already tell you that every porblem you solve will create new problems and every hac and work around will just make the page less reliable and more difficult to maintain.

As for sizing and possitioning you are not ever going to get it exact cro-ss-browser, and when you throw in user prefrence settings you will be luck to render the way it is supposted  to 60% of the time.

Cd&
0
 
finnstoneAuthor Commented:
ok.

well how can i make this custom box look good and get rid of the bullets. i want it to be scrollable. look at this page, you can actually see that the custom element works behind the select , however the custom element does not look very nice . i would get rid of select if i can make the custom look like it.
0
 
finnstoneAuthor Commented:
0
 
BatalfCommented:
Why do you need the select box? The best way of doing this as far as I can see is to use a hidden field as Cd& mentioned.

You could use a div with overflow:auto instead of the select box. And when you click on an item, you could put the id of that item in the hidden field.

This is not working 100% as you want, but it gives you an idea. You need to remove the link from the <a> tag and replace it by something like

<a href="#" onclick="document.forms[0].productoid.value='110';return false"> where 110 is the id of the current element. This is you code modified:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd"> 
<html>
<head>
<title></title>
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
</head>
<body>
<div id="Layer1" style="position:absolute; left:541px; top:137px; width:55px; height:64px; z-index:1"><img id="Image" src="blank.gif"></div>
<style type="text/css">
 
body{
     margin-left:0;
     margin-right:0;
     margin-top:0;
     margin-bottom:0;
     padding-left:0;
     padding-right:0;
     padding-top:0;
     padding-bottom:0;
     background:white;}
 
/* Displays Menu Links */

/* Loads First Image At Page Load, and Positions Flipped Images */
#theimage{position:relative;
                 top:25px;
                 left:300px;}

.menu a:link {color: blue;
     text-decoration: none;}
.menu a:visited {color: blue;
    text-decoration: none;}
.menu a:hover {color: green;
        text-decoration: underline;
        background-color: ;}
.menu a:active {color: orange;
         text-decoration: none;}
.items{
    margin-left:0px;
}
.items li{
         list-style-type: none;
         line-height:14px;
}
.items a{
    text-decoration:none;
    display:block;
}
.items a:hover{
    background:#000066;
    color:#FFFFFF;
}
.highlight{
    background:#000000;
}
.normal{
    background:#FFFFFF;
}
</style>
<div id="menu" style="height:150px;width:150px;overflow:hidden;overflow-y:auto;border:1px solid #000000">
<ul class="items">
<li style="font-family:arial,geneva,helvetica,sans-serif;font-size:70%;width:230px;"><a href="linkone.html"
     class="menu" onMouseOver="document.getElementById('Image').src='http://englishtrunkshowco.com/images/mom0010q.jpg';"
     onMouseOut="document.getElementById('Image').src='blank.gif';" >Ascot Picnic Hamper Teapot</a></li>  
     
<li style="font-family:arial,geneva,helvetica,sans-serif;font-size:70%;width:230px;"><a href="linkone.html"
     class="menu" onMouseOver="document.getElementById('Image').src='http://englishtrunkshowco.com/images/mom0203q.jpg';"
     onMouseOut="document.getElementById('Image').src='blank.gif';" >Beach Hut Teapot</a></li>  
     
<li style="font-family:arial,geneva,helvetica,sans-serif;font-size:70%;width:230px;"><a href="linkone.html"
     class="menu" onMouseOver="document.getElementById('Image').src='http://englishtrunkshowco.com/images/mom0292q.jpg';"
     onMouseOut="document.getElementById('Image').src='blank.gif';" >Brown Betty Teapot</a></li>  
     
<li style="font-family:arial,geneva,helvetica,sans-serif;font-size:70%;width:230px;"><a href="linkone.html"
     class="menu" onMouseOver="document.getElementById('Image').src='http://englishtrunkshowco.com/images/qitems181.jpg';"
     onMouseOut="document.getElementById('Image').src='blank.gif';" >Daffodil Teacup trio</a></li>  
     
<li style="font-family:arial,geneva,helvetica,sans-serif;font-size:70%;width:230px;"><a href="linkone.html"
     class="menu" onMouseOver="document.getElementById('Image').src='http://englishtrunkshowco.com/images/mom0014q.jpg';"
     onMouseOut="document.getElementById('Image').src='blank.gif';" >Expresso Maker Teapot</a></li>  
     
<li style="font-family:arial,geneva,helvetica,sans-serif;font-size:70%;width:230px;"><a href="linkone.html"
     class="menu" onMouseOver="document.getElementById('Image').src='http://englishtrunkshowco.com/images/1DSCF0030q.jpg';"
     onMouseOut="document.getElementById('Image').src='blank.gif';" >Friendship Tea Set (Linen Napkin)</a></li>  
     
<li style="font-family:arial,geneva,helvetica,sans-serif;font-size:70%;width:230px;"><a href="linkone.html"
     class="menu" onMouseOver="document.getElementById('Image').src='http://englishtrunkshowco.com/images/mom0337q.jpg';"
     onMouseOut="document.getElementById('Image').src='blank.gif';" >Graduate Teapot</a></li>  
     
<li style="font-family:arial,geneva,helvetica,sans-serif;font-size:70%;width:230px;"><a href="linkone.html"
     class="menu" onMouseOver="document.getElementById('Image').src='http://englishtrunkshowco.com/images/qitems158.jpg';"
     onMouseOut="document.getElementById('Image').src='blank.gif';" >London Taxi Teapot</a></li>  
     
<li style="font-family:arial,geneva,helvetica,sans-serif;font-size:70%;width:230px;"><a href="linkone.html"
     class="menu" onMouseOver="document.getElementById('Image').src='http://englishtrunkshowco.com/images/qitems146.jpg';"
     onMouseOut="document.getElementById('Image').src='blank.gif';" >One cup teapot</a></li>  
     
<li style="font-family:arial,geneva,helvetica,sans-serif;font-size:70%;width:230px;"><a href="linkone.html"
     class="menu" onMouseOver="document.getElementById('Image').src='http://englishtrunkshowco.com/images/mom0227q.jpg';"
     onMouseOut="document.getElementById('Image').src='blank.gif';" >Sailboat Teapot</a></li>  
     
<li style="font-family:arial,geneva,helvetica,sans-serif;font-size:70%;width:230px;"><a href="linkone.html"
     class="menu" onMouseOver="document.getElementById('Image').src='http://englishtrunkshowco.com/images/mom0224q.jpg';"
     onMouseOut="document.getElementById('Image').src='blank.gif';" >Sand Castle Teapot</a></li>  
</ul>
</div>
<form>
<input type="hidden" name="productoid">
</form>
</body>
</html>
 
0
 
COBOLdinosaurCommented:
You can try something like this if you just need to have the look and feel of a select:


<html>
<head>
<style>
   .selectBOX {border:3px ridge #dddddd;height:75;width:160;overflow:auto;
               border-right:3px double #bbbbbb; border-bottom:3px double #bbbbbb;}
   
   .hiliteON {color:white;background-color:navy;font-family:arial;font-size:10pt;}
   .hiliteOFF {color:black;background-color:white;font-family:arial;font-size:10pt}
</style>
<script type="text/javascript">
<!--
   var lastone=false;
   function chgcls(EL)
   {
      if (lastone)
      {
         lastone.className="hiliteOFF";
      }
      lastone=EL;
      lastone.className="hiliteON"
   }
//-->
</script>
</head>
<body>
<h1> Fake Form Elements </h1>
<div class="selectBOX">
   <table border="0" cellspacing="0" cellpadding="0">
      <tr><td class="hiliteOFF" onClick="chgcls(this)">Alberta</td></tr>
      <tr><td class="hiliteOFF" onClick="chgcls(this)">Ontario</td></tr>
      <tr><td class="hiliteOFF" onClick="chgcls(this)">Yukon in the far north</td></tr>
      <tr><td class="hiliteOFF" onClick="chgcls(this)">Quebec</td></tr>
      <tr><td class="hiliteOFF" onClick="chgcls(this)">Newfoundland</td></tr>
      <tr><td class="hiliteOFF" onClick="chgcls(this)">all fake 1</td></tr>
      <tr><td class="hiliteOFF" onClick="chgcls(this)">all fake 2</td></tr>
      <tr><td class="hiliteOFF" onClick="chgcls(this)">all fake 3</td></tr>
      <tr><td class="hiliteOFF" onClick="chgcls(this)">all fake 4</td></tr>
      <tr><td class="hiliteOFF" onClick="chgcls(this)">all fake 5</td></tr>
   </table>
</div>
</body>
</html>

        Even though the fake select is not a functional form element, we
        could still capture the cell value with the onClick event and use
        it for processing. The best way we put the link as the title
        attribute of the cell an then it can be refrence through the node
        object of the cell, and fire with Javascript.

        The mouseove would the same as it is now except it would be on the cell.  

Let me know itf yu want to try it like that and I wil set up more complete
code.  This is just some old code i had on my HD that I tweak a little.


Cd&
0
 
finnstoneAuthor Commented:
your second code has no mouseover effect?

thanks cd& looks like alot of work on your part!! THANKS FOR DIGGING FOR YOUR OLD CODE
0
 
finnstoneAuthor Commented:
WOW, cool , the first code works just like i want...i will now try and change to exactly what i want because i need an onclick event as you can see at

http://englishtrunkshowco.com/category.cfm/categoryoid=1


but i think it wont be too hard because my selevt form doesnt have an onclick right now but a onchange event currently as you can see

<form name="selectForm" action="#cgi.script_name#" method="get">

 <select name="productoid" size="6" class="label" onChange="submit()" style="font-family:arial,geneva,helvetica,sans-serif;font-size:70%;width:230px;">
                           
0
 
finnstoneAuthor Commented:
could you go into more detail on how i can execute the onchange to start working?


one other 1, will this be compatible with other broswers besides IE?
0
 
BatalfCommented:
I'm not sure if you're working with Cobols code or mine. But if it's mine, then it will be as follow:

Since you're using "GET" as method on your form, you don't need a form. You only need to redirect the url. This can be done by changing your <LI>s from

<li style="font-family:arial,geneva,helvetica,sans-serif;font-size:70%;width:230px;"><a href="linkone.html"
     class="menu" onMouseOver="document.getElementById('Image').src='http://englishtrunkshowco.com/images/mom0224q.jpg';"
     onMouseOut="document.getElementById('Image').src='blank.gif';" >Sand Castle Teapot</a></li>  
</ul>

to something like

<li style="font-family:arial,geneva,helvetica,sans-serif;font-size:70%;width:230px;"><a href="#cgi.script_name#?productoid=110"
     class="menu" onMouseOver="document.getElementById('Image').src='http://englishtrunkshowco.com/images/mom0224q.jpg';"
     onMouseOut="document.getElementById('Image').src='blank.gif';" >Sand Castle Teapot</a></li>  
</ul>

where "110" is the id of this product.

I now see that you also have to modify the <div> tag in my code to make it work on safari since it doesn't support overflow-x and overflow-y.

Use this:

<div id="menu" style="height:150px;width:150px;overflow:auto;border:1px solid #000000">

instead. padding should also be set to 0 for the "item" class:

.items{
      margin-left:0px;
      padding-left:0px;
}
0
 
finnstoneAuthor Commented:
im using coboals code, but i will loook at yours for the submit form hint..

i have a q, im getting an error on my site now as i try and port the code over

here it is

Invalid token &apos;{&apos; found on line 409 at column 10.  
<p>The CFML compiler was processing:<ul><li>The body of a cfoutput tag beginning on line 24, column 18.<li>The body of a cfoutput tag beginning on line 24, column 18.<li>The body of a cfoutput tag beginning on line 24, column 18.</ul>  
 
The error occurred in D:\Inetpub\englishtrunkshowco\extensions\customtags\wrapper.cfm: line 409
 
407 :
408 : /* Loads First Image At Page Load, and Positions Flipped Images */
409 : #theimage{position:relative;
410 :                  top:25px;
411 :                  left:300px;}

 
0
 
finnstoneAuthor Commented:
ignore that error fixed it .. genreated beause im using a cfm page
0
 
finnstoneAuthor Commented:
i am getting this erro r though if you can help L::)))

Invalid CFML construct found on line 448 at column 173.  
ColdFusion was looking at the following text:<p>\"</p><p>The CFML compiler was processing:<ul><li>An expression that began on line 448, column 166.<br>Your expression might be missing an ending "#" (it might look like #expr ).<li>The body of a cfoutput tag beginning on line 24, column 18.<li>The body of a cfoutput tag beginning on line 24, column 18.<li>The body of a cfoutput tag beginning on line 24, column 18.<li>The body of a cfoutput tag beginning on line 24, column 18.</ul>  
 
The error occurred in D:\Inetpub\englishtrunkshowco\extensions\customtags\wrapper.cfm: line 448
 
446 :               <cfif isDefined("url.categoryoid")>
447 :                 <!--- categoy list --->
448 :             <div id="menu" style="position: absolute; left: 30px; top: 233px; width: 0px; height:0px;  padding:0px; overflow:hidden;overflow-y:auto;border:1px solid #000000">
449 :               <form name="selectForm" action="#cgi.script_name#" method="get">
450 :                 <table border="0" cellpadding="0" cellspacing="0" bgcolor="black" width="230">

 
0
 
finnstoneAuthor Commented:
ignore..i found a missing # again..
0
 
finnstoneAuthor Commented:
next problem the custom select is not showing up////see at englishtrunkshowco.com/category.cfm/categoryoid=1

heres my new code

<div id="Layerold" style="position:absolute; left:544px; top:206; width:124px; height:148px; z-index:1">
              <cfif isDefined("url.categoryoid")>
                <!--- categoy list --->
            <div id="menu" style="position: absolute; left: 30px; top: 233px; width: 0px; height:0px;  padding:0px; overflow:hidden;overflow-y:auto;border:1px solid 000000">
              <form name="selectForm" action="#cgi.script_name#" method="get">
                <table border="0" cellpadding="0" cellspacing="0" bgcolor="black" width="230">
                  <tr>
                    <td><table border="0" cellpadding="0" cellspacing="1" width="100%">
                        <tr bgcolor="#request.category.color#">
                          <td><font face="Arial,geneva,helvetica,sans-serif"><b>&nbsp; more
                                #request.category.displayname#</b></font></td>
                        </tr>
                      </table>
                    </td>
                  </tr>
                  <tr>
                    <td>
                      <table border="0" cellpadding="0" cellspacing="1" width="230">
                        <tr bgcolor="#request.category.color#">
                          <td align="center" height="115">
                            <ul class="items">
                                          <cfloop query="request.category.productList">
                                <cfif mid(barcode1,1,1) neq "2">
                                <li style="color:red;font-family:arial,geneva,helvetica,sans-serif;font-size:70%;width:230px;"><a href="linkone.html"
       class="menu"    onMouseOver="document.getElementById('Image').src='images/#image#';"
       onMouseOut="document.getElementById('Image').src='blank.gif';" >#name#</a></li>  
                                           <cfelseif mid(barcode1,1,4) eq "2222">
                                             <li style="color:green;font-family:arial,geneva,helvetica,sans-serif;font-size:70%;width:230px;"><a href="linkone.html"
       class="menu"    onMouseOver="document.getElementById('Image').src='images/#image#';"
       onMouseOut="document.getElementById('Image').src='blank.gif';" >#name#</a></li>
                                <cfelse>
                                                   <li style="font-family:arial,geneva,helvetica,sans-serif;font-size:70%;width:230px;"><a href="linkone.html"
       class="menu"    onMouseOver="document.getElementById('Image').src='images/#image#';"
       onMouseOut="document.getElementById('Image').src='blank.gif';" >#name#</a></li>
                                </cfif>
                              </cfloop></ul>
                            </select>
                            <input type="hidden" name="categoryoid" value="#url.categoryoid#">
                          </td>
                        </tr>
                      </table>
                    </td>
                  </tr>
                </table>
              </form>
            </div>
            <br />
          </cfif>
         
            </div>
0
 
COBOLdinosaurCommented:
I have used in both Mozilla an IE, son't know a bout additional browsers because I have never had to support Opera or Safari.

as for implementing an on change; that gets run off the the onclick of the option:

<tr><td class="hiliteOFF"  title="linkone.htm"
         onClick="chgcls(this); dosubmit(this.title,this.childeNode[0].innerHTML);"><span
         style="display:none">29.95</span>all fake 2</td></tr>
Te apsn with the option value stays hidden, but the value gets passed to the submit return along with the link that is stored in the title attribute.

Cd&
0
 
finnstoneAuthor Commented:
i used the code in a test and it worked at test10.cfm but then i put it in my main site and thecustom box is not showing up??
0
 
COBOLdinosaurCommented:
Well I don't know Cold Fusion, but is sound like the styles are missing on invalid.  A bad style entry can mess up hte whole stylesheet.

Cd&
0
 
finnstoneAuthor Commented:
what do you mean by on invalid?

the styles worked in test10.cfm thats what is a litle weird
0
 
COBOLdinosaurCommented:
An incorrect entry; especially a syntax error.  When you were looking at it in test, was it coming froma server os some kind of preview mode in CF?

Cd&
0
 
finnstoneAuthor Commented:
last questions...home stretch. thanks guys..( BTW IT IS NOW FULLY FUNCTIONAL AND IM JUST CHANING HOW THE TEXT WORKS...THANKS!!)

1) how can i set the text not to look like a link and make the text black
2) how can i set the background to white

for instance i want it to look like it used to

here is how it used to look (check it out)

englishtrunkshowco.com/oldcategory.cfm/categoryoid=12
0
 
finnstoneAuthor Commented:
sorry one more

3) need a black line at the bottom of the new custom select box - notice you have to scroll to get to it instead of it persisting as a bottom while text values scroll
0
 
BatalfCommented:
How come I got all the points in this question? A mistake I guess finnstone.

Batalf
0
 
finnstoneAuthor Commented:
yes i thought i split the points 400 to 100 in his favor, ill do a mod
0
 
BatalfCommented:
Did I just receive all the points again?

:-)
0
 
finnstoneAuthor Commented:
yes..sorry i didnt end up using any of his code and had thought it was his when it was yours that was helpful
0
 
BatalfCommented:
OK, Thanks, but I think Cd& deserves alot of points for assisting you as well.

Batalf
0
 
COBOLdinosaurCommented:
No its fine the way it is. After all the teapots I am going to go have a cupa tea...

Cd&
0
 
BatalfCommented:
#A lot of laughing#
0
 
finnstoneAuthor Commented:
ENJOY the tea") thanks for the help.  i  opened a new question that i could really use help with in the css category, my new select box does not seem to have a bottom part like the old one did.
0

Featured Post

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

  • 25
  • 7
  • 6
Tackle projects and never again get stuck behind a technical roadblock.
Join Now